サーバー構築 djangoの環境設定

RH5にDjangoを設定する必要があったので、ここではその際に行った様々な手順について記載しておく。

SSH接続制限

WEBサーバー側でのインストール。
アクセスできるサーバーを制限する。
hosts.allowから設定しないと、アクセスできなくなってしまう可能性があるため注意。

# vi /etc/hosts.allow
-----
ALL : 127.0.0.1
ALL : 192.168.0.1
ALL : 192.168.0.
ALL : XXX.XXX.XXX.XXX
-----

# vi /etc/hosts.deny
-----
ALL : ALL
-----

Pythonインストール

参考URL
http://techteam.wordpress.com/category/linux/
Djangoを使用するため、Pythonをインストール。
※ RH5のデフォは、python2.4なため2.5をインストールする。

$ wget http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz
$ tar zxvf Python-2.5.2.tgz 
$ cd Python-2.5.2
zipimport.ZipImportError: can't decompress data; zlib not available
が発生するため、--zlibを指定
$ ./configure --prefix=/usr/local/python252 --zlib=/usr/local/include
$ make
$ sudo make install
$ ln -s /usr/local/python252 /usr/local/python
$ sudo ln -s /usr/local/python252 /usr/local/python
既存のpython2.4を削除しようと思ったが、あまりにも多くのライブラリが
参照しているようだったので、気がすすまないがprofileでPATHを指定して
python2.5を使用するよう変更
$ sudo vi /etc/profile
-----
PATH=/usr/local/python/bin:$PATH
-----
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo /usr/local/python/bin/python ez_setup.py
ここで、上記zlibエラー発生。--zlibオプションで回避。

Django インストール

WEBサーバー側でのインストール。

$ mkdir src
$ cd src
$ svn co http://code.djangoproject.com/svn/django/trunk/
$ mv trunk django
$ cd django
$ sudo python setup.py install
$ cd ~
$ mkdir work
$ cd work
$ django-admin.py startproject mysite
$ cd mysite
↓↓↓↓ 以下のように、自分のIPアドレスを指定しないと、外からアクセスできないので注意。
$ python manage.py runserver 192.168.0.2:9050

上記を行った後に、ブラウザで動作確認。
http://192.168.0.2:9050

memcachedのインストール

WEBサーバー側でのインストール。
Djangoでmemchachedを使う時があるため、インストールしておく。
yumでインストールするとpython2.4用のもの?がはいってしまうようなので、
ソースからインストール

libevent インストール

memcachedをインストールしようとすると以下のようなエラーがでる。
libeventディレクトリ指定してもむりっぽ。。不思議。

checking for libevent directory... configure: error: libevent is required.  You can get it from http://www.monkey.org/~provos/libevent/

      If it's already installed, specify its path using --with-libevent=/dir/

このためlibeventをソースからインストール

$ wget http://www.monkey.org/~provos/libevent-1.4.6-stable.tar.gz
$ tar zxvf libevent-1.4.6-stable.tar.gz 
$ cd libevent-1.4.6-stable
$ ./configure 
$ make 
$ sudo make install
memcached
$ wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
$ tar zxvf memcached-1.2.6.tar.gz 
$ cd memcached-1.2.6
$ ./configure
$ make
$ sudo make install
cmemcache

Djangoとmemcache連携用にインストール

cmemcacheに必要になるlibmemcacheをパッチをあててインストール
$ wget http://people.freebsd.org/~seanc/libmemcache/libmemcache-1.4.0.rc2.tar.bz2
$ tar jxvf libmemcache-1.4.0.rc2.tar.bz2
$ cd libmemcache-1.4.0
$ wget http://gijsbert.org/downloads/cmemcache/libmemcache-1.4.0.rc2.patch
$ patch -p2 -d . -E < libmemcache-1.4.0.rc2.patch
$ make
$ sudo make install

cmemcache インストール
$ wget http://gijsbert.org/downloads/cmemcache/cmemcache-0.95.tar.bz2
$ tar jxvf cmemcache-0.95.tar.bz2 
$ cd cmemcache-0.95
$ sudo python setup.py install
自動起動設定

