macOS High Sierra に Homebrew、phpbrew を使って Nginx + PHP をインストールするメモ

1pt   2018-09-15 03:50
IT技術情報局

自分のパターンに全て合致する記事がなかったのでまとめました。

主にこのへんを参考にしています。

インストール

xcode をインストール

AppStore からインストール。

HomeBrew をインストール

shell $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

これにより /usr/local/bin が作成され、その中に実行ファイル brew が作成される。

依存ライブラリのインストール

PHPBrew で必要になるライブラリをインストール。/usr/local/bin/ に色々インストールされる。
brew link によって /usr/local/Cellar/ からもシンボリックリンクが張られる。

shell $ brew install bzip2 curl intltool icu4c libxml2 mcrypt openssl readline zlib $ brew link bzip2 --force $ brew link curl --force $ brew link icu4c --force $ brew link libxml2 --force $ brew link mcrypt --force $ brew link zlib --force

以前のやり方では openssl も link していましたが、現在はエラーになるので行いません。

PHPBrew をインストール

HomeBrew を使ってインストールする方法は使わず、 curl を使ってインストール。

shell $ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew # 実行属性を付けて、 /usr/local/bin/ に移動 $ chmod +x phpbrew $ mv phpbrew /usr/local/bin/phpbrew # phpbrew を初期化 $ phpbrew init

phpbrew init によって /Users/{ユーザー}/.phpbrew/ が作成される。

PHPBrew を使って PHP をインストール

ここでは 7.2.10 をインストールしている。
+defaults によってよく使うオプションをインストールし、さらに Nginx で使うために mysql、php-fpm などのオプションも指定。

openssl の場所は HomeBrew によってインストールされたものを指定。

shell $ phpbrew install 7.2.10 +default +mysql +fpm +openssl +curl +openssl=/usr/local/Cellar/openssl/1.0.2p

インストールが終わったら bash 用の設定をします。

shell $ echo "[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc" >> ~/.bashrc $ source ~/.phpbrew/bashrc

PHP のバージョンを切り替えます。

shell # インストール前 $ which php /usr/bin/php $ php -v PHP 7.1.16 (cli) (built: Apr 1 2018 14:10:37) ( NTS ) # PHPBrew でインストールしたものに切り替える $ phpbrew use php-7.2.10 $ phpbrew switch php-7.2.10 # 切り替わったかを確認 $ which php /Users/{ユーザー}/.phpbrew/php/php-7.2.10/bin/php $ php -v PHP 7.2.10 (cli) (built: Sep 14 2018 03:40:44) ( NTS )

Nginx をインストール

shell $ brew install nginx

デフォルトでは下記のような設定になっています。

  • ポート: 8080
  • ドキュメントルート: /usr/local/var/www

/usr/local/etc/nginx/nginx.conf を編集します。
fastcgi_pass に phpbrew のものを設定するのがキモです。

/usr/local/etc/nginx/nginx.conf server { listen 8080; server_name localhost; location / { root /usr/local/var/www; index index.html index.htm; } 〜中略〜 location ~ .php$ { root /usr/local/var/www; fastcgi_pass unix:/Users/{ユーザー}/.phpbrew/php/php-7.2.10/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 〜中略〜

Nginx の動作確認

PHP の対応はまだですが、ひとまず Nginx が動くか確認します。

shell $ nginx

http://localhost:8080/ にアクセスし、「Welcome to nginx!」という画面が出れば成功です。

Nginx をサービスとして自動起動させる

shell # 一度止める $ nginx -s stop # サービス登録 $ brew services start nginx

PHP-FPM で PHP を使えるようにする

確認用の適当なファイルを /usr/local/var/www/a.php として作成します。

/usr/local/var/www/a.php <?php phpinfo(); ?>

現在の状態で http://localhost:8080/a.php にアクセスしても「An error occurred.」というエラーが表示されるだけです。エラーログを確認してみましょう。

/usr/local/var/log/nginx/error.log 2018/09/14 04:18:56 [crit] 97484#0: *5 connect() to unix:/Users/dada/.phpbrew/php/php-7.2.10/var/run/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /a.php HTTP/1.1", upstream: "fastcgi://unix:/Users/{ユーザー}/.phpbrew/php/php-7.2.10/var/run/php-fpm.sock:", host: "localhost:8080"

ちなみに下記のようなエラーが出ている場合は nginx.conf の fastcgi_pass が間違えている可能性が大きいです。

/usr/local/var/log/nginx/error.log 2018/09/14 00:54:04 [error] 48285#0: *37 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /a.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:8080" PHP-FPM の起動 shell $ phpbrew fpm start

これにより /Users/{ユーザー}/.phpbrew/php/php-7.2.10/var/run/php-fpm.sock が作成されます。

http://localhost:8080/a.php にアクセスして、PHP の情報が表示されれば成功です。

PHP-FPM の自動起動

PHP が使えるようになりましたが、再起動すると PHP は使えなくなります。自動起動するようにしましょう。

~/Library/LaunchAgents/ に localhost.php.7.2.10.php-fpm.plist を作成します。

参考:launchdで複数バージョンのPHP-FPMを自動起動する

~/Library/LaunchAgents/localhost.php.7.2.10.php-fpm.plist <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>localhost.php.7.2.10.php-fpm</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>ProgramArguments</key> <array> <string>/Users/{ユーザー}/.phpbrew/php/php-7.2.10/sbin/php-fpm</string> <string>--nodaemonize</string> </array> </dict> </plist>

再起動すると http://localhost:8080/a.php が見えるようになります。

Source: php

   ITアンテナトップページへ
情報処理/ITの話題が沢山。