Apache 2.4でmod_wsgiを設定してDjangoを使う
mod_wsgiのインストール
最初にapacheにmod_wsgiを組み込みます。
ダウンロード
Windows版のBinaryをダウンロードします。今回は、Python3.4 32ビット版 + apache 32ビット版(XAMPP1.8.3)をインストールしたWindows環境を想定しているので、
mod_wsgi‑3.5.ap24.win32‑py3.4.zip
をダウンロードしました。
apacheでロード
zipファイルを展開して
mod_wsgi.so
を
apache/modules
に配置して、confで
LoadModule wsgi_module modules/mod_wsgi.so
とすれば、mod_wsgiの組み込みは完了です(要再起動)。
正常にインストールが完了していれば、phpinfoを利用して上の画像のとおり表示されます。
バーチャルホストのconf全体像
VirtualHostとしてDjangoアプリを設定します。confの全体像は以下のとおりです。
<VirtualHost *:80> ServerName django.local WSGIScriptAlias / C:/xampp/htdocs/vhost/project/project/wsgi.py <Directory "C:/xampp/htdocs/vhost/project/project"> <Files wsgi.py> Require all granted </Files> </Directory> # admin画面の静的ファイルパス設定 Alias /static C:/xampp/htdocs/vhost/project/project/static <Directory "C:/xampp/htdocs/vhost/project/project/static"> Require all granted </Directory> </VirtualHost>
上のVirtualHost設定の外側で、以下の設定を行います。
WSGIPythonPath C:/xampp/htdocs/vhost/project
XAMPPの場合は、httpd-vhosts.confでバーチャルホストの設定を行い、httpd.confでWSGIPythonPathの設定を行う感じになります。
Djangoプロジェクトを作成しwsgi.pyを準備する
先にconfの全体像を載せましたが、その中でwsgi.pyというファイルをプロジェクトのエントリーファイルとして設定しています。そのため、Djangoプロジェクトを作成します。
Djangoがインストールされていることが前提ですが、プロジェクトを展開したいディレクトリに移動し以下のコマンドを実行します。
django-admin startproject project
django-adminは、
C:\Python34\Lib\site-packages\django\bin
に配置されています。
Djangoプロジェクトを展開した上で、
django.local
にアクセスすると、以下の画面が表示されます。
admin画面にCSSを適用する
django.local/admin
にアクセスすると、Djangoが自動生成するadminページのログイン画面が表示されます。が、CSSが適用されない状態になっています。上で載せたconfでstaticというaliasを設定したので、そのパスにCSSなどの静的ファイルを配置します。
project/settings.py
の最後に以下を追記します。
STATIC_ROOT = "C:/xampp/htdocs/vhost/project/project/static"
追記したら静的ファイルをSTATIC_ROOTにコピーする以下のコマンドを実行します。
python manage.py collectstatic
ログイン画面にスタイルが適用された状態で表示されました。
Apacheで開発する場合の設定
Apache + mod_wsgiの環境をWindowsに構築することが出来ましたが、この構成で開発を開始するとコードの変更が即時反映されないため不便なことに気づきます。
Windows環境におけるApache + mod_wsgiの構成はEmbedded Modeとなり、コードの変更を反映するためにはApacheの再起動が必要になります。そのあたりの詳細は、以下のページに書いてあります。
Windows環境で手軽にApache + mod_wsgiの開発環境を構成するための方法としては、
MaxRequestsPerChild 3
MaxRequestsPerChildに小さい数字を設定し、Apacheプロセスが再起動しやすい環境を意図的に作り、その環境で開発を行うという方法があります。