起動スクリプト手に入れる。ほかにたぶんもっと良い方法があるはず。。。

$ sudo yum install memcached
$ cp /etc/rc.d/init.d/memcached ~
$ sudo yum remove memcached
$ cd
$ vi memcached
-----
■以下をstart() 関数の前あたりに以下追加

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

■ memcached の実行パスを /usr/local/bin/memcached に変更
   daemon --pidfile /var/run/memcached/memcached.pid /usr/local/bin/memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS
              :
              : 
   killproc -p /var/run/memcached/memcached.pid /usr/local/bin/memcached
              :
              :
-----
$ sudo mkdir /var/run/memcached
$ sudo chkconfig --add memcached
$ sudo chkconfig memcached on
$ sudo chkconfig --list memcached  ← 3,4,5でonになっていることを確認。
memcached      	0:off	1:off	2:on	3:on	4:on	5:on	6:off
とりあえず起動しておく
$ /etc/rc.d/init.d/memcached start

Triton インストール

DBサーバー側でのインストール。

既存MYSQLのアンインストール
$ sudo rpm -q mysql
mysql-5.0.45-7.el5 ←存在確認
$ sudo rpm -e --allmatches --nodeps mysql
--allmatces
    PACKAGE_NAME に一致するすべてのバージョンのパッケージを削除する。 
--nodeps
    パッケージをアンインストールする前に依存性のチェックをしない。 
$ sudo rpm -e mysql-server-5.0.45-7.el5
$ 
Tritonnインストール

まずはRPM取得。やっぱRPMは便利でふ。

$ wget http://globalbase.dl.sourceforge.jp/tritonn/31596/MySQL-client-5.0.51a-tritonn.1.0.10.i386.rpm
$ wget http://jaist.dl.sourceforge.jp/tritonn/31596/MySQL-server-5.0.51a-tritonn.1.0.10.i386.rpm
$ wget http://keihanna.dl.sourceforge.jp/tritonn/31596/MySQL-shared-5.0.51a-tritonn.1.0.10.i386.rpm
$ wget http://globalbase.dl.sourceforge.jp/tritonn/31596/mecab-0.97-tritonn.1.0.10.i386.rpm
$ wget http://globalbase.dl.sourceforge.jp/tritonn/31596/mecab-ipadic-2.7.0.20070801-tritonn.1.0.10.i386.rpm
$ wget http://osdn.dl.sourceforge.jp/tritonn/31596/senna-1.1.3-tritonn.1.0.10.i386.rpm

そしてインストール。

sudo rpm -i mecab-0.97-tritonn.1.0.10.i386.rpm 
sudo rpm -i mecab-ipadic-2.7.0.20070801-tritonn.1.0.10.i386.rpm 
sudo rpm -i senna-1.1.3-tritonn.1.0.10.i386.rpm 

↓こいつは、http://rpm.pbone.net/ からさがしだした。入れないとMySQLインストールがうまくいかない。
sudo rpm -i MySQL-devel-community-5.0.51a-0.rhel5.i386.rpm

sudo rpm -i MySQL-shared-5.0.51a-tritonn.1.0.10.i386.rpm 
sudo rpm -i MySQL-client-5.0.51a-tritonn.1.0.10.i386.rpm 
sudo rpm -i MySQL-server-5.0.51a-tritonn.1.0.10.i386.rpm 

自動起動設定の確認

3,4,5がonになってればOK
# chkconfig --list mysql
mysql          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

ROOTのパスワード設定

$ mysql -u root
> SET PASSWORD FOR root@localhost=PASSWORD('hoge'); 

設定ファイル作成

# cp -ap /usr/share/mysql/my-huge.cnf /etc/my.cnf
    * my-huge.cnf メモリ1〜2G環境向け
    * my-large.cnf 512MB前後
    * my-medium.cnf 64MB前後
# vi /etc/my.cnf
-----
[mysqld]
default-character-set=utf8
character_set_server=utf8
skip-character-set-client-handshake
-----

以下ページを参考に、Tritonn動作確認して終了
http://qwik.jp/tritonn/basictutorial.html

MySQL_Pythonのインストール

WEBサーバー側でのインストール
PythonMySQLをつなぐためのソースをインストール。

