Mac に Homebrew で Nginx、PHP-FPM、PHP5.6 をインストールしました。実行したコマンドと php.ini などの設定を残しておきます。OPcache、APCu、Xdebug のインストール方法、SSL 環境の構築方法にも触れます。
Homebrew のインストールには触れませんので、あらかじめセットアップしておいてください。
Mac での PHP 環境構築は phpbrew もオススメです。
-
MacでのPHP開発はphpbrewが非常に良い
Mac で PHP のバージョンを複数管理する必要が出てきたので phpbrew をインストールしました。この手のツール ...
続きを見る
動作確認環境
- Mac OSX 10.9
目次
- tap コマンドでリポジトリを追加
- Nginx をインストール・設定
- PHP5.6 をインストール
- PHP-FPM を設定する
- php.ini を設定する
- OPcache を設定する
- 動作確認
- Nginx を起動・停止するコマンド
- PHP-FPM を起動・停止するコマンド
- APCu をインストール・設定
- Xdebug をインストール・設定
- 自己署名証明書を作成
- SSL 接続できるようにする
- 複数バージョンの 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 ソケット経由
/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 にエラーが出力されるように
/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 はほとんどデフォルトのままです。
/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 を設定することが推奨されています。
OPcache を設定する
OPcache は、php.ini で enable にするだけで有効になります。
/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 を編集します。
/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 は重いのでデフォルトでは無効にしてます。
/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 に以下の設定を追記します。先ほど作成した秘密鍵と証明書のパスを指定します。
/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 のものはコメントアウトして残しておくと良いです。
~/.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 を使ったほうが良いと思います。
-
MacでのPHP開発はphpbrewが非常に良い
Mac で PHP のバージョンを複数管理する必要が出てきたので phpbrew をインストールしました。この手のツール ...
続きを見る
まとめ
Homebrew で PHP5.6 をインストールする方法を紹介しました。複数バージョンの PHP を共存させる必要がなく、新しめの PHP を入れたいだけの場合は homebrew-php がおすすめです。