高校国語786382 views
教育149096 views
Computer366119 views
高校物理158718 views
高校化学2916128 views
中学社会667518 views
雑学1472959 views
小学算数1197058 views
小学理科718021 views
小学社会308993 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 に任せることで、パフォーマンスとセキュリティが向上する。