Djangoをmod_pythonで運用してるのだけど、mod_python終了のお知らせを耳にしたので、mod_wsgiを使ってみた。
環境
- Fedora12
- Python2.6.2
mod_pythonの設定
まずは、mod_pythonの現状設定。
/etc/httpd/conf.d/mod_python.conf(yumでmod_pythonを導入したら、このファイルになってた。)
LoadModule python_module modules/mod_python.so <Directory "/var/www/manual/mod/mod_python"> <Files *.html> SetHandler default-handler </Files> </Directory>
<Location /mysite/> SetHandler python-program PythonPath "sys.path + ['/var/www/django','/usr/lib/python2.6/site-packages/django',]" PythonHandler django.core.handlers.modpython SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonOption django.root /mysite PythonDebug On </Location>
mod_wsgiの設定
mod_wsgiのインストール
apacheの開発ツールapxs、Pythonのパスは適宜置換えを。
apxsがない場合は、事前にyumでインストール。
yum install httpd-devel
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.2.tar.gz tar zxvf mod_wsgi-3.2.tar.gz cd mod_wsgi-3.2 ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python2.6 make make install
/etc/httpd/conf.d/mod_wsgi.confに下記を追加。
LoadModule wsgi_module modules/mod_wsgi.so
次にDjangoプロジェクトにdjango.wsgiを追加。ファイル名やパスは特に何でも良さそう。
/var/www/django `-- mysite Djanoのプロジェクト `-- apache/ |-- __init__py(お忘れなく!) `-- django.wsgi
import os, sys apache_configuration = os.path.dirname(__file__) project = os.path.dirname(apache_configuration) workspace = os.path.dirname(project) sys.path.append(workspace) os.environ['PYTHON_EGG_CACHE'] = os.path.join(workspace, '.python-eggs') os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Apacheのconfファイルに設定。
WSGIScriptAliasMatch /mysite /var/www/django/mysite/apache/django.wsgi <DirectoryMatch ^/var/www/django/mysite/apache> Order deny,allow Allow from all </DirectoryMatch> # 複数のDjangoプロジェクトに対応する例 #WSGIScriptAliasMatch ^/([^/]+) /var/www/django/$1/apache/django.wsgi #<DirectoryMatch ^/var/www/django/([^/]+)/mysite/apache> # Order deny,allow # Allow from all #</DirectoryMatch>
これで現状動いてる。後日検証してみる。