Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

HomebrewでApache、PHP、MySQL、phpMyAdmin追加

こんばんは。
ローカルでの開発環境として今までMAMPを使っていましたが、MacにはMAMPを使わずともApachePHPなどがあるので、どうせならそちらを使いたいと思い、MAMPを使わない環境構築をしてみました。
今回は、ApachePHPMySQLphpMyAdminを使えるようにしました。また、全てHomebrewで管理したかったので、デフォルトでPHPなどは入っているんですがそれは使わずにbrewでインストールしました。

PHPに関しては、PHP複数バージョンを入れられるphpenvというものがありますのでそれを使いました。
前にrbenvやpyenvなどを入れましたが(こちら)、その時みたいに結構簡単にできるかなーと思ったら意外と詰まってしまいました。

MySQLのインストール

まずはMySQLのインストールです。rootのパスワードまで決定しちゃいます。
やり方は以下の通り。

$ brew install mysql

$ mysql.server start

$ mysqladmin -u root password 'new-pass'

# (最初のrootパス以外は全てそのままでOK)
$ mysql_secure_installation

$ mysql.server stop

Apacheのインストールと設定

Apacheのインストール

次にApacheのインストールです。
ここではApache2.4をインストールしたいと思います。

$ brew tap homebrew/dupes
$ brew tap homebrew/apache

$ brew search httpd

# おまじないです。これやったほうがいいみたい。
$ sw_vers -productVersion | grep -E '^10\.([89]|10)' >/dev/null && bash -c "[ -d /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain ] && sudo -u $(ls -ld /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain | awk '{print $3}') bash -c 'ln -vs XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX$(sw_vers -productVersion).xctoolchain' || sudo bash -c 'mkdir -vp /Applications/Xcode.app/Contents/Developer/Toolchains/OSX$(sw_vers -productVersion).xctoolchain/usr && for i in bin include lib libexec share; do ln -s /usr/${i} /Applications/Xcode.app/Contents/Developer/Toolchains/OSX$(sw_vers -productVersion).xctoolchain/usr/${i}; done'"

$ brew install httpd24

# 以下のようになってればOKです
$ which apachectl
/usr/local/bin/apachectl

Apacheの設定

インストールが終わったら設定を変更します。
/usr/local/etc/apache2/2.4/httpd.conf

# 使用するポート番号の設定
# デフォルトで8080かもしれないが、今回は80にする
Listen 80

# ServerNameの設定
# 上でポート番号を80にしたので、ここも80にする
ServerName localhost:80

# DocumentRootの変更
DocumentRoot "/Users/ユーザ名/htdocs"

# .htaccessでURLのoverwriteを許可 (<Directory "/Users/furudate/htdocs">内)
AllowOverride All

# index.phpを使えるように修正 (IfModule dir_module内)
DirectoryIndex index.php index.html

# .phpを実行できるようにMIMEタイプを追加 (IfModule mime_module内)
AddType application/x-httpd-php .php

# バーチャルホストを利用できるようにコメントアウトを解除
Include /usr/local/etc/apache2/2.2/extra/httpd-vhosts.conf

バーチャルホストを追加してダミーホストをコメントアウト
/usr/local/etc/apache2/2.4/extra/httpd-vhosts.conf

#
# Use name-based virtual hosting.
#
# NameVirtualHost *:80 (Apache2.4からはこの記述いらないみたい。一応コメントとして残しておきます)

<VirtualHost *:80>
    ServerName sample.local
    DocumentRoot /Users/ユーザ名/htdocs
    DirectoryIndex index.php index.html

    <Directory "/Users/ユーザ名/htdocs">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
#<VirtualHost *:8080>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot "/usr/local/opt/httpd22/docs/dummy-host.example.com"
#    ServerName dummy-host.example.com
#    ServerAlias www.dummy-host.example.com
#    ErrorLog "/usr/local/var/log/apache2/dummy-host.example.com-error_log"
#    CustomLog "/usr/local/var/log/apache2/dummy-host.example.com-access_log" common
#</VirtualHost>