tritonnをインストールしてもmysql_configが入ってないため、mysql-develをインストール
$ wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-5.0/MySQL-devel-community-5.0.51a-0.rhel5.i386.rpm
$ sudo rpm -i MySQL-devel-community-5.0.51a-0.rhel5.i386.rpm 
eazy_installを使ってMySQL_Pythonをインストール
$ yum -y install python-setuptools
$ sudo easy_install-2.5 -U -Z MySQL-Python

DB作成

$ mysql -u root -p
> create database hogehoge;
ユーザー作成(WEBサーバーからのアクセス用)
> grant all on hogehoge.* to hogehoge@192.168.0.1;
パスワード設定(WEBサーバーからのアクセス用)
> set password for hogehoge@localhost = PASSWORD('foo');
> quit
mysql -u hogehoge -p hogehoge ← アクセスできることを確認

Lighttpd + fastcgi インストール

RH5でyumからinstallすると、lighttpd1.4.18が入ってしまい、バグがあるためssl接続時にサーバーが反応しなくなるというエラーが発生ため、最新のソースをsubversionから取得して入れる

fastcgi
flupをインストールしとく
$ sudo easy_install-2.5 flup
fastcgiインストール
$ wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
$ tar zxvf fcgi-2.4.0.tar.gz
$ cd fcgi-2.4.0
$ ./configure
$ make
$ sudo make install
Lighttpd インストール

参考URL
http://d.hatena.ne.jp/hacking_dubby/20080428/1209399682

1. 依存パッケージのインストール

lighttpd が依存するパッケージをいれとく
$ sudo yum install pcre-devel
$ sudo yum install bzip2-devel
$ sudo yum install openssl-devel

入れないといかのようなエラーがでる。

configure: error: pcre-config not found, install the pcre-devel package and build with --without-pcre
configure: error: bzip2-headers and/or libs where not found, install them or build with --without-bzip2

2. lighttpd インストール

$ wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.bz2
$ tar jxvf lighttpd-1.4.19.tar.bz2
$ svn checkout svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x/
$ cd lighttpd-1.4.x
$ cp -ap * ../lighttpd-1.4.19
$ cd ../lighttpd-1.4.19
$ ./configure --with-openssl --with-openssl-libs=/usr/lib --prefix=/usr/local/lighttpd1419 --with-pcre
$ make 
$ sudo make install
$ sudo ln -s lighttpd1419/ lighttpd
$ sudo mkdir /usr/local/lighttpd/conf/
confファイルコピー
$ sudo doc/lighttpd.conf /usr/local/lighttpd/conf/
起動ファイルコピー
$ sudo cp doc/rc.lighttpd.redhat /etc/rc.d/init.d/lighttpd
$ vi /etc/rc.d/init.d/lighttpd
-----
#if [ -z "$LIGHTTPD_CONF_PATH" ]; then
LIGHTTPD_CONF_PATH="/usr/local/lighttpd/conf/lighttpd.conf"
#fi
lighttpd="/usr/local/lighttpd/sbin/lighttpd"
-----
$ sudo /etc/rc.d/init.d/httpd stop
apacheが再起動してしまわないように、止める
$ sudo /sbin/chkconfig httpd off
$ sudo /sbin/chkconfig lighttpd on
$ sudo /sbin/chkconfig --list | grep lighttpd
$ sudo /etc/rc.d/init.d/lighttpd start
lighttpd設定
$ vi /usr/local/lighttpd/conf/lighttpd.conf 
-----
server.document-root        = "/home/www/hogehoge/"

