CentOS5にpython2.6+Django+mod_python+色々の環境を整える
YahooのOpenIDを試そうとしたら、なんかポート番号がほげほげでどうこうらしいことを知ったので、mod_pythonを入れてちゃんと動かせば使えるのかなー、と思ってCentOSを入れてみたメモ。
MacBookのApacheの設定をしてもよかったんだけど、手元のMacBookにはデフォルトで入ってるApacheとportで入れたApacheの二つが入っててよくわからないから、CentOSを入れた。
CentOSはほぼ最小構成*1で入れる
python2.6+mod_python+Djangoでまとめようとしたけど、ついでなのでよく使うライブラリの入れ方もまとめてみる。
初期設定とか
- CentOS5初期設定 - CentOSで自宅サーバー構築
- SSHサーバー構築(OpenSSH) - CentOSで自宅サーバー構築
- ファイアウォール構築(iptables) - CentOSで自宅サーバー構築
- Webサーバー構築(Apache) - CentOSで自宅サーバー構築
- データベースサーバー構築(MySQL) - CentOSで自宅サーバー構築
このあたりの必要っぽいところだけ設定。ポートは22と80と一応8000を開けた。
pythonのインストール
CentOS5にデフォルトで入ってくるpythonは2.4と多少古いため、python2.6をソースから入れる。
手順は以下の通り
$ wget http://python.org/ftp/python/2.6/Python-2.6.tgz $ tar xvzf Python-2.6.tgz $ cd Python-2.6 $ ./configure --enable-shared $ sudo yum install -y zlib-devel #zlibをincludeするために必要 $ vim Modules/Setup #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz ↓ コメントを外す zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz $ make $ sudo make install $ python $ sudo cp libpython2.6.so libpython2.6.so.1.0 /usr/lib/
これでインストール完了。zlibをincludeするのは、後にeasy_installを入れるときに必要になる。またzlibをincludeするためにはzlib-develが必要。これでかなり詰まった
Python2.5であればこの手順は不要(のはず)
各種ライブラリのインストール
普段よく使うものをとりあえず入れる
easy_install
とりあえずeasy_installができないとお話にならないので入れる
$ wget http://peak.telecommunity.com/dist/ez_setup.py $ sudo python ez_setup.py
feedparesr
RSSとかAtomをパースするもの。超簡単
$ sudo easy_install feedparser
MySQLdb
DBはMySQLを使う場合これが必須。SQLiteやPostgreSQLを使う場合は似たようなのが必要。
mysql-develが無いとエラーが出るので先にyumでいれる。
あとeasy_installする場合にちょっと名前が違うから注意が必要
$ sudo yum -y install mysql-devel $ sudo easy_install MySQL-python
SQLAlchemy
たぶん一番注目を集めてるO/Rマッパー。Django使うならDjangoのO/Rマッパーで十分なんだけど、クローラーとか書くときにDjangoのライブラリを使う方法がよくわからないからSQLAlchemyを使うことが多い
$ sudo easy_install SQLAlchemy
lxml
XMLとかHTMLをパースするのに便利。XPathでもDOMでも取れる。Cで書かれてるからBeatutifulSoupより高速。たぶん他にも色々できる。
インストールするには、libxml2-develとlibxslt-develが必要。もしかしたらlibxslt-develだけでも大丈夫かも。
$ sudo yum -y install libxslt-devel $ sudo easy_install lxml
mercurial
バージョン管理システム。python製なのでeasy_installで入れる
Subversinoと違ってお気軽な分散バージョン管理システム。python好きならGitよりこっちですよね!
$ sudo easy_install mercurial
OpenID関連
よくわからないけど、それっぽいの入れてみた
$ sudo easy_install python-openid $ sudo easy_install python-yadis
Django
昔はeasy_installで入れられた気がする*2けど、なぜか入らなかったのでソースを落としてくる
$ wget http://www.djangoproject.com/download/1.0/tarball/ $ tar xvzf Django-1.0.tar.gz $ cd Django-1.0 $ sudo python setup.py install
mod_python
$ sudo yum -y install httpd-devel
mod_pythonのインストールにapxsを使うので、それを入れる
$ wget http://ftp.riken.jp/net/apache/httpd/modpython/mod_python-3.3.1.tgz $ tar xvzf mod_python-3.3.1.tgz $ cd mod_python $ ./configure --with-python=/usr/local/bin/python2.6 --with-apxs=/usr/sbin/apxs $ make $ sudo make install
with-pythonとwith-apxsはそれぞれPathを指定する。CentOSにこれまでの手順でインストールしてきたなら、このディレクトリにあるはず
Django + mod_python
以下は/var/www/html以下にDjangoプロジェクトを作成して、mod_pythonでDjangoを動かすまでの手順です
$ sudo chown tohae. /var/www/html # DocumentRootにユーザーtohaeで書き込める用にする。めんどくさいし $ cd /var/www/html $ django-admin.py startproject tohae $ cd tohae $ django-admin.py startapp test $ cp ~/tohae.py /var/www/html/tohae/ # tohae.pyは過去のエントリを参照 http://d.hatena.ne.jp/tohae/20080530/1212101824 $ python tohae.py $ vim urls.py (r'^test/',include('tohae.test.urls')), ↓ (r'^tohae/test/',include('tohae.test.urls')), # mod_pythoでは厳密なURL構成にしなくてはならない。 # DocumentRoot以下にtohaeディレクトリを作ったのでtohae/で始まるようにする $ sudo vim /etc/httpd/conf.d/python.conf # mod_python用のconfファイルを新しく作成 LoadModule python_module modules/mod_python.so <Location "/tohae/"> SetHandler python-program PythonPath "['/var/www/html/']+sys.path" PythonHandler django.core.handlers.modpython SetEnv PYTHON_EGG_CACHE /var/www/html/tohae/.python-eggs SetEnv DJANGO_SETTINGS_MODULE tohae.settings PythonDebug On </Location> $ sudo /sbin/service httpd restart
これで設定完了。あとはhttp://hostname/tohae/にアクセスして、HelloWorldが表示されれば、mod_pythonでDjangoが動いています
Django+OpenIDで詰まってるところまで書こうと思ったけど、長くなったしめんどくさくなったのでやめ。
次回以降に持ち越します