高校国語786825 views
小学算数1197935 views
高校日本史190165 views
英語610643 views
小学理科718445 views
LaTeX959469 views
高校生物550625 views
MathPython494484 views
高校物理159020 views
中学英語810290 views

Flask アプリを Gunicorn でデプロイする

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 に任せることで、パフォーマンスとセキュリティが向上する。