以下のモジュールを、有効(#をはずす)化する。
server.modules              = (
                               "mod_rewrite",
                                 :
                               "mod_alias", ← alias用
                               "mod_access",
                                 :
                               "mod_auth", ← BASIC認証用
                                 :
                               "mod_fastcgi",
                               "mod_cgi",
                                 :
                                 :
                                 
)
       :
       :
fastcgi.server = (
    "/mysite.fcgi" => (
        "main" => (
             "host" => "192.168.0.2",
             "port" => 3033,
             "check-local" => "disable",
        )
    )
)
alias.url = (
    "/site_media/" => "/home/www/hogehoge/media/",
)

url.rewrite-once = (
    "^(/site_media/.*)$" => "$1",
    "^(/.*)$" => "/mysite.fcgi$1",
)

-----
# /etc/rc.d/init.d/lighttpd start
動作確認

・fastcgiを起動しておく。
 ./manage.py runfcgi method=threaded host=192.168.0.2 port=3033 daemonize=false

URLにアクセス

http://192.168.0.2/

BASIC認証の設定

参考URL
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/847lighttpdbasic.html

# htpasswd -c /etc/lighttpd/lighttpd.user.htpasswd secret
New password: ←ユーザー認証用のパスワードを入力
Re-type new password: ←ユーザー認証用のパスワードを再入力
Adding password for user secret
# vi /etc/lighttpd/lighttpd.conf 
-----
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/lighttpd.user.htpasswd"
auth.require = ( "/" =>
        (
                "method" => "basic",
                "realm" => "Secret Zone",
                "require" => "valid-user"
        )
)
-----

DNS設定

参考URL
http://kajuhome.com/bind.shtml

ネームサーバ(bind)のインストール
# yum install -y bind
キャッシングサーバのインストール
1度問い合わせを行うと一定期間ローカルに記憶しておき(それがキャッシュ)ます。
従って、上位ネームサーバの軽減を行うことができます。
# yum -y install caching-nameserver
# vi /etc/named.conf
-----
options {
        directory "/var/named";
        // query-source address * port 53;
        allow-query{
                any;
        };
};

//
// a caching only nameserver config
//
controls {
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";

include "/etc/rndc.key";

view "external" {
        match-clients { any; };
        recursion no;
        zone "hogehoge.jp" {
                type master;
                file "hogehoge.com.wan";
                allow-update { none; };
        };
        zone "XXX.XXX.XXX.in-addr.arpa" {
                type master;
                file "XXX.XXX.XXX.in-addr.arpa.db";
                allow-update { none; };
        };
};
-----
# vi /var/named/hogehoge.com.wan
-----
$TTL    86400
@       IN      SOA     hogehoge.jp. root.hogehoge.jp.(
                        2007031400      ; serial
                        3600            ; refresh (1 hour)
                        900             ; retry (15 minutes)
                        604800          ; expire (1 week)
                        86400           ; negative (1 day)
)
        IN      NS              hogehoge.jp.
        IN      MX      10      hogehoge.jp.
        IN      A               XXX.XXX.XXX.XXX
hogeweb IN      CNAME       hogehoge.jp.
www     IN      CNAME           hogehoge.jp.
-----
# vi /var/named/XXX.XXX.XXX.in-addr.arpa.db
-----
TODO
-----
ルートDNS情報を取得
# wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root
取得したDNS情報を移動
# mv named.root /var/named/named.ca

# vi /etc/resolv.conf 
-----
search hogehoge.jp
nameserver 192.168.0.1
-----

# service named start
# chkconfig named on
名づけてネットの設定

以下管理画面にアクセス
http://www.nadukete.net/

1. ネームサーバのIPアドレスの確認と変更 を選択
2. ネームサーバのIPアドレスの確認と変更画面で以下を指定後、実行を押す
 ・ネームサーバー名:name (これは任意)
 ・実施する操作:新規登録
3. IPアドレス1に XXX.XXX.XXX.XXXを指定し、実行
4. 汎用JPドメインネームサーバの確認と変更 を選択
5. 汎用JPドメインネームサーバの確認と変更画面上で、以下指定後、更新を押す
 ・ネームサーバ1:name.hogehoge.jp
 ・ネームサーバ2:削除!!!!
6. 画面の指示に従う。
 → 72時間以内にドメインきりかえ完了。

Postfixの設定

Sendmailがデフォで起動していたので、おとす。
Postfixの方が扱いやすいから。自分はpostfixインストール。
# chkconfig sendmail off
# chkconfig sendmail --list
sendmail       	0:off	1:off	2:off	3:off	4:off	5:off	6:off
# service sendmail stop
postfix インストール
# yum -y install postfix
# chkconfig postfix on
# chkconfig postfix --list
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
# service postfix start