# Django 4.1.8.dev20230308103347 ドキュメント

# Django を uWSGI とともに使うには？

uWSGI は高速かつ自己回復的、開発者やシステム管理者にとって使いやすいアプリケーションコンテナサーバーで、純粋な C 言語で記述されています。

参考

uWSGI のドキュメントは、Django、nginx および uWSGI をカバーした tutorial を提供しています (たくさんあるセットアップ方法の一例です)。以下のドキュメントは、Django を uWSGI と統合する方法に焦点を当てています。

## 前提条件: uWSGI

uWSGI の wiki には、いくつかの installation procedures が記載されています。pip (Python のパッケージマネージャー) を使って、あらゆるバージョンの 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 operates on a client-server model. Your web server (e.g., nginx, Apache) communicates with a `django-uwsgi` "worker" process to serve dynamic content.

### 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`: Should probably contain at least `DJANGO_SETTINGS_MODULE`.
- `home`: Optional path to your project virtual environment.

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 リファレンスガイドの Files セクションを参照してください。

uWSGI worker の開始、停止およびリロードに関する情報は、uWSGI ドキュメントの managing the uWSGI process を参照してください。