revision-up-to: | 17812 (1.4) |
---|
Apache と mod_wsgi の組み合わせは、推奨の Django の実運用環境です。
mod_wsgi は、 Django を含む WSGI インタフェース をサポートする Python アプリ ケーションを運用するときに使う Apache のモジュールです。 Django は mod_wsgi をサポートするすべてのバージョンの Apache 上で動作します。
mod_wsgi の公式ドキュメント はすばらしい出来で、 mod_wsgi を使う上で必要 なことがすべて書かれています。まずは インストールと設定のガイド から読み 始めるとよいでしょう。
mod_wsgi をインストールして有効にしたら、 httpd.conf
ファイルを編集して、
以下の宣言を追加してください:
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
WSGIScriptAlias
の行の最初の引数は、アプリケーションを公開する場所 (/
はルート URL を表しています)、二つ目の引数はシステム上の「WSGI ファイル(後
述)」の場所です。 WSGI は通常、プロジェクトパッケージ (この例では mysite
)
の中に置きます。これで、 Apache はルート URL 以下のすべてのリクエストを、指定
の WSGI ファイルを使って処理します。
WSGIPythonPath
の行は、プロジェクトのパッケージが Python パスでのインポー
トで使えることを保証します。
<Directory>
の部分は Apache が wsgi.py
ファイルにアクセスできるこ
とを保証します。
次に wsgi.py
に WSGI application オブジェクトが含まれていることを保証
する必要があります。
Django 1.4 では、 startproject
がそのファイルを作ってくれるでしょ
う。それ以前のバージョンでは、自分で作成する必要があります。
このファイルに書くべき内容と、追加できる内容については WSGI 概要ドキュメ
ント を参照してください。
virtualenv の中にプロジェクトが依存する Python モジュールをインストールして
いるなら、 virtualenv の site-packages
ディレクトリも Python パスに追加す
る必要があります。そのためには、 Apache の設定にもう一行追加してください:
WSGIPythonPath /path/to/your/venv/lib/python2.X/site-packages
virtualenv への正しいパスを設定しているか、 python2.X
を正しい Python バー
ジョン (python2.7
のような) で置き換えているかを確認してください。
「デーモンモード」は mod_wsgi を (Windows 以外のプラットフォームで) 動かすとき
にお勧めのモードです。デーモンモードでの設定方法の詳細は
mod_wsgi の公式ドキュメント を参照してください。デーモンモードを使う時に唯
一必要になる変更は、上の設定の WSGIPythonPath
は使えず、代わりに
python-path
オプションを WSGIDaemonProcess
に渡す必要があることです。
例:
WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
Django 自身には、メディアファイルを自動的に公開する機能はありません。メディ アファイルの公開は Web サーバの仕事です。
メディアファイルの公開には、別個の Web サーバ、つまり Django を動作させてい ない別のサーバを使うよう勧めます。以下のようなサーバが、選択肢としておすす めです:
メディアファイルを Django が稼働しているのと同じ VirtualHost
で公開せざ
るを得ない場合には、 Apache を設定して、ある URL では静的なメディアを公開し、
別の URL では mod_wsgi インタフェースを介して Django に処理させるよう設定で
きます。
以下の例では、 Django にサイトルート以下へのリクエストを処理させながら、
robots.txt
, favicon.ico
, CSS ファイル、および /media/
URL空間以
下のすべてのファイルは静的ファイルとして mod_wsgi に処理させます:
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
AliasMatch ^/([^/]*\.css) /path/to/mysite.com/static/styles/$1
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Order deny,allow
Allow from all
</Directory>
<Directory /path/to/mysite.com/media>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
Django の開発サーバは自動的に admin アプリケーションの静的ファイル (他のインス トールされたアプリケーションも) を公開しますが、他のサーバ編成を使っている時は そうなりません。 Apache や使用しているメディアサーバを設定し、 admin のファイ ルを公開できるようにしなければなりません。
admin ファイルは Django ディストリビューションの
(django/contrib/admin/static/admin
) にあります。
django.contrib.staticfiles
を使って admin ファイルを扱うことを強くお勧
めします。 (前のセクションで概要を説明したように Web サーバを設定します。つま
り collectstatic
管理コマンドを使って静的ファイルを
STATIC_ROOT
に集め、 Web サーバが STATIC_ROOT
を
STATIC_URL
の場所で公開するよう設定します) しかし以下では別の方法を
3 つ挙げましょう:
+FollowSymLinks
が必要になるでしょう)Alias
ディレクティブを使って、適切な URL (おそらく
STATIC_URL
+ admin/) から admin ファイルがある実際の場所へのエ
イリアスを作ります。Oct 26, 2017