WSGIを使用して展開する方法
Djangoの主要なデプロイメントプラットフォームは WSGI であり、これはWebサーバーとアプリケーションのPython標準です。
Djangoの:djadmin: `startproject` 管理コマンドは、最小限のデフォルトのWSGI構成をセットアップします。これは、プロジェクトの必要に応じて微調整し、WSGI準拠のアプリケーションサーバーに使用を指示できます。
Djangoには、次のWSGIサーバーの入門ドキュメントが含まれています。
- GunicornでDjangoを使用する方法
- uWSGIでDjangoを使用する方法
- Apacheおよび
mod_wsgi
でDjangoを使用する方法 - ApacheからのDjangoのユーザーデータベースに対する認証
applicationオブジェクト
WSGIを使用したデプロイの重要な概念は、アプリケーションサーバーがコードとの通信に使用するapplication
呼び出し可能オブジェクトです。 これは通常、サーバーにアクセス可能なPythonモジュールでapplication
という名前のオブジェクトとして提供されます。
:djadmin: `startproject` コマンドは、そのようなapplication
呼び出し可能ファイルを含むファイル<project_name>/wsgi.py
を作成します。
これは、Djangoの開発サーバーと本番WSGIデプロイメントの両方で使用されます。
WSGIサーバーは、構成から呼び出し可能なapplication
へのパスを取得します。 Djangoの組み込みサーバー、つまり:djadmin: `runserver` コマンドは、:setting:` WSGI_APPLICATION` 設定から読み取ります。 デフォルトでは、<project_name>.wsgi.application
に設定されています。これは、<project_name>/wsgi.py
で呼び出し可能なapplication
を指します。
設定モジュールの構成
WSGIサーバーがアプリケーションをロードするとき、Djangoは設定モジュールをインポートする必要があります—ここでアプリケーション全体が定義されます。
Djangoは、 DJANGO_SETTINGS_MODULE 環境変数を使用して、適切な設定モジュールを見つけます。 設定モジュールへの点線のパスが含まれている必要があります。 開発と本番には異なる値を使用できます。 それはすべて、設定をどのように整理するかによって異なります。
この変数が設定されていない場合、デフォルトのwsgi.py
はmysite.settings
に設定します。ここで、mysite
はプロジェクトの名前です。 これが、:djadmin: `runserver` がデフォルトでデフォルト設定ファイルを検出する方法です。
ノート
環境変数はプロセス全体であるため、同じプロセスで複数のDjangoサイトを実行する場合は機能しません。 これはmod_wsgiで発生します。
この問題を回避するには、各サイトで独自のデーモンプロセスでmod_wsgiのデーモンモードを使用するか、wsgi.py
でos.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
を適用して環境からの値をオーバーライドします。
WSGIミドルウェアの適用
WSGIミドルウェアを適用するには、アプリケーションオブジェクトをラップします。 たとえば、wsgi.py
の下部に次の行を追加できます。
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
Djangoアプリケーションを別のフレームワークのWSGIアプリケーションと組み合わせる場合は、DjangoWSGIアプリケーションを後でDjangoWSGIアプリケーションに委任するカスタムWSGIアプリケーションに置き換えることもできます。