« django1.3の汎用ビュー - Extending generic views | メイン | 見せてもらおうか。PyPyの性能とやらを! »

Djangoをapache+mod_wsgiで動かす

まずはPythonをインストールしましょう.Djangoは、Pythonのバージョン2.5~2.7に対応しています.この時、sqlite3もビルド出来ているか確認します.zlibもyumで前もってインストールしておきましょう.

出来ていない場合は「./configure LDFLAGS='-L/path/to/lib' CPPFLAGS="-I/path/to/include'」あたりを考えてみましょう.(参考:「Building python 2.6 w/ sqlite3 module if sqlite is installed in non-standard location」「2.7.3: sqlite module does not build on centos 5 and Mac OS X 10.4」.結局「」を修正するはめに)

./configure --prefix='/opt/python2.7.3' LDFLAGS='-L/usr/lib' CPPFLAGS="-I/usr/include" CFLAGS="-I/usr/include"

また、Django起動時にhashlib関連のエラーが頻発しますので、hashlibをインストールしておきます(上記configureで出なくなります).
--enable-sharedも必要です.

次にDjangoをインストールします.ダウンロードしてきてインストールしたPythonでsetup.pyします.hashlibをインストールするときもこのようにインストールしたいPythonのバージョンで「setup.py」してください.

/opt/python2.7.3/bin/python2.7 setup.py build
(suして)/opt/python2.7.3/bin/python2.7 setup.py install

インストールできたらDjangoがimportできるか試してみます.
import django

プロジェクトを作成します.
/opt/python2.7.3/bin/python2.7 /opt/python2.7.3/lib/python2.7/site-packages/django/bin/django-admin.py startproject mysite1_4

パスを通すのがめんどくさいのでdjango-adminを絶対パスで指定します.

この後のアプリケーションの作成とかはこの「mysite1_4」フォルダの中に作成された「manage.py」でできますので、めんどくさいのはここだけです.

ここでエラーが無くプロジェクトが作成されたら、Djangoのインストールは成功しているといってよいと思います.

後でこの「mysite1_4」はrootにオーナーを変更するか、/var/wwwあたりにコピーしてそちらで運用することになりますが、今はここでよいでしょう.

Djangoを起動してみましょう.「cd mysite1_4」して「mysite1_4」ディレクトリに入ります.

/opt/python2.7.3/bin/python2.7 manage.py runserver (このマシンのホスト名):8000

ブラウザで「http://(このマシンのホスト名):8000/」または「http://(IPアドレス):8000/」で以下のような表示になれば成功です.

itworks.png

Djangoの稼動確認が終わったところで、mod_wsgiをインストールします.apacheもインストールしておいてください.apacheのdevelもインストールしましょう.インストールしておかないとなにやらapxsが無いとか怒られますし.

mod_wsgiのソースをダウンロード・解凍します.以下のようにしてmod_wsgiをインストールします.

./configure --with-python=/opt/python2.7.3/bin/python2.7
make
(suして)make install

筆者は先の「mysite1_4」ディレクトリを「/var/www/Django14」配下にコピー、オーナーをrootに変更しました.adminのままだとapache+mod_wsgiで動かしたときに「権限がない」と言われますので.

以下のように「/etc/httpd/conf/httpd.conf」を設定します.

LoadModule wsgi_module modules/mod_wsgi.so

Alias /static/ /var/www/Django14/static/
<Directory /var/www/Django14/static>
Order deny,allow
Allow from all
</Directory>

WSGIDaemonProcess example.com python-path=/var/www/Django14 processes=5 threads=1
WSGIScriptAlias / /var/www/Django14/mysite1_4/wsgi.py
WSGIPythonPath /var/www/Django14

<Directory /var/www/Django14/mysite1_4>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>


また、mysite配下にwsgi.pyを作成します. IntegrationWithDjango - modwsgi
import os, sys
sys.path.append('/usr/local/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()


apacheを再起動して、「http://(このマシンのホスト名)/」または「http://(IPアドレス)/」で、上と同じ表示になれば成功です.

追記:
Djangoのsettings.pyのtimezone設定を「Asia/Tokyo」にしないとapacheのaccess.logの時間も日本時間になりません.

追記2:
staticは以下のような感じでシンボリックリンクを

ln -s /opt/python2.7.3/lib/python2.7/site-packages/django/contrib/admin/static/admin admin

トラックバック

このエントリーのトラックバックURL:
http://blogs.topaz.ne.jp/mt/MT-3.37-ja/mt-tb.cgi/261