りんご195339 views
高校国語786021 views
雑学1472774 views
中学理科1627080 views
MathPython492451 views
高校物理158466 views
英語608783 views
高校生物550093 views
Computer365661 views
小学算数1196005 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 に任せることで、パフォーマンスとセキュリティが向上する。