あったらしくるえるはてなくしょん

id:kskmeuk あったらしく

お名前.com の VPS の CentOS5.3 に、Python 2.6.4 と Django 1.1.1 と、mod_wsgi を設定した覚え書き

感謝

お名前.com で yum を使えるようになるまでは お名前.comのVPSサーバを使うまで - UNIX的なアレ を参考に。とても素晴らしいエントリでした。あと、updatedb と locate を使う私は yum install mlocate をしました。それから、CentOS 5.3にPHP5.2.9とMySQL5.1.33をインストール: サーバー初心者による自宅サーバー構築備忘録 こちらのyum のレポジトリ設定を使うと yum 経由で MySQLphp を新しいバージョンにも出来ます。

次に、Python 2.6 や Django のインストールです。CentOS5.3にPython2.6でDjango1.1の開発環境を作成する - やさしいデスマーチ こちらを一番参考にさせて頂きました。札幌の方でうれしいです。補完的に海外のこちらの方 http://villaroad.com/2009/08/rolling-python-2-6-2-on-centos-5-3/ のPATH設定を見たり、あとは、MySQLdb や mod_wsgi の設定例はちょっと古いパッケージの情報ですが、基本同じなので http://blog.perplexedlabs.com/2008/11/10/setup-python-25-mod_wsgi-and-django-10-on-centos-5-cpanel/ 、あと、 Django 用の mod_wsgi の設定は Google Code Archive - Long-term storage for Google Code Project Hosting. にてやりました。
私は /opt を使う方でやりましたが、Python2.6 コマンドを積極的に使う方式や、上記とは違うインストールでは CentOS5.2にPython2.6+Django1.1+mod_wsgi3.1をインストール - orangain flavor が参考になります。

私は、/opt 配下を同様につかって 2.6 を自分では使えるようにしながら、システム側メインでは2.4 を使う形にしています。

上記に従えば Django の インストールとがコマンドが動くところまでは行きます。ただ、vps の バーチャルホストやファイヤーウォールのおかげで、runserver しても 見られないんですね。そういうこともあり、wsgi を使う設定をします。

wsgi_handler.wsgi を配置

今は例えば django の project を schedule とかな名前で作ったとします。そうすると schedule ディレクトリにですね、apacheDjango の橋渡しをする wsgi を書いてあげる必要があります。

import sys, os

os.environ['DJANGO_SETTINGS_MODULE'] = 'schedule.settings'

import django.core.handlers.wsgi

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

必要に応じて、sys.path.append('/var/www/vhosts/virtualhostのdomain/httpdocs')などを追記する必要があると思います。このあとで、httpd.conf 設定をします。

ついで httpd.conf の各設定などなど。

上記の方々のエントリを参照すると、Django のインストールまではうまく行きます。ただ、お名前の VPS の場合は豪快に vhost になっているので、いろいろ設定しないと動くところが見られません。結構ひっかかるところが多くて、error_log をみながら追っかけて修正をしました。なかなか大変でした...orz

1. /etc/httpd/conf/httpd.conf に 追記
LoadModule wsgi_module modules/mod_wsgi.so
AddHandler wsgi-script .wsgi

モジュール呼び出しについての追記ですね。

*** 2. バーチャルホストの httpd_vh_base.conf に追記
のディレクティブじゃないところにこれらを書きます。

  WSGISocketPrefix /var/run/wsgi
  WSGIPythonHome /opt/python2.6
  WSGIScriptAlias /schedule /var/www/vhosts/virtualhostのdomain/httpdocs/schedule/wsgi_han
dler.wsgi

一度 .wsgi と .py を間違えたのは内緒だ...!! あと、WSGISocketPrefix がないと動かなかったり、.python-eggs の permission が変だよとか言われたりしたので、このあたりは 特に http://d.hatena.ne.jp/perezvon/20081103 こちらを参考にして、設定を変えました。.python-eggs の権限を変えたりすればよいわけですね。

以下も、お好みで設定を

  WSGIDaemonProcess schedule user=apache group=apache processes=1 threads=10
  WSGIProcessGroup schedule

それから、Django の admin を使う場合があるので、力技ですが取り急ぎ以下を書いたりしてCSSが見えるようにしたりしました。例にあるようにstatic なファイルの置き場所をきちんと作った方がエレガントです。=> Google Code Archive - Long-term storage for Google Code Project Hosting.

   Alias /media/ /opt/python2.6/lib/python2.6/site-packages/Django-1.1.1-py2.6.eg
g/django/contrib/admin/media/ 

これは取り急ぎの動作確認でやってみたので、あんまり真似しないでね。

これで、socket つなげねーよとか、wsgi おかしくねとかは回避できましたし、admin も正しく表示されました。とりあえず安心。

まとめ。

Django は、Python なこともありコードがすっきりしてて見やすいし、公式の Tutroial も充実してるので、学習しやすいですね。めんどくさがりには実は Python が、ちゃんとしてる人には Perl が向いてるところありますね。
あと、Django ですが 設定ですることがたくさんあるけど、これができれば MVC な、 Webフレームワークでぱきぱき書けると思います。Python の 公式ガイドやチュートリアルが、これまた俗にいう Pythonistique でよいですね。

ひさしぶりに、いろいろソースからインストールしたし、CentOS だもので、rpm 系で yum など使いましたが、 deb系で apt な方が楽で好きだ... ははは。

頼まれ物のちょっとしたものが Django で作れそうなメドがたってかなり喜ばしいです。上記、各エントリを記載してくださった皆様と開発者の皆様に感謝。