[[ともっくす alloc] init]

ともっくすの雑多な日記と技術的なメモ

Pyramidを本番環境で動かしたい① 〜Apache+mod_wsgi環境を作る

将来的にPyramidプロジェクトを本番環境で動かしたいと思っている.

で,練習がてら,Pyramidを本番環境で動かせるようにしてみる.

Pyramidのデプロイ

Pyramidの公式ページにはデプロイする方法がいくつか載っている.

どれにしようか迷ったが,前にさくらVPSを借りて,既にApacheの設定をしてるし,難しいことは自分にはできないので,定番中の定番のApache + mod_wsgiにすることにした.

どうでもいいけど,wsgiの読み方って,「うぃずぎー」らしいね.

本番環境

さくらのVPS(v3) 1G

OS CentOS 6.3 x86_64
CPU 仮想2コア
メモリ 1G
Apache 2.2.15
Python 2.6.6
mod_wsgi 3.4

自分はpython2.6.6のままだけど,2.7系でも問題ないと思う.

mod_wsgiを使えるようにする

httpd-develのインストール

$ yum list installed | grep httpd

で調べたら,httpd-develはまだインストールしていなかったので,インストールする.

$ yum -y install httpd-devel

mod_wsgiのインストール

ソースコードをダウンロードして,解凍する.
ソースコードここから最新版をとってくればいいかと.

$ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
$ tar zxvf mod_wsgi-3.4.tar.gz
$ cd mod_wsgi-3.4

configureして,Makefileを生成する.

$ ./configure

makeとmake install.(sudoが必要,かもね)

$ make
$ make install

Apacheの設定

DocumentRootが/var/www/htmlの場合,/etc/httpd/conf/httpd.confを開いて,以下のように変更する.

<Directory "/var/www/html">
    Options Indexes FollowSymLinks ExecCGI
    (略)
</Directory>

OptionsにExecCGIを追加するだけ.

また,

Include conf.d/*.conf

が設定されていることを確認する.
設定されていなければ,追記する.

次に,/etc/httpd/conf.d/mod_wsgi.confを作成して,以下を記述する.

LoadModule wsgi_module modules/mod_wsgi.so
<Directory "/var/www/html/">
    AddHandler wsgi-script .wsgi
    AddHandler wsgi-script .py
</Directory>

これで,さっきインストールしたmod_wsgiがロードされ,ドキュメントルート配下の.pyと.wsgiファイルがpythonで実行できるようになる.

そして,Apacheを再起動.
ここで,起動に失敗したら,どこかにミスがある.

/etc/rc.d/init.d/httpd restart

動かしてみる

/var/www/html/app.pyを作成して,以下を記述する.

# -*- coding: utf-8 -*-
import datetime

d = datetime.datetime.today()

time = '%s年%s月%s日 %s時%s分%s秒\n' % (d.year, d.month, d.day, d.hour, d.minute, d.second)

def application(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [time]

で,http://<自分のサーバのドメイン>/app.pyにアクセスして,今日の日付と今の時間が表示されれば成功.


長くなりそうだし,Pyramidをデプロイするのは次で.
> Pyramidを本番環境で動かしたい② 〜Apache+mod_wsgiでPyramidを動かす - [[ともっくす alloc] init]