#<VirtualHost *:8080>
#    ServerAdmin webmaster@dummy-host2.example.com
#    DocumentRoot "/usr/local/opt/httpd22/docs/dummy-host2.example.com"
#    ServerName dummy-host2.example.com
#    ErrorLog "/usr/local/var/log/apache2/dummy-host2.example.com-error_log"
#    CustomLog "/usr/local/var/log/apache2/dummy-host2.example.com-access_log" common
#</VirtualHost>

ここまでで、ドキュメントルート(上記の場合は /User/ユーザ名/htdocs)に設定したディレクトリにindex.htmlを置き、localhostにアクセスしてみて中身が見れたらOKです。
もし見れない場合は以下のコマンドでApacheの状態を見てみましょう。恐らくエラー文が出るはずです。

$ apachectl -t

phpenvを用いたPHPのインストール

次にPHPのインストールです。
先程も言ったように、ここではphpenvを使ってPHPを管理します。
まずはphpenvを使えるようにします。

$ brew install phpenv

phpenvをインストールしたら、パスを追加します。
が、rbenvをインストールしている場合は、共存させるようにパスを設定しなければなりません。
ただパスを追加すると、rbenvがphpenvと一緒にインストールされたものに置き換わってしまいます。
以下ではrbenvやpyenvとかも含めたパスの設定です。大事なのは順番です。

.bashrc

eval "$(pyenv init -)"
eval "$(plenv init -)"
export PATH=$PATH:$HOME/.phpenv/bin
eval "$(phpenv init -)"
eval "$(rbenv init -)"

.phpenv/bin を .rbenvのパスより後に設定します。
以下のコマンドで確認しましょう。

# PATHが以下のような順番になってればOK
$ echo $PATH
/Users/username/.rbenv/shims:/Users/username/.phpenv/shims:/Users/username/.plenv/shims:~(省略):/Users/username/.phpenv/bin

# rbenv, phpenvの場所を確認。以下のようになってればOK
$ which rbenv
/usr/local/bin/rbenv

$ which phpenv
/Users/username/.phpenv/bin/phpenv

これでphpenvが使えるようになりました。

次に、php-buildを入れます。
php-buildはbrewにもありますが、ここではgitからcloneしてきてプラグインとして追加します。
こうすることで、rbenvなどと同じようにphpenv installコマンドが使えるようになります。
brewでインストールした場合は php-build コマンドでインストールする必要があります。

$ cd ~/.phpenv
$ git clone git://github.com/CHH/php-build.git $HOME/.phpenv/plugins/php-build

これでphpenvコマンドをrbenvなどと同じように使えるようになりました。

いよいよPHPをインストールしていきます。
しかしその前に、PHPをインストールする際にApacehモジュールも生成するようにデフォルト設定を変更します。

$ vim ~/.phpenv/plugins/php-build/share/php-build/default_configure_options

# 以下の行を追加
--with-apxs2=/usr/local/bin/apxs

一応apxsのパスはwhichコマンドで調べて下さい。
これでPHPをインストールする毎に /usr/local/Cellar/httpd24/2.4.10/libexec/ に libphp5.so が追加されます。
ちなみに、色々ググるhttpd.confをいじっているものもありますが、今回の場合は上記の記述をしていれば勝手に追記されるので不要です。

さて、やっとインストールです。

# インストール可能なバージョン一覧
$ phpenv version -l

# 今回は5.6.4をインストール
$ phpenv install 5.6.4

インストールは結構長いです。
また、以下のようなエラーが出る場合はbrewで足りないパッケージをインストールします。

# configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
$ brew instal re2c

 # configure: error: jpeglib.h not found.
$ brew install libjpeg

 # configure: error: png.h not found.
$ brew install libpng

 # configure: error: mcrypt.h not found. Please reinstall libmcrypt.
$ brew reinstall libmcrypt

エラーを消し、インストールが終わったら確認します。

$ phpenv versions
* system
  5.6.4 (set by /Users/furudate/.phpenv/version)
$ phpenv global 5.6.4
$ phpenv rehash

$ php -v
PHP 5.6.4 (cli) (built: Jan 16 2015 02:05:44) 

これでやっとphpenvからPHPがインストールできました。
ここまでが本当長かった・・・

phpenv-apache-versionのインストール

次にApachePHPモジュールの切り替えをしてくれるスクリプトをインストールします。

$ git clone https://github.com/garamon/phpenv-apache-version ~/.phpenv/plugins/phpenv-apache-version

