karakaram-blog

MacにNginx、PHP-FPM、PHP5.6をインストールする

 ツイート 5  シェア 0  Google+1 0  Hatena 12

Nginx PHP-FPM PHP5.6 インストール

Mac に Homebrew で Nginx、PHP-FPM、PHP5.6 をインストールしました。実行したコマンドと php.ini などの設定を残しておきます。OPcache、APCu、Xdebug のインストール方法、SSL 環境の構築方法にも触れます。

Homebrew のインストールには触れませんので、あらかじめセットアップしておいてください。

Mac での PHP 環境構築記事はこちらもオススメです。
MacでのPHP開発はphpbrewが非常に良い

動作確認環境

  • Mac OSX 10.9

目次

  1. tap コマンドでリポジトリを追加
  2. Nginx をインストール・設定
  3. PHP5.6 をインストール
  4. PHP-FPM を設定する
  5. php.ini を設定する
  6. OPcache を設定する
  7. 動作確認
  8. Nginx を起動・停止するコマンド
  9. PHP-FPM を起動・停止するコマンド
  10. APCu をインストール・設定
  11. Xdebug をインストール・設定
  12. 自己署名証明書を作成
  13. SSL 接続できるようにする
  14. 複数バージョンの PHP を共存させる

tap コマンドでリポジトリを追加

brew tap コマンドで PHP 用のリポジトリを追加します。

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

Nginx をインストール・設定

brew install コマンドで Nginx をインストール。

$ brew install nginx

インストールできたら nginx.conf を編集します。開発環境なので設定は最低限。

  • http のポートは 8080
  • ドキュメントルートを ホームディレクトリ直下の www に
  • PHP-FPM への接続は unix ソケット経由
$ vi /usr/local/etc/nginx/nginx.conf

worker_processes  1;

error_log /usr/local/var/log/nginx/error.log crit;

