AWSにnginx+php-fpm+BaserCMS3環境を作ってみる

1.AWSにmicroインスタンス作成

・Amazon Linux AMI 2014.03 64bitで構築。
・構築後に最新版に更新

ec2-userでログイン後
# sudo -s
# yum update

2.nginxのインストール

http://d.hatena.ne.jp/january/20130819/1376866225、こちらを参考にインストール。

# yum install nginx

インストール後起動。

# nginx

psで実行結果を確認

# ps -ef
:
root      5569     1  0 18:04 ?        00:00:00 nginx: master process nginx
nginx     5570  5569  0 18:04 ?        00:00:00 nginx: worker process
:

サービス登録

# chkconfig --level 35 nginx on

3.mysqlのインストール

yumでインストール

# yum install mysql-server

起動

# service mysqld start

http://nomnel.net/blog/install-mysql/、こちら参考にrootパスワード等設定。

# mysql_secure_installation

サービス登録

# chkconfig --level 35 mysqld on

4.php+php-fpmのインストール

・PHPは全く入っていない為、諸々インストール。

# yum install php
# yum install php-xml
# yum install php-gd
# yum install php-fpm
# yum install php-mysql
# yum install php-mbstring

php-fpmの設定を変更

# cd /etc/php-fpm.d
オリジナルのバックアップ
# cp www.conf www.conf.org
viで開き、listenを/var/run/php-fpm/php-fpm.sockに。user/groupをapacheからnginxに変更。
# diff www.conf www.conf.org
12c12
< listen = /var/run/php-fpm/php-fpm.sock
---
> listen = 127.0.0.1:9000
39c39
< user = nginx
---
> user = apache
41c41
< group = nginx
---
> group = apache

起動

# service php-fpm start

サービス登録

# chkconfig --level 35 php-fpm on

5.コンテンツ更新用ユーザ設定

ユーザ作成

# useradd -g nginx webmaster

sshのauthorized_keysの設定

rootから
# su - webmaster
# mkdir .ssh
# chmod 700 .ssh
# cd .ssh
# touch authorized_keys
# chmod 600 authorized_keys
authorized_keys には自分のPCに作ってあるid_rsa.pubの中身をコピー。

6.ドキュメントルートの作成

複数サイトを配置することを想定して、ドキュメントルートを集めておく場所を決める($document_roots)。

# cd $document_roots
# mkdir hogehoge
# chown webmaster:nginx hogehoge
# chmod 775 hogehoge
# cd hogehoge
# su webmaster
(ドキュメントルート用)
# mkdir htdocs
(ログ用)
# mkdir logs

7.nginxでバーチャルホストの設定

PHPのセッションを書き込む/var/lib/php/session/のパーミッションが、root.apacheになっているので、変更。

# chown -R root.nginx /var/lib/php/session/

バーチャルホストの設定ファイル、/etc/nginx/conf.d/hogehoge.confを作成。
中身はhttp://blog.uozajidai.net/archives/1053、こちらを参考にさせていただきました。
※ client_max_body_size 20M; は、数MBあるテーマファイルをアップロードする際に必要っぽく、、スケルトンから組上げる方は必要ないかも。

※ $document_rootsは実パスに書き換えてください。
server {
  listen       80;
  server_name  hogehoge;
  charset utf-8;
 
  root $document_roots/hogehoge/htdocs/app/webroot/;
  index index.php index.html index.htm;

  access_log  $document_roots/hogehoge/logs/access.log;
  error_log  $document_roots/hogehoge/logs/error.log; 
 
  location = /favicon.ico { access_log off; log_not_found off; }
 
  location / {
    client_max_body_size 20M;
    if (-f $request_filename) {
      break;
    }
    if (-d $request_filename) {
      break;
    }
    rewrite ^(.+)$ /index.php?q=$1 last;
  }
 
  # redirect server error pages to the static page /50x.html
  #
  location ~ .*\.php$ {
    client_max_body_size 20M;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_roots/hogehoge/htdocs/app/webroot$fastcgi_script_name;
    fastcgi_intercept_errors on;
  }
  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  location ~ /\.ht {
    deny  all;
  }
}

8.BaserCMSのインストール

$document_roots/hogehoge/htdocsにBaserCMSのzipを解凍。

ディレクトリのアクセス権限を変更
cd $document_roots/hogehoge/htdocs/app
chmod 775 tmp

このままアクセスすると….大量のエラーを排出しつつ正常な画面が表示されません。。。
app/tmp/logs/error.logを見るとindex.phpが2重で書かれるという不思議な現象がおこっています。

:
Request URL: /index.php/index.php/?q=%2Findex.php%2F
:

調べると対策を記述してくださっている方が!大感謝。
“baserCMS+nginxのその後”、こちらを参考にapp/Config/core.phpにある、App.baseUrlの設定を変更。

Configure::write('App.baseUrl', '');

これで正常にBaserCMSのインストール画面が表示。
DataBaseの作成

# mysql -u root -p
(設定したパスワードでログイン)
mysql> create database hogedb default charset utf8;
mysql> grant all on hogedb.* to hogedb_user@localhost IDENTIFIED BY 'hogehoge';

作成したDataBaseを利用して、インストール。

なんとか。。。完了。まだ、何もいじってないので実際の速度等+チューニングは継続してやってみよう。。。
とはいえ、通常のapache/phpよりも体感早いきがするのは、、欲目。。。かなぁ。