リモコンを使わなくなったことに一抹の不安を覚える
もりもりです。
今回はFlaskアプリやサービスを作って公開する場合の運用環境についてです。
#01. Flaskアプリをdocker上で動かしてみる
#02. vscodeのRemote Developmentでデバッグしてみる
今回はこちら → #03. 運用環境を構築してみる
まずは
第1回、第2回で作ったコンテナをそのままどこかのクラウドサービスへ
デプロイしたらダメなの?というところですが
公式ドキュメントでは以下のように書かれています。
When running publicly rather than in development,
you should not use the built-in development server (``flask run``).
The development server is provided by Werkzeug for convenience,
but is not designed to be particularly efficient, stable, or secure.
Instead, use a production WSGI server.
ということのようです。
flask runで実行した開発サーバーを本番環境で使用するべきではないと。
効率性、安定性、セキュリティを意識して設計してはいないよと。
代わりに本番環境ではWSGIサーバーを使ってねと。
てなわけで、WebサーバーとAppサーバーを用意し
WebサーバーとFlaskを繋ぐインターフェース
WSGI (Web Server Gateway Interface) を利用して
通信する環境をコンテナで作成していきます。
今回使用するWSGIサーバーはuWSGIです。
Flask + Docker + Nginx + uWSGI で環境を作っていきたいと思います。
ちなみにWSGIの読み方は「ウィズギー」だそうです。
ディレクトリ構成
ソースコードはGithubにあります。
app/Dockerfile
WORKDIR
を変更し、CMD
を追加します。追加した
CMD
ですが、
docker-compose.ymlに下記を追加しても問題ないと思います。(また試しときます。)
app/equirements.txt & run.py
uwsgiをインストールするので追加します。
app/uwsgi.ini
uWSGIの設定ファイルです。
web/Dockerfile
公式イメージをベースとします。
web/nginx.conf
Nginxの設定ファイルです。
31行目のホスト名にはdocker-compose.ymlで指定したapp側のホスト名を指定します。
docker-compose.yml
コンテナをapp-serverとweb-serverの2つに分けます。
ホスト名も忘れずに設定しておきます。
コンテナを起動して動作確認
コンテナが起動すればブラウザから下記にアクセスするだけです。
http://localhost:4231
はい、運用環境用のコンテナができました。
あとはNginxやuWSGIの設定を本番用にちゃんと設定してから
どこかのクラウドサービスへデプロイしてあげればよさそうですね。
以上、もりもりでした。