新規案件で割と高負荷なのに、メモリー割り当てが塩っぱいスペックの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}
ざっとこんな所。
一部チューニングをしているけれど、この辺は状況を見て調整する。