uWSGI で Django を使う方法

revision-up-to:17812 (1.4)

uWSGI は、ピュア C で書かれた、高速で自己回復機能のある、開発者とシステム管理 者に優しいアプリケーションコンテナサーバです。

uWSGI の必要条件

uWSGI の Wiki にはいくつかの インストール条件 が書かれています。 Python の パッケージマネージャである pip を使うと、 uWSGI のどのバージョンのインストール も 1 つのコマンドでインストールできます。例えば:

# 現在の安定バージョンをインストールします
$ sudo pip install uwsgi

# または LTS (long term support) バージョンをインストールします
$ sudo pip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz

uWSGI の動作モデル

uWSGI はクライアント・サーバモデルで動作します。 Web サーバ (例えば Nginx, Apache など) は、動的なコンテンツを配信する Django-uWSGI の「ワーカー」プロセ スと通信します。もっと詳しく知るには、WSGI の バックグラウンドドキュメント を見てください。

uWSGI サーバに Django 向けの設定をし起動する

uWSGI はプロセスを設定する複数の方法をサポートしています。 uWSGI の 設定ドキュメント設定例 を見てください。

以下は uWSGI サーバを起動するコマンドの例です:

uwsgi --chdir=/path/to/your/project
    --module='mysite.wsgi:application' \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # ソケットファイルも使えます
    --processes=5 \                 # ワーカープロセスの数
    --uid=1000 --gid=2000 \         # もし root で実行する場合、 uwsgi は権限を落とせます
    --harakiri=20 \                 # 20 秒以上かかるプロセスを再生成します
    --limit-as=128 \                # プロジェクトを 128 MB に制限します
    --max-requests=5000 \           # 5000 リクエストに応答したらプロセスを再生成します
    --vacuum \                      # exit する時に環境をクリアします
    --home=/path/to/virtual/env \   # virtualenv への追加パス
    --daemonize=/var/log/uwsgi/yourproject.log      # プロセスをバックグラウンドで実行します

ここでは mysite という名前のトップレベルプロジェクトパッケージがあり、その 中に WSGI の application を含む mysite/wsgi.py があることを仮定し ています。このレイアウトは、 Django の最近のバージョンで django-admin.py startproject mysite (mysite の箇所にはプロジェクト名が入ります) を実行し た時に作られるものです。このファイルがない場合、自分で作る必要があります。この ファイルに書くべきデフォルトの内容と、追加できる内容については WSGI 環境にデプロイする方法 ドキュメントを参照してください。

この例で Django 用のオプションは以下の通りです:

  • chdir: Python の import パスに必要なディレクトリのパスです。 – 例では mysite パッケージを含むディレクトリです。
  • module: 使われる WSGI モジュール – おそらく startproject が 作った mysite.wsgi モジュールです。
  • env: 少なくとも DJANGO_SETTINGS_MODULE を含める必要があります。
  • home: プロジェクトの virtualenv への追加パスです。

以下は ini ファイルでの設定例です:

[uwsgi]
chdir=/path/to/your/project
module='mysite.wsgi:application'
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

以下は設定ファイルの使い方の例です:

uwsgi --ini uwsgi.ini

uWSGI ワーカーの起動、停止、リロードについて情報を得るには、 uWSGI プロセスの管理 ドキュメントを参照してください。