Django を動かすのに mod_python の入った本番サーバなんてないぞとつぶやいたら、@voluntas さんにEC2を勧められました。その顛末。EC2 のアカウントを取るとか、ssh でつなげる方法とかは割愛します。
MySQL、mod_python、静的ファイルは Apache で配信、/ パスがウェブアプリのルート、を想定しています。
AMI の選択
使用した AMI は、Quick Start カテゴリにある、Getting Started on Fedora Core 8 (AMI Id: ami-3c47a355) です。「Minimal Fedora Core 8, 32-bit architecture, Apache 2.0, and Amazon EC2 AMI Tools.」というやつです。特に深い理由はなくて、プレーンな Apache が欲しかっただけです。
パッケージのインストール
データベースには MySQL、Django の実行には mod_python を使います。MySQL は LAMP の M だから。mod_python は、公式ドキュメントでおすすめになっていたから。という程度の理由で選択しました。注意すべきは、python 2.5、Django 1.0 であることです。
# yum install mysql MySQL-python mod_python Django
ディレクトリ構成
- /srv/foo/project ... Django プロジェクトディレクトリ。django-admin.py startproject で作るやつ。
- /srv/foo/static ... スタティックファイルのフォルダ
- /srv/foo/templates ... テンプレートのフォルダ
- /var/www/html/media ... /usr/lib/python2.5/site-packages/django/contrib/media へのシンボリックリンク
- /var/www/html/project ... /srv/foo/project へのシンボリックリンク
- /var/www/html/static ... /srv/foo/static へのシンボリックリンク
Apache の設定
/etc/httpd/conf/httpd.conf の最後に以下を追記。
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE project.settings
PythonOption django.root /project
PythonDebug On
PythonPath "['/srv/foo'] + sys.path"
</Location>
<Location "/static">
SetHandler None
</Location>
<Location "/media">
SetHandler None
</Location>
その後、
# apachectl restart
して、/ にアクセスすると、It works! が出たような気がします。
MySQL の設定
ここらへんからが記憶がかなり曖昧です。
/etc/my.cnf を以下のように編集 (参考 http://d.hatena.ne.jp/MOZZ/20070809 )
[mysqld]
(省略)
default-character-set=utf8
skip-character-set-client-handshake
(省略)
[mysql]
default-character-set=utf8
つづいて、確かこんな感じ。
# mysql -u root -p
Enter password:
mysql> CREATE DATABASE foo_db CHARACTER SET utf8;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL ON foo_db.* TO 'username'@'localhost' IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.03 sec)
mysql> quit
Bye
# /etc/init.d/mysqld restart
以上が、本番サーバの設定。あと settings.py 内部での開発/練習サーバの設定わけと、デプロイをするためのスクリプトを書きました。眠くなったので、またこんど。