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ソケット通信を使用してデプロイする場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く