pid /usr/local/var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  text/html;

    sendfile        on;
    tcp_nopush      on;

    keepalive_timeout  65;

    root   /Users/karasawa/www;
    index  index.html index.php;

    access_log off;

    server {
        listen       8080;
        server_name  localhost;

        location ~ \.php(/|$) {
            fastcgi_index  index.php;
            fastcgi_pass   unix:/usr/local/var/run/php-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

nginx のポートを 80 番にするには、nginx を root で実行する必要があります。私は nginx をログインユーザで手軽に実行したいので、ポートを 8080 にしています。

PHP5.6 をインストール

次は PHP5.6 をインストール。オプションで PHP-FPM と MySQL を有効に、PEAR は使わないので無効にします。利用可能なオプションは brew options php56 コマンドで表示できます。

$ brew install php56 --with-fpm --with-mysql --without-pear

.bashrc や .zshrc に PATH を追加します。

export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"

PHP-FPM を設定する

PHP-FPM の設定を行います。

  • nginx との接続は unix ソケット経由
  • 子プロセスは 1 個
  • catch_workers_output = yes を設定し、php.ini で指定した error_log にエラーが出力されるように
$ vi /usr/local/etc/php/5.6/php-fpm.conf

listen = /usr/local/var/run/php-fpm.sock
listen.mode = 0664
listen.allowed_clients = 127.0.0.1
pm = static
pm.max_children = 1
catch_workers_output = yes

php.ini を設定する

php.ini はほとんどデフォルトのままです。

$ vi /usr/local/etc/php/5.6/php.ini

error_log = /usr/local/var/log/php_errors.log
...
default_charset = "UTF-8"
...
date.timezone = "Asia/Tokyo"

PHP5.5 までは mbstring の設定を細かく行うのが恒例でしたが、PHP5.6 からは、mbstring の設定がいくつか非推奨になりました。mbstring の設定をデフォルトのままにしておき、代わりに default_charset を設定することが推奨されています。

mbstring 実行時設定 – PHP Manual

OPcache を設定する

OPcache は、php.ini で enable にするだけで有効になります。

$ vi /usr/local/etc/php/5.6/php.ini

[opcache]
zend_extension=opcache.so

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=4
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

動作確認

このへんでいったん動作確認。ドキュメントルートに phpinfo() を表示する php ファイルを作成します。

$ mkdir ~/www
$ echo '<?php phpinfo();' > ~/www/phpinfo.php

Nginx 起動。

$ nginx

PHP-FPM の起動ファイルにシンボリックリンクを張る

$ ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents

PHP-FPM 起動

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

ブラウザでアクセスして動作確認。

http://localhost:8080/phpinfo.php

phpinfo が 表示され、OPcache が有効になっていることを確認してください。Bad Gateway と出てしまう場合は nginx と PHP-FPM の連携がうまくいっていないケースが多いです。Nginx と PHP-FPM の設定を確認してみてください。

念のためターミナルからも動作確認。

$ php -v

PHP 5.6.5 (cli) (built: Feb 14 2015 11:50:37)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

こんな感じに表示されれば OK です。

Nginx を起動・停止するコマンド

以下のコマンドで Nginx の起動・停止できます。

#起動
$ nginx

#停止
$ nginx -s stop

PHP-FPM を起動・停止するコマンド

PHP-FPM の起動・停止には Mac の LaunchAgents を使います。

まず、LaunchAgents に起動設定のシンボリックリンクを作成します。

$ ln -sfv /usr/local/opt/php56/homebrew.mxcl.php56.plist ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

以下のコマンドで起動・停止を行います。

# 起動
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

# 停止
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

APCu をインストール・設定

続いて Extension をインストールしましょう。Extension は必要に応じて brew search php56 コマンドで探してください。

APCu は brew install コマンドでインストールします。

$ brew install php56-apcu

apcu.ini を編集します。

$ vi /usr/local/etc/php/5.6/conf.d/ext-apcu.ini

[apcu]
extension="/usr/local/Cellar/php56-apcu/4.0.7/apcu.so"
apc.enabled=1
apc.shm_size=64M
apc.ttl=7200
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

Xdebug をインストール・設定

Xdebug も brew コマンドで。

$ brew install php56-xdebug

xdebug.ini を編集します。Xdebug は重いのでデフォルトでは無効にしてます。

$ vi /usr/local/etc/php/5.6/conf.d/ext-xdebug.ini

[xdebug]
zend_extension="/usr/local/Cellar/php56-xdebug/2.2.7/xdebug.so"

xdebug.remote_enable=0
xdebug.remote_port="9000"
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/tmp"
xdebug.max_nesting_level=1000
xdebug.idekey = "PHPSTORM"

自己署名証明書を作成

localhost に https で接続するため、OpenSSL で証明書を作ります。

先に Homebrew で OpenSSL を入れておきます。たしか Mac にも少し古いバージョンがデフォルトで入ってた気がしますが、いれておきます。

$ brew install openssl

秘密鍵を作成します。

$ openssl genrsa 2048 > server.key

証明書署名要求(CSR)を作成します。

$ openssl req -new -key server.key > server.csr

入力を求められるので、Country Name と Common Name のところだけ入力します。他はデフォルトで大丈夫です。正直、ローカル用のオレオレ証明書なので全部デフォルトでもいいんですけどね。

Country Name (2 letter code) [AU]:JP
Common Name (e.g. server FQDN or YOUR name) []:localhost

自己署名証明書(CRT)を作成します。有効期限は 365 日。

$ openssl x509 -days 365 -req -signkey server.key < server.csr > server.crt

作成した秘密鍵と証明書を Homebrew で入れた openssl の etc 以下にコピーします。

$ cp server.crt /usr/local/etc/openssl/certs/cert.pem
$ cp server.key /usr/local/etc/openssl/private/cert.key

SSL 接続できるようにする

localhost に https で接続できるようにします。

nginx.conf に以下の設定を追記します。先ほど作成した秘密鍵と証明書のパスを指定します。

$ vi /usr/local/etc/nginx/nginx.conf

http {
    #...
    server {
        #...
        listen       8080;
        #...
    }
    #...
    server {
        listen       8081 ssl;
        server_name  localhost;

        ssl_certificate      /usr/local/etc/openssl/certs/cert.pem;
        ssl_certificate_key  /usr/local/etc/openssl/private/cert.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location ~ \.php(/|$) {
            fastcgi_index  index.php;
            fastcgi_pass   unix:/usr/local/var/run/php-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

Nginx を再起動してブラウザからアクセスしてみましょう。

https://localhost:8081/phpinfo.php

複数バージョンの PHP を共存させる

phpenv + php-build ほど柔軟にはいきませんが、一応、複数バージョンの PHP を共存できます。今回は PHP5.5 と PHP5.6 を共存させる例を紹介します。

まず、php5.6 を unlink。

$ brew unlink php56

PHP5.5 をインストール。

$ brew install php55 --with-fpm --with-mysql --without-pear

CLI 用の PHP のバージョンを 5.5 に切り替えます。.bashrc や .zshrc の PATH を編集することで切り替えます。PHP5.6 のものはコメントアウトして残しておくと良いです。

$ vi ~/.bashrc

#export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"
export PATH="$(brew --prefix homebrew/php/php55)/bin:$PATH"

設定が終わったら .bashrc, .zshrc を再読み込みします。

$ source ~/.bashrc
$ source ~/.zshrc

PHP-FPM の起動ファイルにシンボリックリンクを張ります

$ ln -sfv /usr/local/opt/php55/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

PHP5.6 を停止して PHP5.5 を起動

# PHP5.6 停止
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

# PHP5.5 起動
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

ブラウザから phpinfo にアクセスして動作確認してみてください。

複数バージョンの共存はできるが・・・
一応この方法で複数バージョンの共存はできますが、特定の PHP バージョンにさかのぼってインストールできなかったり、brew doctor するとエラーが出たり、イマイチです。本格的に複数バージョンの共存をしたい場合は、phpenv は phpbrew を使ったほうが良いと思います。

ちなみに私のオススメは phpbrew です。
MacでのPHP開発はphpbrewが非常に良い

まとめ

Homebrew で PHP5.6 をインストールする方法を紹介しました。複数バージョンの PHP を共存させる必要がなく、新しめの PHP を入れたいだけの場合は homebrew-php がおすすめです。

参考サイト
Homebrew/homebrew-php | GitHub

 ツイート 5  シェア 0  Google+1 0  Hatena 12