こんにちは、及川です。

ブルーカラーを遮って眼精疲労を軽減してくれるJ!NSのモイスチャーメガネを愛用しています。
実はレンズの横に水を入れるポケットがあってドライアイを防いでくれるというすぐれもの!
すっかりコンタクトからメガネに逆戻りしちゃいました。

前回「お金がない!?さくらVPSなら月額980円でYahoo砲にも耐えちゃうよ!(サーバ構築 1/3)」につづいて、さくらVPSの環境構築を行います。
ファイアーウォールやユーザーの追加などを行ったので、次はWebページを公開できるようにWebサーバと、Movable Typeが推奨するデータベースとしてMySQL、PHPを動かせるようにfast-phpというPHPサーバをインストールする手順をまとめました。

弊社のWeb制作でもよくつかうMovable Type 5.2を、PSGI/Plack環境で動かすことを目的としています。
OSはさくらVPSのデフォルトであるCentOS 6系です。

nginxをインストール

nginxをyumでインストールします。

[code:bash] # nginxの実行ユーザーを追加 $ useradd -s /sbin/nologin nginx # 関連するライブラリを同時にインストール yum install nginx gd openssl openssl-devel curl curl-devel [/code]

nginxをインストールができたら、php-fastcgiの設定も追加しなければならないので設定ファイルを変更する前に先にMySQLとphpをインストールします。

MySQLのインストール

今回はお手軽インストールを目指しているのでyumでインストールします。
CentOS 6ではyumでMySQLをインストールすると、バージョンが5.1になってしまうので、最新バージョンを利用したいときは、OSのディストリビューションにあうrpmをOracleのサイトから探してきてインストールします。

最近話題のMariaDBなども取り上げたいところですが、まずは基本的なところからおさえていきます。

[code:bash] $ yum -y install mysql mysql-server mysql-client mysql-devel [/code]

設定ファイル、my.cnfを編集します。文字コードはUTF-8、データベースエンジンは主にInnoDBを利用することが多いという前提です。
もし、MySQL 5.5以上をご利用の場合は、default-character-setの代わりにcharacter-set-serverに変更しないとエラーになるので注意が必要です。

今回は5.1の場合の例です。

[code:bash] $ vi /etc/my.cnf [mysqld] max_connections = 200 key_buffer = 128M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 512K read_buffer_size = 512K read_rnd_buffer_size = 2M datadir=/var/lib/mysql user=mysql default-character-set = utf8 # 5.5以上の場合は以下をアンコメント #character-set-server = utf8 innodb_data_home_dir = /var/lib/mysql/ibdata innodb_data_file_path = ibdata1:10M:autoextend innodb_file_per_table innodb_log_group_home_dir = /var/lib/mysql/iblogs innodb_buffer_pool_size = 64M innodb_additional_mem_pool_size = 20M innodb_log_file_size = 64M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-bin [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 [/code]

次はPHPをインストールします。

PHPとphp-fastcgiをインストール

ここでもかんたんにyumでインストールします。phpのアプリケーションを想定しているわけではないので、あまり多くはインストールしません。
必要に応じて、利用するphp関連のライブラリを追加してください。

[code:bash] $ yum install php php-mysql php-mbstring php-pear php-gd php-cgi spawn-fcgi [/code]

ここで、必要があればphp.iniを修正します。

デーモンの実行ファイルを作成して、実行権限を付与します。 デフォルトのポート番号は9000番ですが、環境に合わせて変更することもできます。

[code:bash] $ vi /usr/bin/php-fastcgi #!/bin/sh /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u nginx -f /usr/bin/php-cgi [/code]

[code:bash] $ chmod 755 /usr/bin/php-fastcgi [/code]

サービス実行のため、スクリプトを作成します。

[code:bash] $ vi /etc/init.d/php-fastcgi #!/bin/sh # # chkconfig: 2345 85 15 # description: php-cgi - php-fastcgi swaping via spawn-fcgi # . /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING" = "no" ] && exit 0 spawnfcgi="/usr/bin/spawn-fcgi" php_cgi="/usr/bin/php-cgi" prog=$(basename $php_cgi) server_ip=127.0.0.1 server_port=9000 server_user=nginx server_group=nginx server_childs=5 pidfile="/var/run/php_cgi.pid" [ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi start() { [ -x $php_cgi ] || exit 1 [ -x $spawnfcgi ] || exit 2 echo -n $"Starting $prog: " daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi} retval=$? echo return $retval } stop() { echo -n $"Stopping $prog: " #killproc -p ${pidfile} $prog -QUIT killproc $prog retval=$? echo [ -f ${pidfile} ] && /bin/rm -f ${pidfile} return $retval } restart(){ stop sleep 2 start } rh_status(){ status -p ${pidfile} $prog} case "$1" in start) start;; stop) stop;; restart) restart;; status) rh_status;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 3 esac [/code]

実行権限を付与して起動してみます。

[code:bash] $ chmod 755 /etc/init.d/php-fastcgi $ /etc/init.d/php-fastcgi start [/code]

以下のコマンドで、/usr/bin/php-cgiのプロセスが複数起動していれば成功です。

[code:bash] $ ps aux | grep "/usr/bin/php-cgi" [/code]

公開するドメインをVirtualHostで設定する

Webサイトを公開するドメインやDocumentRootを決めて、設定ファイルを作成します。
以下はWebサイトを公開するときの基本設定です。

ポイントは、次の4つです。

(1) PSGI/PlackサーバのstarmanにMovable Typeへのリクエストを転送
(2) gzipでレスポンスを高速化
(3) 拡張子phpファイルのリク絵うsとをphp-fastcgiへ転送
(4) .で始まるファイルやディレクトリへのアクセスを拒否

[code:bash] $ vim /etc/nginx/conf.d/blog.sr-engine.com.conf # # A virtual host using mix of IP-, name-, and port-based configuration # upstream example_com_starman { server unix:/tmp/example.com_starman.sock; } server { listen 80; server_name example.com; access_log /var/log/nginx/example.com/access.log main; error_log /var/log/nginx/example.com/error.log; root /var/www/example.com/html; client_max_body_size 20M; gzip on; gzip_http_version 1.0; gzip_types text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript application/x-httpd-php; gzip_disable "MSIE [1-6]\."; gzip_disable "Mozilla/4"; gzip_proxied any; gzip_vary on; gzip_buffers 4 8k; gzip_min_length 1100; location / { index ; } location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { expires 7d; break; } location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index ; fastcgi_param SCRIPT_FILENAME /var/www/example.com/html/$fastcgi_script_name; fastcgi_param PHP_VALUE "include_path=.:/usr/local/lib/php:/var/www/example.com/html:/var/www/example.com/html/includes"; } location ~ /mt/ { proxy_pass http://example_com_starman; } location /favicon.ico { log_not_found off; } location ~ ^(\.ht|\.git|\.svn) { deny all; } } [/code]

SSLを設定したい、CGIをPSGI/Plackでなく動かしたい、など要望に応じてnginxの設定は変更してください。機会があればまたまとめたいと思います。

基本的な準備はできたので、次回はMovable Typeを動かすためにPSGI/Plackの代名詞と言っていいmiyagawaさんが開発したStarmanの導入と、Movable Typeの管理画面の表示速度についてかいていきます。