Mac Lionにnginx+php-fpmをいれ、Shindigを動かす

事前にいるもの
・Homebrew
wget(Homebrewでbrew install wgetでいける)

nginx、php-fpmインストール

nginx


brew install nginx

php-fpm

php-fpmを有効にしたphpをインストールする必要がある。
brewで入るが、デフォではbrew対象外(/usr/local/Library/Formula/にスクリプトなし)なのでスクリプト作る。


cd /usr/local/Library/Formula/
curl -O https://raw.github.com/ampt/homebrew/php/Library/Formula/php.rb
mv php.rb `brew --prefix`/Library/Formula
インストール。fpm有効にするオプションを忘れずに。

brew install php --with-fpm
このphp-fpm版のphpの前にphpが入ってたらパス通ってるのなら置き換える。

sudo mv /usr/bin/php /usr/bin/php.old
sudo ln -s /usr/local/Cellar/php/5.3.10/bin/php /usr/bin/php
ls -al /usr/bin/php
> lrwxr-xr-x 1 root wheel 36 2 25 22:22 /usr/bin/php -> /usr/local/Cellar/php/5.3.10/bin/php

shindigを動かす

apache.orgからsindigを拾う


sudo mkdir -p /var/project/shindig
cd /var/project/shindig
wget http://www.apache.org/dist/shindig/2.0.0/shindig-2.0.0-php.tar.gz .

shindig.htaccessを使っているが、nginxは.htaccessなんて読まないのでnginx.confで同じ挙動になるようにしてやる

shindingの.htaccess

# A
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L]
# B
php_flag always_populate_raw_post_data On
php_flag magic_quotes_gpc Off

A.リクエストされたものが、ファイルでもディレクトリでもない(該当なし)ならindex.phpに飛ばしているらしい。
B.phpのalways_populate_raw_post_dataをOn、magic_quotes_gpcをOffに。
という二つの設定がある。

これを、nginx.confとphp.iniで設定する。また、ついでにphp-fpmで動くように設定する。

nginx.confの設定


vi /usr/local/etc/nginx/nginx.conf
下記の内容を追記。

server {
server_name localhost;
listen 8080;
root /var/project/shindig;
access_log /var/project/shindig/logs/access.log;
index index.php;
if (!-e $request_filename){
rewrite ^ /index.php;
}
location / {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
}

php.iniの設定

always_populate_raw_post_dataをOnになっているか確認。


php-fpm -i| grep always_populate_raw_post_data
php-fpm -i| grep magic_quotes_gpc
always_populate_raw_post_dataはONに、magic_quotes_gpcはOffになっている必要がある。
そうでないと、shindigを動かしたときに

Your environment does not have always_populate_raw_post_data enabled which will interfere with Shindig. Please set 'always_populate_raw_post_data' to 'On' in php.ini

とか怒られる。


php-fpm -i | grep php.ini
設定変更。ちゃんとphp-fpmを有効にしたphpの設定を変える(元からPHP入ってて、php.ini二つあるとか)

vi /usr/local/Cellar/php/5.3.10/etc/php.ini

php_flag always_populate_raw_post_data On
php_flag magic_quotes_gpc Off

起動、確認

起動

php-fpmとnginxを立ち上げる。


php-fpm
nginx

アクセスしてみる

http://localhost:8080/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml
にアクセスして、ガジェットパーツが読み込まれたらOK(TODOリスト)