Python Gunicornサービス
Gunicornで提供するPython Webアプリケーション用のsystemdサービスを設定します。notifyサービスタイプ、Unixソケットバインディング、仮想環境、環境ファイル管理について解説します。
Application Services
詳細な説明
GunicornとsystemdでPythonアプリを提供する
Gunicorn(Green Unicorn)はPython Webアプリケーションの標準WSGIHTTPサーバーです。systemdと組み合わせることで、堅牢なプロダクションデプロイメントを提供します。Gunicornは信頼性の高い起動検出のためにType=notifyプロトコルをサポートしています。
[Unit]
Description=Gunicorn WSGI Application Server
After=network.target
[Service]
Type=notify
ExecStart=/opt/myapp/venv/bin/gunicorn \
--workers 3 \
--bind unix:/run/myapp/gunicorn.sock \
myapp.wsgi:application
Restart=on-failure
RestartSec=5
User=www-data
Group=www-data
WorkingDirectory=/opt/myapp
EnvironmentFile=/opt/myapp/.env
RuntimeDirectory=myapp
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
notifyサービスタイプ
Gunicornはsd_notify()プロトコルをサポートしており、リクエストを処理する準備ができた正確なタイミングをsystemdに通知します。
Unixソケットバインディング
NginxがリバースプロキシとしてフロントにいるときTCPポートの代わりにUnixソケットにバインドすることが推奨されます:
- パフォーマンス: UnixソケットはTCPループバックよりも高速
- セキュリティ: 公開ポートなし;ソケットファイルのみアクセス可能
- シンプルさ: ポート競合の心配なし
仮想環境
ExecStartが仮想環境内のGunicornバイナリのフルパスを使用していることに注目してください。仮想環境をactivateする必要なく、正しいPythonインタプリタと依存関係が使用されます。
ユースケース
NginxをフロントにしたDjangoまたはFlask WebアプリケーションをGunicorn WSGIサーバーで提供し、適切なプロセス管理、ファイルからの環境設定、Unixソケット通信を使用してデプロイする場合に使用します。