log

OSXのApache2でDjangoをデプロイするには

Snow Leopard付属のApacheでDjangoを動かしてみたのでまとめておこうと思います。
CGIだとやたら遅いのでFastCGIを使うことにします。
ApacheFastCGI を扱うモジュールのうち、今回は mod_fcgid を試してみました。

mod_fcgid をインストール

http://httpd.apache.org/mod_fcgid/svn レポジトリのURLがあるのでそこからダウンロードします。

% svn checkout http://svn.apache.org/repos/asf/httpd/mod_fcgid/trunk mod_fcgid 
% cd mod_fcgid
% ./configure.apxs
% make
% sudo make install

flup をインストール

% wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
% tar zxvf flup-1.0.2.tar.gz
% cd flup-1.0.2
% python setup.py build
% sudo python setup.py install

Apache で mod_fcgid を使えるように設定

/etc/apache2/httpd.conf に
LoadModule fcgid_module libexec/apache2/mod_fcgid.so
を記述

Django のプロジェクトを移動

今回は /Library/WebServer 以下に置きました。
ディレクトリ名は django です。

fcgid.conf を設定

fcgid_module 用の設定を記述。場所は /etc/apache2/other/fcgid.conf です。

<IfModule fcgid_module>
  AddHandler fcgid-script .fcgi
  SocketPath /tmp/fcgidsock
  SharememPath /tmp/fcgidshm
  IPCCommTimeout 40
  IPCConnectTimeout 10
</IfModule>

django.conf を設定

django 用の設定を記述。場所は同じく /etc/apache2/other/django.conf

Alias /django/ "/Library/WebServer/django/"
Alias /django "/Library/WebServer/django/"
<Directory /Library/WebServer/django/>
  Options +ExecCGI +FollowSymLinks
  AllowOverride all
  Order allow,deny
  Allow from all
</Directory>

.htaccess を設定

/Library/WebServer/django 内に .htaccess を用意します。

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteBase /django/
RewriteRule ^(media/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

dispatch.fcgi を用意

自分の場合は MacPorts でインストールした python を使うように設定してますが、
その辺りは適宜読み替えてください。

#!/opt/local/bin/python
import sys
import os
sys.path.insert(0, '/Library/WebServer')
os.environ['DJANGO_SETTINGS_MODULE'] = 'django.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
os.environ['PYTHON_PATH'] = '/opt/local/lib/python2.6/site-packages'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method='threaded', daemonize='false')

以上の設定が終わった後にWebサーバを再起動して、
http://localhost/django/ で動いてるのを確認しました。

ちなみに、fcgid 入れた当初はアクセスするとなぜか apache が落ちるという症状が出てました。
調べてみて http://ktjx.blogspot.com/2008/02/mac-os-x-php5-apache2-modfcgid.html を参考に解決。


で、ここまで設定した後で settings.py で DEBUG = False にするのを忘れていました。
伴って必要な設定をもう一つ済ませておきます。

静的なファイル(テンプレート、CSS、画像など)の設定

Django はこれらのファイルを提供しないらしいです。 http://djangoproject.jp/doc/ja/1.0/howto/static-files.html
ただし、DEBUG = True の場合は例外です。よって、DEBUG = False にする場合はなにかしら設定をする
必要があります。
今回は、django/templates に静的なファイルをまとめてしまうことにしました。
で、/Library/WebServer/other/django.conf に一行書き加えます。

django 用の設定を記述

Alias /django/ "/Library/WebServer/django/"
Alias /django "/Library/WebServer/django/"
Alias /django/media "/Library/WebServer/django/templates" # <- 追加
<Directory /Library/WebServer/django/>
  Options +ExecCGI +FollowSymLinks
  AllowOverride all
  Order allow,deny
  Allow from all
</Directory>

これで DEBUG = True にしても問題なく動作しました。