Flask の開発サーバーは本番環境には適さない。本番では Gunicorn などの WSGI サーバーを使ってデプロイする。
Gunicorn のインストール
pip install gunicorn
基本的な起動
gunicorn app:app
app: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:app
systemd によるサービス化
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.target
sudo systemctl start myapp sudo systemctl enable myapp
Nginx との連携
Gunicorn の前段に Nginx を配置してリバースプロキシとするのが一般的である。静的ファイルの配信やSSL終端を Nginx に任せることで、パフォーマンスとセキュリティが向上する。