教育148875 views
高校日本史189857 views
ヒストリア284143 views
高校物理158224 views
高校倫理1433119 views
高校化学2913383 views
MathPython491378 views
小学理科717236 views
高校生物549842 views
数学講師2852771 views
Help
Tools

English

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