Ubuntu でしか作ったことなかったけど、CentOS 5 系 で Django をデプロイしてみる
- とりあえずパッケージを最新に更新
# yum update
- python 2.6 のインストール
CentOS ってデフォルトでは 2.4 なんですね。2.6.4 をソースから入れる。まず zlib, sqlite を入れる。sqlite いれないと import sqlite3 できない
# yum install zlib zlib-devel sqlite-devel
python ソースのダウンロードとビルド、インストール
# wget http://python.org/ftp/python/2.6.4/Python-2.6.4.tgz
# tar xvfz Python-2.6.4.tgz
# cd Python-2.6.4
/opt/python2.6 にインストール。path は個人的な趣味。 --enable-shared オプションを追加する
# ./configure --prefix=/opt/python2.6 --with-threads --enable-shared
Setup ファイルで zlib のところのコメントを外す。
# vi 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
# make install
- python 2.6 環境設定 (2.4 と共存させる)
パス周りを設定
# vi /etc/ld.so.conf.d/opt-python2.6.conf
# /sbin/ldconfig
# sudo ln -s /opt/python2.6/bin/python /usr/bin/python2.6
# cd
個人的な趣味で、PATH は.bash_profile, alias は .bashrc にセット
# vi .bash_profile
--- PATH=$PATH:$HOME/bin
+++ PATH=$PATH:$HOME/bin:/opt/python2.6/bin/
# vi .bashrc
+++ alias python='python2.6'
# source ~/.bash_profile
# source ~/.bashrc
確認
# python2.6 -V
Python 2.6.4
# python -V
Python 2.6.4
- setuptools のインストール
オプションで python の path を渡す
# wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
# sudo sh setuptools-0.6c11-py2.6.egg --prefix=/opt/python2.6
- PIL のインストール
# yum install libjpeg-devel freetype*
# wget http://effbot.org/media/downloads/Imaging-1.1.7b1.tar.gz
# cd Imaging-1.1.7b1
# python setup.py build
# python setup.py install
インストールをテスト
# python selftest.py
--------------------------------------------------------------------
PIL 1.1.7b1 TEST SUMMARY
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from /opt/python2.6/lib/python2.6/site-packages/PIL
--------------------------------------------------------------------
*** PIL CORE support not installed
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
*** FREETYPE2 support not installed
*** LITTLECMS support not installed
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.
- Django のインストール
easy_install さまさま
# sudo easy_install Django
Installed /opt/python2.6/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg
- MySQL, MySQL-python のインストール
エンコードは utf8 に。
# yum install mysql-devel
# vi /etc/my.cnf
+++
[mysql]
default-character-set = utf8
+++
# /etc/init.d/mysqld start
起動時にサービスが開始されるように設定
# /sbin/chkconfig --levels 235 mysqld on
python ドライバを入れておく
# easy_install MySQL-python
- MySQL の設定
# mysqladmin -u root password 'パスワード';
# mysqladmin -u root -h localhost password 'パスワード';
# mysql -u root -p
Enter password:
mysql> CREATE DATABASE mysite;
Query OK, 1 row affected (0.36 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysite |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> CREATE USER mysiteuser IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON mysite.* TO mysiteuser IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON mysite.* TO mysiteuser@localhost IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
# mysql -u mysiteuser -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysite |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> use mysite;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> quit
Bye
- Apache, mod_python のインストール
# yum install httpd-devel
# wget http://ftp.kddilabs.jp/infosystems/apache/httpd/modpython/mod_python-3.3.1.tgz
# tar xvzf mod_python-3.3.1.tgz
# cd mod_python-3.3.1
# ./configure --with-python=/opt/python2.6/bin/python --with-apxs=/usr/sbin/apxs
# make
- Apache, mod_python の設定
- URL: http://domain.com/mysite/
- admin URL: http://domain.com/mysite/admin/
- media URL: http://domain.com/media/
- django プロジェクト (settings.py) のデプロイ先: /var/www/django/mysite
- media の展開先: /var/www/html/media
- log の保存先: /var/log/django/
Note: /var/www/html はデフォルトで公開されていると想定
admin media は /path/to/django/contrib/admin/media/ を /var/www/html/ 内に ln-s でシンボリックリンクを作成し、 chown しておく
# mkdir /var/www/django/mysite
# mkdir /var/www/django/mysite/.python-eggs
# chown apache:apache -R /var/www/django/
# chmod a+x /var/www/django/
# mkdir /var/www/html/media
# chown apache:apache -R /var/www/html/
# mkdir /var/log/django/mysite
# chown apache:apache -R /var/log/django/
# chmod a+x /var/log/django/
# vi /etc/httpd/conf.d/python.conf
+++
<Location /mysite>
SetHandler python-program
PythonPath "sys.path + ['/var/www/django']"
PythonHandler django.core.handlers.modpython
PythonOption django.root /mysite
SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
+++
/etc/init.d/httpd reload
- アプリケーションのデプロイと起動 SCP なり FTP なり git なり easy_install なりなんでもいいので、アプリケーションを /var/www/django/mysite/ に置く。syncdb したら動きます。
# cd /var/www/django/mysite/
# settings.py syncdb
admin User を shell で作る
shell でやる
# python manage.py shell
>>> from django.contrib.auth.models import User
>>> user = User(username='admin', email='foo@bar.com', password='パスワード')
>>> user.is_active=True
>>> user.is_staff=True
>>> user.is_superuser=True
>>> user.save()
/mysite/admin を IP アドレスでアクセス制御する
/etc/httpd/conf.d/python.conf を以下のようにする。
<Location "/mysite/">
SetHandler python-program
PythonPath "sys.path + ['/var/www/django']"
PythonHandler django.core.handlers.modpython
PythonOption django.root /mysite
SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
<LocationMatch "/mysite/admin/">
Order deny,allow
Deny from all
Allow from "ipaddress"
</LocationMatch>