『Python FlaskによるWebアプリ開発入門』(以下、Flaskbook)の第15章は、第2部で作った動体検知アプリケーションをまるごとDockerイメージ化して、Flaskに組み込まれたWebサーバを使ったWebアプリケーションの公開方法を説明している。しかし、Webサーバは別途用意して、WSGIを使って公開する方が一般的かなと思ったので、そのようにしてみた。
やりたいこと
- Flaskbookで作ったWebアプリをDockerコンテナとして動かす
やること
- Webアプリは、UbuntuのDockerイメージに入れ込む
- Webサーバは、Nginxで用意する
- 複数コンテナになるので、docker composeを使用する
やったこと
- Flaskbookに載っているDockerfileでは、DBファイルとアプリ本体(appsディレクトリ)もイメージ内に含めてしまっている。
- そのため、今回はコンテナ化した後も色々コードを触りたいので、ホスト側のディレクトリをコンテナにマウントしてあげるように変更した。
- あとuwsgiを呼び出す時のオプションで、引数を渡せなかったので、
app.py
を少し改変した。- 関数
create_app
の定義で、config_key
を渡さないように、コードにコンフィグ名を埋め込む形にした。こういう値をコードの埋め込むのって良くないとは思いつつ、ググっても回避方法が分からなかったので、ここに時間をかけるべきじゃないと思って、ハードコーディングした
- 関数
- 実際にやった流れ
- ホストとしてUbuntu 22.04LTSの準備
- Docker、docker-composeのインストール
- uwsgiのiniファイル用意
- Dockerfileの作成
- nginx用
- アプリ用
- docker-compose.ymlの作成
- app.pyの修正
- デプロイ
- 動作確認(終わり)