コンテンツにスキップ

Gunicorn

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに

[編集]

Gunicorn(Green Unicorn)は、PythonのWSGIアプリケーションを実行するための高性能なHTTPサーバーです。このハンドブックでは、Gunicornの基本から応用までを解説し、実践的な使用方法を紹介します。

Gunicornとは

[編集]

Gunicornは、PythonWSGI(Web Server Gateway Interface)仕様に準拠したHTTPサーバーです。以下の特徴を持っています。

  • シンプルで軽量: 設定が簡単で、リソース消費が少ない。
  • 高性能: マルチプロセスモデルを採用し、高い並行処理能力を提供。
  • 柔軟性: WSGIASGIの両方に対応。

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のステータスを確認するには、SIGTTINSIGTTOUシグナルを使用します。

Gunicornのセキュリティ

[編集]

Gunicornを安全に運用するためには、以下の点に注意します。

  • ファイアウォールの設定: 不要なポートを閉じる。
  • HTTPSの使用: リバースプロキシ(Nginxなど)と組み合わせてHTTPSを有効化。
  • ワーカーの分離: ワーカーを分離して、セキュリティリスクを軽減。

Gunicornのユースケース

[編集]
  • Webアプリケーションのデプロイ: Flask、DjangoなどのWSGIアプリケーションを実行。
  • マイクロサービス: 軽量で高速なHTTPサーバーとして利用。
  • リアルタイムアプリケーション: ASGIアプリケーションを実行。

Gunicornのトラブルシューティング

[編集]

よくある問題と解決策

[編集]
  1. ワーカーがクラッシュする
    • メモリ不足が原因の場合が多い。ワーカー数を減らすか、メモリを増やす。
  2. リクエストがタイムアウトする
    • --timeoutオプションでタイムアウト時間を延長。
  3. パフォーマンスが低下する
    • ワーカーモデルやワーカー数を調整。

参考文献

[編集]

このハンドブックが、Gunicornの理解と実践に役立つことを願っています。Gunicornを活用し、高性能なPythonアプリケーションをデプロイしましょう!