Flask アプリを Gunicorn でデプロイする
Flask の開発サーバーは本番環境には適さない。本番では Gunicorn などの WSGI サーバーを使ってデプロイする。
Gunicorn のインストール
pip install gunicorn基本的な起動
gunicorn app:appapp:app は「app.py ファイルの app オブジェクト」を意味する。デフォルトでは 127.0.0.1:8000 で起動する。
オプション指定
gunicorn -w 4 -b 0.0.0.0:8000 app:app| -w | ワーカープロセス数 |
| -b | バインドするアドレスとポート |
| --timeout | リクエストタイムアウト秒数 |
| --access-logfile | アクセスログの出力先 |
| --error-logfile | エラーログの出力先 |
ワーカー数の目安は (2 × CPUコア数) + 1 とされている。
アプリケーションファクトリの場合
create_app 関数を使っている場合は、呼び出し形式を指定する。
gunicorn "app:create_app()"設定ファイル
オプションが多い場合は設定ファイルにまとめられる。
# gunicorn.conf.py
bind = '0.0.0.0:8000'
workers = 4
timeout = 30
accesslog = '/var/log/gunicorn/access.log'
errorlog = '/var/log/gunicorn/error.log'gunicorn -c gunicorn.conf.py app:appsystemd によるサービス化
Linux 環境ではサービスとして登録すると、自動起動や再起動が容易になる。
# /etc/systemd/system/myapp.service
[Unit]
Description=Gunicorn instance to serve myapp
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/var/www/myapp/venv/bin/gunicorn -c gunicorn.conf.py app:app
[Install]
WantedBy=multi-user.targetsudo systemctl start myapp
sudo systemctl enable myappNginx との連携
Gunicorn の前段に Nginx を配置してリバースプロキシとするのが一般的である。静的ファイルの配信やSSL終端を Nginx に任せることで、パフォーマンスとセキュリティが向上する。



