2011/10/01

Nginx On Debian Squeeze In Production

新規案件で割と高負荷なのに、メモリー割り当てが塩っぱいスペックのWEBサイトを構築すること
になった。
従来であれば、LAMP一択の所をLEMP構築にしてみた話。

構成環境は相変わらずOpenVZ上で、開発機スペックイメージは以下の通り。
KMEM:32MB
MEM: 512MB
SWAP: 512MB
nginxの特性を考慮して、socketやファイル関連リソースは、通常より多めに割り当てした。

それでは、インストール開始。
OS自体の構築は、OWPでDebianイメージを展開して済ました。

■OS設定変更
dpkg-reconfigure locales
dpkg-reconfigure tzdata
■パッケージ導入
echo 'deb http://packages.dotdeb.org stable all' >> /etc/apt/sources.list
echo 'deb-src http://packages.dotdeb.org stable all' >> /etc/apt/sources.list
wget -O - http://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt-get update
apt-get install nginx php5-fpm php5-gd php5-mysql php5-mcrypt php5-apc postfix mysql-server
■php-fpm設定変更
...fpm自体...
/etc/php5/fpm/pool.d/www.conf を以下の様に適宜変更する。
listen = /var/run/php5-fpm
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 20
...PHP自体( /etc/php5/fpm/php.ini )...
expose_php = off
mail.add_x_header = off
■nginx設定変更
VirtualHost関連の構成は、Plesk同等とする。
ちなみにデフォルトサイトは、メンテ用として一般非公開とする。
IP直打ちやCatchAllドメインでのサイトコンテツ提供は、考慮しない。

...下準備(VirtualHostとしてtest.domain.comを運用する)...
mkdir -p /var/www/vhosts/default/httpdocs
mkdir -p /var/www/vhosts/test.domain.com/{logs,httpdocs,private}
touch /etc/nginx/sites-available/test.domain.com
ln -s /etc/nginx/sites-available/test.domain.com /etc/nginx/sites-enabled/test.domain.com
...環境設定を反映...
/etc/nginx/sites-avaiable/default を以下の様に適宜変更する
※「server_tokens」は、apacheのServerTokenと同意義。
/etc/nginx/nginx.confで定義してもよい。
server {
        listen 80 default;
        root /var/www/default/httpdocs;
        index index.html index.htm index.php;

        #catch all domain
        server_name _;
        server_name_in_redirect off;

        #hide server info
        server_tokens off;

        #disable suhosin for phpMyAdmin
        location /pma {
                fastcgi_param PHP_FLAG 'suhosin.simulation On';
                deny all;
                allow 127.0.0.1;# for system maintainer's IP
        }

        location ~ \.php$ {
                fastcgi_pass unix:/var/run/php5-fpm;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}
/etc/nginx/sites-avaiable/test.domain.com を以下の様に適宜変更する
server {
        root /var/www/vhosts/test.domain.com/httpdocs;
        index index.html index.htm index.php;

        access_log /var/www/vhosts/test.domain.com/logs/access_log;
        error_log /var/www/vhosts/test.domain.com/logs/error_log;

        #catch all domain
        server_name test.domain.com www.test.domain.com; #with alias for www

        #hide server info
        server_tokens off;

        location ~ \.php$ {
                fastcgi_pass unix:/var/run/php5-fpm;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}
■MySQL設定変更
/etc/mysql/my.cf を以下の様に適宜変更する
[mysqld]
#default-character-set=utf8
character-set-server=utf8
skip-character-set-client-handshake
■Postfix設定変更
※WEBサイトは、アプリ連携したメール送受信のみ、メールホスティングはしないケースを想定
メール振り分けはprocmail等でもいいけど、不要なアプリを入れずに済ませたいので自炊する。
設定内容自体は、本家マニュアルを踏襲。

...下準備...
事前にメール処理用ユーザーを登録する。
useradd -u 1005 -s /usr/sbin/nologin vmail

メール処理用スクリプトを設置する。
今回のサンプル( Python )
import os,sys,datetime
now = datetime.datetime.now().strftime('%Y%M%d_%H%I%S')

f = open('/tmp/'+now,'w')
f.write( str(sys.argv) +"\n")
f.write( sys.stdin.read() )
...環境設定を反映...
/etc/postfix/main.cfを以下の様に適宜変更する。
virtual_mailbox_domains = test.domain.com
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/virtual
virtual_uid_maps = static:1005
virtual_gid_maps = static:1005
transport_maps = hash:/etc/postfix/transport
/etc/postfix/virtualを以下の様に適宜変更する。
debug@test.domain.com mailapp
/etc/postfix/transportを以下の様に適宜変更する。
debug@test.domain.com mailapp
/etc/postfix/master.cfを以下の様に適宜変更する。
mailapp unix        -       n       n       -       -       pipe
  flags= user=vmail argv=/var/www/vhosts/test.domain.com/private/procmail.py ${sender}
ざっとこんな所。
一部チューニングをしているけれど、この辺は状況を見て調整する。

0 件のコメント: