Apacheおよびmod_wsgiでDjangoを使用する方法—Djangoのドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/howto/deployment/wsgi/modwsgi
移動先:案内検索

Apacheおよびmod_wsgiでDjangoを使用する方法

Apachemod_wsgi を使用してDjangoをデプロイすることは、Djangoを本番環境に移行するための実証済みの方法です。

mod_wsgiは、Djangoを含む任意のPython WSGI アプリケーションをホストできるApacheモジュールです。 Djangoは、mod_wsgiをサポートするすべてのバージョンのApacheで動作します。

公式のmod_wsgiドキュメントは、mod_wsgiの使用方法に関するすべての詳細のソースです。 インストールおよび構成のドキュメントから始めることをお勧めします。

基本構成

mod_wsgiをインストールしてアクティブ化したら、Apacheサーバーの httpd.conf ファイルを編集して、以下を追加します。

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIScriptAlias行の最初のビットはアプリケーションに提供するベースURLパスであり(/はルートURLを示します)、2番目は「WSGIファイル」の場所です–以下を参照してください–システム上、通常はプロジェクトパッケージ内(この例ではmysite)。 これにより、Apacheは、そのファイルで定義されているWSGIアプリケーションを使用して、指定されたURLの下にあるすべてのリクエストを処理するように指示されます。

プロジェクトのPython依存関係をvirtual environment内にインストールする場合は、WSGIPythonHomeを使用してパスを追加します。 詳細については、 mod_wsgi仮想環境ガイドを参照してください。

WSGIPythonPath行は、プロジェクトパッケージがPythonパスでインポートできることを保証します。 つまり、そのimport mysiteは機能します。

<Directory>ピースは、Apacheがwsgi.pyファイルにアクセスできることを保証します。

次に、WSGIアプリケーションオブジェクトを含むこのwsgi.pyが存在することを確認する必要があります。 Djangoバージョン1.4以降、:djadmin: `startproject` によって作成されます。 それ以外の場合は、作成する必要があります。 このファイルに入れる必要のあるデフォルトのコンテンツ、および他に何を追加できるかについては、 WSGIの概要ドキュメントを参照してください。

警告

複数のDjangoサイトが単一のmod_wsgiプロセスで実行されている場合、それらはすべて、最初に実行された方の設定を使用します。 これは、以下を変更することで解決できます。

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

wsgi.pyで、次のようになります。

os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"

または、 mod_wsgiデーモンモードを使用して、各サイトが独自のデーモンプロセスで実行されるようにします。


ファイルアップロードのUnicodeEncodeErrorを修正

非ASCII文字を含むファイル名のファイルをアップロードするときにUnicodeEncodeErrorが表示される場合は、Apacheが非ASCIIファイル名を受け入れるように構成されていることを確認してください。

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

この構成を配置する一般的な場所は/etc/apache2/envvarsです。

詳細については、Unicodeリファレンスガイドのファイルセクションを参照してください。


mod_wsgiデーモンモードの使用

「デーモンモード」は、mod_wsgiを実行するための推奨モードです(Windows以外のプラットフォームで)。 必要なデーモンプロセスグループを作成し、その中で実行するDjangoインスタンスを委任するには、適切なWSGIDaemonProcessおよびWSGIProcessGroupディレクティブを追加する必要があります。 デーモンモードを使用する場合に上記の構成に必要なさらなる変更は、WSGIPythonPathを使用できないことです。 代わりに、python-pathオプションをWSGIDaemonProcessに使用する必要があります。次に例を示します。

WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com

サブディレクトリ(この例ではhttps://example.com/mysite)でプロジェクトを提供する場合は、上記の構成にWSGIScriptAliasを追加できます。

WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com

デーモンモードの設定の詳細については、公式のmod_wsgiドキュメントを参照してください。


ファイルの提供

Djangoはファイル自体を提供しません。 そのジョブは、選択したWebサーバーに任せます。

メディアを提供するために、別のWebサーバー(つまり、Djangoも実行していないサーバー)を使用することをお勧めします。 ここにいくつかの良い選択があります:

ただし、Djangoと同じApache VirtualHostでメディアファイルを提供する以外に選択肢がない場合は、Djangoへのmod_wsgiインターフェイスを使用して一部のURLを静的メディアとして提供するようにApacheを設定できます。

この例では、サイトルートにDjangoをセットアップしますが、robots.txtfavicon.ico、および/static//media/のURLスペースにあるすべてのものを静的ファイルとして提供します。 他のすべてのURLは、mod_wsgiを使用して提供されます。

Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

管理ファイルの提供

django.contrib.staticfiles:setting: `INSTALLED_APPS` にある場合、Django開発サーバーは管理アプリ(およびその他のインストール済みアプリ)の静的ファイルを自動的に提供します。 ただし、これは、他のサーバー配置を使用する場合には当てはまりません。 管理ファイルを提供するために、Apacheまたは使用しているWebサーバーを設定する必要があります。

管理ファイルは、Djangoディストリビューションの(django/contrib/admin/static/admin)にあります。

強くは、 django.contrib.staticfiles を使用して管理ファイルを処理することをお勧めします(前のセクションで概説したWebサーバーとともに。これは:djadmin: `を使用することを意味します。 collectstatic` 管理コマンドを使用して:setting: `STATIC_ROOT` に静的ファイルを収集し、:setting:` STATIC_ROOT`で提供するようにWebサーバーを構成します。 :setting: `STATIC_URL` )ですが、他に3つのアプローチがあります。

  1. ドキュメントルート内から管理静的ファイルへのシンボリックリンクを作成します(これには、Apache構成で+FollowSymLinksが必要になる場合があります)。
  2. 上に示したように、Aliasディレクティブを使用して、適切なURL(おそらく:setting: `STATIC_URL` + admin/)を管理ファイルの実際の場所にエイリアスします。
  3. admin静的ファイルをコピーして、Apacheドキュメントルート内に存在するようにします。


ApacheからのDjangoのユーザーデータベースに対する認証

Djangoは、ApacheがDjangoの認証バックエンドに対してユーザーを直接認証できるようにするハンドラーを提供します。 mod_wsgi認証ドキュメントを参照してください。