phpenv-apache-version は ~/.phpenv/versions/{version} 直下にある libphp5.so をコピーしてApacheモジュールとして読み込ませます。
そのため、PHPのインストールの際に生成されたlibphp5.soを上記のパスに移動しておく必要があります。

よって、phpenvで各バージョンをインストールした際には、以下のようにApachePHPモジュールを移動します(5.6.4の場合)。

$ mv /usr/local/Cellar/httpd24/2.4.10/libexec/libphp5.so ~/.phpenv/versions/5.6.4/

その後、以下のコマンドを実行すると、libphp5.soがコピーされ、Apacheが再起動されます。

$ phpenv apache-version {version}

しかし、上記のコマンドを実行しようとすると以下のエラーが出ると思います。

Error: No available formula for httpd 
Sorry your OS is not supported.

これはhttpdっていうformulaがないですよって意味ですが、今はhttpdではなくhttpd22かhttpd24となっているため、このようなエラーが出ます。(対応されてないようです)
そこで、スクリプトを直接いじって対応させちゃいます。

$ cd ~/.phpenv/plugins/phpenv-apache-version/bin/
$ cp -p rbenv-apache-version rbenv-apache-version.old
$ vim rbenv-apache-version

# 23行目らへんを以下のように変更
if command -v brew >/dev/null; then
  if [ -d "$(brew --prefix httpd24)" ]; then
    PHPENV_APACHE_MODULE_PATH="$(brew --prefix httpd24)/libexec"
  elif [ -d "$(brew --prefix httpd22)" ]; then
    PHPENV_APACHE_MODULE_PATH="$(brew --prefix httpd22)/libexec"
fi

if文でhttpd24かhttpd22のどちらかに対応させるようにしています。
これでスクリプトを実行すれば、PHPモジュールが読み込まれるようになると思います!

ここまでで apachectl restart でApacheを再起動しておきましょう。
その後、phpinfoなどを見てみるとphpenvでインストールしたPHPが読み込まれているはずです!!

なお、phpinfoを見てみると、PHPのtimezoneがEuropaとなっていると思うので、以下のようにします。

$ vim .phpenv/versions/5.6.4/etc/php.ini

# timezoneのところを以下のように変更
date.timezone = Asia/Tokyo

# apacheの再起動
$ sudo apachectl restart

Composerのインストール

PHP関連で、ついでにComposerもインストールしちゃいます

$ brew search composer
# このオプション付けないとPHPをbrewでインストールしろって言われます
$ brew install composer --ignore-dependencies

phpMyAdminのインストール

最後にphpMyAdminのインストールです。

$ brew install phpmyadmin


$ vim /usr/local/etc/apache2/2.4/httpd.conf

# httpd.confに以下を追加
Alias /phpmyadmin /usr/local/share/phpmyadmin
Alias /phpMyAdmin /usr/local/share/phpmyadmin
<Directory /usr/local/share/phpmyadmin/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted # この行がないと403エラーになる
</Directory>

続いて以下のファイルをいじる。 /usr/local/Cellar/phpmyadmin/4.3.4/share/phpmyadmin/config.ing.php ない場合は config.sample.inc.php をリネームしてコピー

$cfg['blowfish_secret'] = '任意の文字列'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';

/* Server parameters */
$cfg['Servers'][$i]['host'] = '127.0.0.1';

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
(中略)
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';

以上を終えて、http://localhost/phpmyadmin を開くとphpmyadminのTOPページが表示されるはず!

なお、下にスクロールするとエラー文が表示されていますが、このエラー文に関してはこちらのサイトにある通りのことをすれば消えました。

今回は以上です。
これでやっと環境が整いました。長かったです・・・
それでは!

参考にさせていただいたサイト

OS X YosemiteにHomebrew + DropboxでPHP環境構築 〜Apache, PHP, MySQL, ComposerをインストールしてFuelPHPの設定まで - Qiita

Mac OS X Mountain LionでMAMP環境を構築する - Qiita

phpenv + php-build + composer で開発環境作ってみた | 69log

Homebrew/homebrew-apache · GitHub

CHH/php-build · GitHub

Homebrewでphp-build及びphpenvインストール後に5.5系をインストールするための手順 - Qiita

Install: Install phpMyAdmin on 10.8.x