Django を uWSGI とともに使うには?¶
uWSGI は高速かつ自己回復的、開発者やシステム管理者にとって使いやすいアプリケーションコンテナサーバーで、純粋な C 言語で記述されています。
参考
uWSGI のドキュメントは、Django、nginx および uWSGI をカバーした tutorial を提供しています (たくさんあるセットアップ方法の一例です)。以下のドキュメントは、Django を uWSGI と統合する方法に焦点を当てています。
前提条件: uWSGI¶
uWSGI の wiki には、いくつかの installation procedures が記載されています。Python のパッケージマネージャーであるpipを使って、あらゆるバージョンの uWSGI を一つのコマンドでインストールすることができます。たとえば:
# Install current stable version.
$ python -m pip install uwsgi
# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
uWSGI モデル¶
uWSGI はクライアントサーバモデルで動作します。Web サーバー (nginx や Apache など) は djangoo-uwsgi
"worker" プロセスと通信し、動的なコンテンツを提供します。
Django に対して uWSGI サーバーを設定、開始する¶
uWSGI では、プロセスを設定する方法が複数提供されています。uWSGI's configuration documentation を参照してください。
以下は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 \ # can also be a file
--processes=5 \ # number of worker processes
--uid=1000 --gid=2000 \ # if root, uwsgi can drop privileges
--harakiri=20 \ # respawn processes taking more than 20 seconds
--max-requests=5000 \ # respawn processes after serving 5000 requests
--vacuum \ # clear environment on exit
--home=/path/to/virtual/env \ # optional path to a virtual environment
--daemonize=/var/log/uwsgi/yourproject.log # background the process
この例では、mysite
と名付けられたトップレベルのプロジェクトパッケージがあり、またその中に mysite/wsgi.py
という WSGI application
オブジェクトを含むモジュールがあると仮定しています。これは、最近のバージョンの Django で django-admin startproject mysite
(mysite
には自分のプロジェクト名が入ります) を実行した場合、自動生成されるファイル構成です。もしこのファイルが存在しない場合、自分自身で作る必要があります。このファイルに記述すべきデフォルトの内容と、自分で追加できる部分に関しては、WSGI とともにデプロイするには ドキュメントを参照してください。
Django 特有のオプションは以下の通りです:
chdir
: Python のインポートパス上で必要になるディレクトリへのパス -- つまりmysite
パッケージを含むディレクトリです。module
: 使われる WSGI モジュール -- 通常はstartproject
によって生成されるmysite.wsgi
モジュールです。env
: 少なくともDJANGO_SETTINGS_MODULE
を含む必要があります。home
: プロジェクトの仮想環境へのパスを指定します。
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
ini 設定ファイルを使用する例:
uwsgi --ini uwsgi.ini
ファイルアップロード時の UnicodeEncodeError
を修正する
非 ASCII 文字を含むファイル名でファイルをアップロードするときに UnicodeEncodeError
が発生する場合は、 uwsgi.ini
に以下の設定を追加して、uWSGI が非 ASCII ファイル名を受け付けるようにしてください:
env = LANG=en_US.UTF-8
詳細については、Unicode リファレンスガイドの ファイル セクションを参照してください。
uWSGI worker の開始、停止およびリロードに関する情報は、uWSGI ドキュメントの managing the uWSGI process を参照してください。