Gunicorn
はじめに
[編集]Gunicorn(Green Unicorn)は、PythonのWSGIアプリケーションを実行するための高性能なHTTPサーバーです。このハンドブックでは、Gunicornの基本から応用までを解説し、実践的な使用方法を紹介します。
Gunicornとは
[編集]Gunicornは、PythonのWSGI(Web Server Gateway Interface)仕様に準拠したHTTPサーバーです。以下の特徴を持っています。
Gunicornのインストール
[編集]Gunicornは、pip
を使って簡単にインストールできます。
pip install gunicorn
Gunicornの基本的な使い方
[編集]Gunicornは、コマンドラインから簡単に起動できます。以下は、基本的な使い方の例です。
gunicorn myapp:app
myapp
: Pythonモジュール名。app
: WSGIアプリケーションオブジェクト。
Gunicornの設定
[編集]Gunicornは、コマンドライン引数または設定ファイルで設定できます。
コマンドライン引数での設定例
[編集]gunicorn --workers 4 --bind 0.0.0.0:8000 myapp:app
--workers
: ワーカーの数。--bind
: バインドするアドレスとポート。
設定ファイルでの設定例
[編集]gunicorn.conf.py
を作成し、以下のように設定します。
workers = 4 bind = "0.0.0.0:8000"
設定ファイルを指定して起動するには、以下のコマンドを使用します。
gunicorn -c gunicorn.conf.py myapp:app
GunicornとWSGIアプリケーション
[編集]Gunicornは、WSGIアプリケーションを実行するために設計されています。以下は、FlaskアプリケーションをGunicornで実行する例です。
Flaskアプリケーションの例
[編集]# myapp.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Gunicorn!"
Gunicornで起動
[編集]gunicorn myapp:app
GunicornとASGIアプリケーション
[編集]Gunicornは、ASGIアプリケーションもサポートしています。ASGIアプリケーションを実行するには、uvicorn
のワーカーを使用します。
FastAPIアプリケーションの例
[編集]# myasgi.py from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "Gunicorn with ASGI"}
Gunicornで起動
[編集]gunicorn -k uvicorn.workers.UvicornWorker myasgi:app
Gunicornのワーカーモデル
[編集]Gunicornは、複数のワーカーモデルをサポートしています。以下は、主なワーカーモデルです。
- sync: 同期ワーカー(デフォルト)。
- eventlet: 非同期ワーカー(I/Oバウンドなアプリケーション向け)。
- gevent: 非同期ワーカー(I/Oバウンドなアプリケーション向け)。
- uvicorn: ASGIアプリケーション用のワーカー。
ワーカーモデルを指定するには、-k
オプションを使用します。
gunicorn -k gevent myapp:app
Gunicornのパフォーマンスチューニング
[編集]Gunicornのパフォーマンスを最適化するためには、以下の設定を調整します。
- ワーカーの数: CPUコア数の2倍程度が目安。
- タイムアウト: デフォルトは30秒。必要に応じて調整。
- ワーカーモデル: アプリケーションの特性に応じて選択。
例: パフォーマンスチューニング
[編集]gunicorn --workers 8 --timeout 120 --worker-class gevent myapp:app
Gunicornのロギングとモニタリング
[編集]Gunicornは、ログ出力とモニタリング機能を提供します。
ログ設定
[編集]gunicorn --access-logfile - --error-logfile - myapp:app
--access-logfile
: アクセスログの出力先。--error-logfile
: エラーログの出力先。
モニタリング
[編集]Gunicornのステータスを確認するには、SIGTTIN
やSIGTTOU
シグナルを使用します。
Gunicornのセキュリティ
[編集]Gunicornを安全に運用するためには、以下の点に注意します。
- ファイアウォールの設定: 不要なポートを閉じる。
- HTTPSの使用: リバースプロキシ(Nginxなど)と組み合わせてHTTPSを有効化。
- ワーカーの分離: ワーカーを分離して、セキュリティリスクを軽減。
Gunicornのユースケース
[編集]- Webアプリケーションのデプロイ: Flask、DjangoなどのWSGIアプリケーションを実行。
- マイクロサービス: 軽量で高速なHTTPサーバーとして利用。
- リアルタイムアプリケーション: ASGIアプリケーションを実行。
Gunicornのトラブルシューティング
[編集]よくある問題と解決策
[編集]- ワーカーがクラッシュする
- メモリ不足が原因の場合が多い。ワーカー数を減らすか、メモリを増やす。
- リクエストがタイムアウトする
--timeout
オプションでタイムアウト時間を延長。
- パフォーマンスが低下する
- ワーカーモデルやワーカー数を調整。
参考文献
[編集]このハンドブックが、Gunicornの理解と実践に役立つことを願っています。Gunicornを活用し、高性能なPythonアプリケーションをデプロイしましょう!