CakePHP開発環境をMac OS X Yosemite上のVirtualBox+LAPPに作る

## 目的

* Mac OS X Yosemite上のVirtualBoxにLAPP(Linux + Apache + PostgreSQL + PHP)をインストールしてCakePHP開発環境を作る。

## ゴール

* ローカルからブラウザでアクセスしCakePHP 2.3.9の初期画面が表示される状態にする。

## 用意するアプリケーションなど

* [Oracle VM VirtualBox](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp)

* [LAPP Stack Virtual Machines](https://bitnami.com/stack/lapp/virtual-machine)

* 異なるバージョンのCakePHP(後述)

## インストール

### VirtualBox

* 2015/02/21時点で入手可能な VirtualBox-4.3.22-98236-OSX.dmg をダウンロードしインストーラに従ってインストールする。

### LAPP

* 2015/02/21時点で入手可能な bitnami-lappstack-5.4.37-0-ubuntu-14.04.zip をダウンロードし展開する。
* [Virtual Box](https://wiki.bitnami.com/Virtual_Appliances_Quick_Start_Guide#Virtual_Box)を参考に設定する。

![設定後](https://qiita-image-store.s3.amazonaws.com/0/69521/be47031f-048f-c305-836c-4857afc609ee.png "設定後")

* 初めての起動直後にパスワードを変更。
* 起動したら`ifconfig`でIPを確認しsafariなどでアクセスするとCongratulations!が開く。

![Congratulations!](https://qiita-image-store.s3.amazonaws.com/0/69521/6b68c8bd-29bf-985b-42ff-11f639b1d64a.png "Congratulations!")

## 設定

### phpPgAdmin

* [How to enable sshd?](https://wiki.bitnami.com/Virtual_Appliances_Quick_Start_Guide#How_to_enable_sshd.3f)を参考にsshdを起動するように設定。
* [phpMyAdmin and phpPgAdmin](https://wiki.bitnami.com/Components/phpMyAdmin_and_phpPgAdmin?utm_source=bitnami&utm_medium=virtualmachine&utm_campaign=Virtual%2BMachine#How_to_enable_phpMyAdmin_or_phpPgAdmin_to_be_accessed_remotely.3f) > On Linux and Mac OS X: を参考に設定。

![phpPgAdmin](https://qiita-image-store.s3.amazonaws.com/0/69521/284c28b9-b2cb-202d-aa12-dbb9052015d6.png "phpPgAdmin")

### CakePHP

* [Activation and Testing](https://wiki.bitnami.com/Components/PHP_Frameworks/CakePHP#Activation_and_Testing)を参考に設定。

![CakePHP 2.6.1](https://qiita-image-store.s3.amazonaws.com/0/69521/fed32feb-80dd-d785-0b36-1624261f52b5.png "CakePHP 2.6.1")

## 異なるバージョンのCakePHPにする

### CakePHP 2.3.9インストール

* [CakePHP 2.3.9](https://github.com/cakephp/cakephp/releases/tag/2.3.9)にする上でソースコードを入手。
* VirtualBox上の`/opt/bitnami/frameworks`に展開。
* 元の`/opt/bitnami/frameworks/cakephp`をsymbolic linkにしてバージョンを変えられやすくしておく。
* Apacheの起動で必要なbitmaniの設定が含まれる`/opt/bitnami/frameworks/cakephp/conf`も忘れずにsymbolic linkにする。

```console
mv /opt/bitnami/frameworks/cakephp /opt/bitnami/frameworks/cakephp-2.6.1
chmod -R 0777 /opt/bitnami/frameworks/cakephp-2.3.9/app/tmp
ln -s /opt/bitnami/frameworks/cakephp-2.3.9 /opt/bitnami/frameworks/cakephp
ln -s /opt/bitnami/frameworks/cakephp-2.6.1/conf /opt/bitnami/frameworks/cakephp/conf
```

![CakePHP 2.3.9](https://qiita-image-store.s3.amazonaws.com/0/69521/01b333a4-a250-66b8-54c3-5740ced9ee39.png "CakePHP 2.3.9")

* Noticeの出ている項目の初期値を変える

```console
vi /opt/bitnami/frameworks/cakephp-2.3.9/app/Config/core.php 
```

* 下記2箇所を分かり難い値にする。

```php
Configure::write('Security.salt', '');
Configure::write('Security.cipherSeed', '');
```

### PostgreSQLに接続可能にする

* CakePHP 2.3.9のDB接続設定を変える。

```console
cp /opt/bitnami/frameworks/cakephp-2.3.9/app/Config/database.php.default /opt/bitnami/frameworks/cakephp-2.3.9/app/Config/database.php 
vi /opt/bitnami/frameworks/cakephp-2.3.9/app/Config/database.php 
```

* 各項目は必要に応じて変える。初期設定状態で接続を試みる。

```php
public $default = array(
    'datasource' => 'Database/Postgres',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '5432',
    'login' => 'postgres',
    'password' => 'bitnami',
    'database' => 'postgres',
    'prefix' => '',
    //'encoding' => 'utf8',
);
```

![CakePHP 2.3.9+PostgreSQL](https://qiita-image-store.s3.amazonaws.com/0/69521/b1171423-3e79-f6d1-088f-cd6f1f3ca408.png "CakePHP 2.3.9+PostgreSQL")

### "/cakephp"ではなく"/"でアクセス可能にする

* [Configuration](https://wiki.bitnami.com/Components/PHP_Frameworks/CakePHP#Configuration)の項目3を参考に設定する。
* 設定後問題なければ"/cakephp"にアクセスするとMissing Controllerに変わる。

![CakePHP 2.3.9 Missing Controller](https://qiita-image-store.s3.amazonaws.com/0/69521/a908765f-c80e-4d3e-fa21-586511a3b05e.png "CakePHP 2.3.9 Missing Controller")

## その他

### TimezoneをJSTに変える

```console
sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 
vi /opt/bitnami/php/etc/php.ini
```

* php.iniにあるdate.timezoneの値も変える。

```php.ini
date.timezone = "Asia/Tokyo"
```