mod_pythonがclosedになるのでmod_wsgiを使ってみた。

Djangomod_pythonで運用してるのだけど、mod_python終了のお知らせを耳にしたので、mod_wsgiを使ってみた。

環境

  • Fedora12
  • Python2.6.2

前提

Djangoプロジェクトのディレクトリ構成は下記の通り。

/var/www/django
`-- mysite Djanoのプロジェクト

mod_pythonの設定

まずは、mod_pythonの現状設定。

/etc/httpd/conf.d/mod_python.conf(yummod_pythonを導入したら、このファイルになってた。)

LoadModule python_module modules/mod_python.so

<Directory "/var/www/manual/mod/mod_python">
        <Files *.html>
                SetHandler default-handler
        </Files>
</Directory>

/etc/httpd/conf.d/django.conf

<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

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>

これで現状動いてる。後日検証してみる。