Be an Engineer.

社会人からWEBエンジニアになった人間の備忘録的勉強記録

Homebrewでnginx + php-fpmのphp実行環境構築

初めましてのブログ投稿。
「いいインプットしてるんだから、アウトプットしろ(ブログ書け)!」と言われて、物は試し、勉強した内容をブログに書くことにした。ここから何かに気付けるかもしれないし、本当にインプットとアウトプットのいいサイクルが出来上がるかもしれないのでやってみようの根性。

本題

MacPHPの実行環境を作ることにした。
MacならデフォルトでPHPApacheが入っているので、特別用意する必要は無いが、勉強がてらnginxとphp-fpmで構成されるPHPの実行環境を(めっちゃ調べながら)作ってみた。
(ちなみにこの記事ではHomebrewの導入については話しない。ただHomebrewを下にスクロールしたら書いてあるコマンドを叩くだけでOKだったはず。)

参考記事

基本的に以下の記事を参考にした。
Mac OSX: homebrew を使って nginx と php-fpm をインストールする

nginxのインストール

まずHomebrewでnginxをインストールする。
(Homebrewのnginxはオプションが最小限だのなんだのっていうのでnginx-fullを入れようっていう動きもあるけど、この違いについてはよくわかりません。)

$ brew install nginx

設定ファイルは /usr/local/etc/nginx/nginx.conf にある。

自動起動設定はMac使いならお馴染みのこれ。

$ ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

※デフォルトだとnginxも80番をlistenしていて、かつapacheを起動しているならばapacheが80番をlistenしている可能性があるので注意。その場合apacheを停止するか、nginxを8080等をlistenするように変更する必要がある。

ちなみにnginxの起動、停止、再起動は以下のコマンド

$ sudo nginx     # 起動
$ sudo nginx -s stop     # 停止
$ sudo nginx -s reload     # 再起動

php55のインストール

会社でもnginx + php-fpmという組み合わせでPHPを処理させているので、同じくphp-fpmを導入することにした。
php-fpmはapacheのmod_phpモジュールのようなもので、Nginxには直接php処理モジュールを組み込むことはできないので、Nginxと組み合わせてPHPを動かすにはこれが必要。

PHPをhomebrew-phpからインストールするためにtapコマンドでfomuraを追加

$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php

おまちかねphp-fpmとPHP55をインストール

$ brew install php55 —with-fpm

.bash_profileや.zshenvに以下を書いてパスを通す

PATH=“/usr/local/bin:$PATH”     # for PHP55
PATH=“/usr/local/sbin:$PATH”     # for php-fpm

PHP55の自動起動設定

$ cp /usr/local/Cellar/php55/5.5.11/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

このPHP55の準備ができればコマンドラインからはPHP55でphpスクリプトを実行することができる。

nginxの設定

phpファイルがブラウザ上で動作するようにnginxを設定する。
上記のnginx.confに以下を記述する。

http {
    ...
    
    server {
        listen 80;
   
        root /path/to/your_document_root; # 任意のパス
        server_name localhost;
        charset utf-8;
        index index.php index.html index.htm; # '~localhost/'で終わった時にアクセスするファイル
   
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

これを記述した後nginxを再起動。

$ sudo nginx -s reload

例えば設定したドキュメントルート以下に以下のファイルを置いてブラウザでhttp://localhost/phpinfo.phpにアクセスしてみる。

/path/to/your_document_root/phpinfo.php

<?php
phpinfo();

このような画面が表示されたらOK!

f:id:shirakiya:20140720203920p:plain

次回はPHPのWAFであるFuelPHPを動かしてみようと思う。