MacPortsでMAMP環境を構築する



[MacPorts](https://www.macports.org)を使って、MacでローカルにMAMP環境を構築する方法がMacPortsのHowtoに掲載されています。肝心なところを日本語でまとめてみました。Apacheの詳細な設定、MySQLのセキュリティ設定、phpMyAdminのインストールと設定は省略したので英語の方をご覧下さい。

MacPortsのWordPressは古く、メンテされていません。MacPortsには``wp-cli``があるので、それを使うと良いでしょう。

MacPortsについては、[こちら](http://qiita.com/tenomoto/items/66614f982de96641d662)に紹介しましたのでご覧下さい。

# 概要

* Apache2をインストールする。[howto/Apache2](https://trac.macports.org/wiki/howto/Apache2)
* MySQLをインストールする。[howto/MySQL](https://trac.macports.org/wiki/howto/MySQL)
* PHPをインストールする。[howto/PHP](https://trac.macports.org/wiki/howto/PHP)
* MySQLとPHPが使えるようにApacheを設定する。[howto/MAMP](https://trac.macports.org/wiki/howto/MAMP)

# Apache2のインストール

## バージョン

MacPortsには``apache``, ``apache2``, ``apache24-devel``があり、それぞれバージョン1.3.x, 2.2x, 2.4.xに対応する。ここでは``apache2``をインストールする。

## Web共有をオフにする。

* OS X 10.8 Mountain Lion以前システム設定でオフにする。
* OS X 10.9 Mavericksコマンドラインでオフにする。

```
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```
* OS X 10.10 Yosemite以降 Apacheはインストールされているが起動スクリプトは提供されていない。起動させたのであれば、停止する方法も分かっているはず。

## Apacheのインストール

```
$ sudo port install apache2
```

## 設定ファイルの編集

* ``/opt/local/apache2/conf/original/httpd.conf``は設定例なので編集しない。
* 初めてインストールすると上記ファイルが``/opt/local/apache2/conf/httpd.conf``にコピーされる。こちらは自由に編集してよい。アップグレードの際は上書きされないが、念のためバックアップを取っておくとよい。

### ユーザディレクトリの設定

コメント``#``を外す。

```
Include conf/extra/httpd-userdir.conf
```

## 設定ファイルの確認

```
$ /opt/local/apache2/bin/apachectl -t
```

## 起動と停止

```
$ sudo port load apache2
```

マシンを再起動しても自動的にApacheが立ち上がる。

停止するには次のコマンドを用いる。

```
$ sudo port unload apache2
```

ログが保存される既定のディレクトリは``/opt/local/apache2/logs/``で起動メッセージは``error_log``に記録される。

# MySQL

## バージョン

### MySQL
* ``mysql56``: MySQL 5.6.x。最新安定版。
* ``mysql55``: MySQL 5.5.x。
* ``mysql51``: MySQL 5.1.x。2013年にサポートが終了されているので推奨しない。

### MariaDB
Sun MicrosystemsがMySQL ABを取得した後、MySQLの開発者が作ったMySQLのフォーク。
* ``mariadb-10.1``: MariaDB 10.1.x。開発版なので運用には推奨しない。
* ``mariadb-10.0``: MariaDB 10.0.x。最新安定版。
* ``mariadb``: MariaDB 5.5.x。

### Persona
MySQLの別のフォーク。
* ``percona``: Percona Server 5.6.x。

## MySQLのインストール

インストールして、``port select``コマンドで``mysql56``を既定のMySQLにし、バイナリのあるディレクトリにパスを通す。必要なら``~/.bash_profile``などに設定しておく。

```
$ sudo port install mysql56-server
$ sudo port select mysql mysql56
$ export PATH=$PATH:/opt/local/lib/mysql56/bin
```

## データベースの作成
データベースを作成して所有者を変更する。

```
$ sudo -u _mysql mysql_install_db 
$ sudo chown -R _mysql:_mysql /opt/local/var/db/mysql56/ 
$ sudo chown -R _mysql:_mysql /opt/local/var/run/mysql56/ 
$ sudo chown -R _mysql:_mysql /opt/local/var/log/mysql56/
```

## 起動と停止

### 起動

```
$ sudo port load mysql56-server
```

### 停止

```
$ sudo port load mysql56-server
```
## パスワードの設定
```
mysqladmin -u root -p password
```

## サーバへのログインとログアウト

```
$ mysql -u root -p

$ mysql> exit ;
```

# PHPのインストール

## バージョン

* ``php71``: PHP 7.1.x。最新開発版。
* ``php70``: PHP 7.0.x。最新安定版。
* ``php56``: PHP 5.6.x。以前の安定版。
* ``php55``: PHP v5.5.x。以前の安定版。
* ``php54``, ``php53``, ``php52``: それぞれPHP 5.4.x, 5.3.x, 5.2.xで、2015, 2014, 2011にサポートが終了したので推奨しない。

ここでは``php70``をインストールする。

## PHP SAPI

Server API毎にportが異なる。

コマンドラインはphp70、Apacheモジュールは``php70-apache2handler``、FastCGIは``php70-cgi``、FastCGI Process Managerは``php70-cgi``をインストールする。

Apacheモジュールをインストールする場合は次のようにする。

```
sudo port install php70-apache2handler
```

### Apacheモジュールの有効化

``php70-apache2handler``を有効にする。

```
$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php7 mod_php70.so
```

## Apacheの設定の変更・確認
Apacheの設定ファイル``/opt/local/apache2/conf/httpd.conf``を確認。

``index.php``をDirectoryIndexに追加する。

```
DirectoryIndex index.php index.html
```

PHPの設定を読み込むように設定する。``httpd.conf``の最後にでも追記する。

```
Include conf/extra/mod_php70.conf
```

動的共有オブジェクトの読み込みが設定されているか確認。

```
LoadModule php5_module modules/mod_php70.so
```

## データベースに対応するモジュールのインストール

用いるデータベースに合わせたportをインストールする。MySQLを用いる場合、次のようにする。

```
sudo port install php70-mysql
```

## 初期設定
開発用``php.ini-development``と本番用のサンプルが提供されているので、コピーして適宜編集。

```
$ cd /opt/local/etc/php70
$ sudo cp php.ini-development php.ini
```

## MySQLをPHPから使うための設定

MySQL defaultの既定のソケットをMacPortsの設定 configuration (``/opt/local/var/run/mysql56/mysqld.sock``)に合わせる。

```
$ sudo -i
# cd /opt/local/etc/php70
# cp php.ini php.ini.bak
# defSock=$(/opt/local/bin/mysql_config --socket)
# cat php.ini | sed \
  -e "s#pdo_mysql\.default_socket.*#pdo_mysql\.default_socket=${defSock}#" \
  -e "s#mysqli\.default_socket.*#mysqli\.default_socket=${defSock}#" > tmp.ini
# grep default_socket tmp.ini  # Check it!
# mv tmp.ini php.ini
# exit # OR rm php.ini.bak && exit
```

``grep``で確認した際の出力。[howto/MySQL](https://trac.macports.org/wiki/howto/MySQL)にある``mysql.default_socket``はサンプルの設定ファイルにはない。

```
pdo_mysql.default_socket=/opt/local/var/run/mysql56/mysqld.sock
mysqli.default_socket=/opt/local/var/run/mysql56/mysqld.sock
```

Apacheを再起動して有効化。

```
$ sudo port unload apache2
$ sudo port load apache2
```

## phpinfoで確認

```php:phpinfo.php
<?php
phpinfo();
```

## WordPressのインストール

### wp-cliのインストール

```
$ sudo port install wp-cli
```

を実行すると``/opt/local/bin/wp``がインストールされる。