0
0

PyCharmとDockerとAzure Container Appsでチャットボット開発と構築

Last updated at Posted at 2023-11-05

概要

PyCharmとDockerを用いて開発を行い、それをAzureにデプロイしてみました。

PyCharmではDockerだけでなくdocker-composeも使用していますが、なぜかDockerの外側からのポート指定が上手くいかなかったのでdocker-composeを経由しています。Docker Desktopから起動した場合やアプリのデプロイ時には上手くいっているので、PyCharm上の設定が上手くいっていないのだと思います。

ソースコード

以下ではソースコードについては説明していません。
適宜、下記ソースコードを参照してください。

アーキテクチャ

image.png

ディレクトリ構造

.
|-- .chainlit
|   `-- config.toml ..Chainlitの設定ファイル
|-- Dockerfile
|-- chainlit.md ..Chainlit上で表示するReadme
|-- docker-compose.yml
|-- main.py ..チャットボットフロントエンド用Pythonファイル(Chainlit)
|-- make_data.py ..ドキュメントデータベース作成用Pythonふぃある
|-- public
|   |-- favicon.ico ..Chainlitで変更するfavicon
|   |-- logo_dark.png ..ダークテーマ用ロゴ
|   `-- logo_light.png ..通常テーマ用ロゴ
|-- requirements.txt
`-- samples
    `-- 001018385.pdf ..チャットボット用のデータサンプル

PyCharmでDockerの設定

Dockerの設定についてはDockerfileを参照してください。基本的には.envファイルさえ作成されていればあとはローカルファイルをごっそりコピーして構築しています。また、Dockerだけでは起動できなかったので、docker-composeについても構築しています。

事前に.envファイルを作成しておいてください。環境変数(APIキー)はDocker外部から与えるのではなく、内部にファイルとして渡しています。

実行構成の追加

image.png
実行構成の編集

image.png
+Docker Compose

image.png
実行

以上でDockerがビルドされ、実行されます。
image.png

Azure Container Registry

ACRリソース作成

image.png

image.png
管理者ユーザーのチェックを入れておく

ACRへのpush

ACRへpushする前にビルド済みdockerのtagをpush先と合わせておくと楽
コマンド例:docker tag langchain-chainlit-test-web acrchainlit.azurecr.io/langchain-chainlit-test-web

az login
az acr login --name acrchainlit
docker push acrchainlit.azurecr.io/langchain-chainlit-test-web

Azure Container Apps

ACAリソース作成

image.png

image.png

image.png

結果

image.png

雑感

いくつかはまりポイントがありました。

  1. Web AppsだとPython3.11に付属するSQLiteバージョンが足りず、Chainlitが起動できない(解決できなかった)
  2. Vercelだと起動すらできなかった(理由不明)
  3. 他の無料環境だとPythonライブラリが大きすぎてデプロイできないことが多かった
  4. PyCharmでインタープリターを設定すると設定が完了できない(実行構成をするとあっさり終わる)
  5. ACA設定時にターゲットポートを設定しておかないとアクセスできない(慣れていなかったので探すのに時間がかかってしまいました)

1週間くらいかかりましたが、ようやく考えていた通りの環境ができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0