CakePHPの構築方法 (PHP7, MariaDB, CentOS7 on Vagrant)

## 概要

CakePHP勉強中です。
現在はDockerを用いて構築中ですが、学習初期においてはVagrant内で環境を構築する方が分かりやすかったため、その時の構築方法を整理しました。

### 構成

- CentOS (on Vagrant)
- PHP 7
- MariaDB

## TL;DR

作業ディレクトリに`Vagrantfile`と`setup.sh`を作成します。

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-7.6"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder ".", "/home/vagrant/workdir"
  config.vm.provision "shell", path: "setup.sh"
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = false
  end
end
```

```setup.sh
sudo yum update -y
sudo yum install -y httpd git unzip

# add EPEL repository
sudo yum install -y epel-release
# add Remi repository
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# install PHP and package
sudo yum install -y --enablerepo=remi,remi-php70 php php-mbstring php-intl php-pdo php-mysql php-xml

# install MariaDB
cat <<EOF | sudo tee /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
EOF

sudo yum install -y MariaDB-server MairaDB-client
sudo systemctl enable mysqld

# get composer
curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```
### 仮想マシンの起動

```
$ vagrant up
```

仮想マシンを起動し、必要なパッケージがインストールされます。

```
$ vagrant ssh
```

仮想マシン内に接続します。

### CakePHPのインストール

```
[vagrant]$ cd workdir
```
`workdir`に移動します。
`workdir`はホスト側の`Vagrantfile`がある場所と同期しています。


```
[vagrant]$ composer create-project --prefer-dist cakephp/app myapp
```

`composer`を使って、CakePHPのプロジェクトを作成します。

```
Set Folder Permissions ? (Default to Y) [Y,n]?
```

途中フォルダのパーミッションを設定するか聞かれるので`Y`を入力し、許可します。
`myapp`ディレクトリが作成され、その中に必要ファイルが展開されます。

### 動作確認

```
[vagrant]$ cd myapp
[vagrant]$ bin/cake server -H 192.168.33.10 -p 8080
```
作成された`myapp`ディレクトリに移動し、サーバーを起動します。
[http://192.168.33.10:8080/](http://192.168.33.10:8080/)にアクセスし、CakePHPの画面が表示されていれば成功です。

## 説明

### Vagrantfile

```ruby
  config.vm.box = "bento/centos-7.6"
```

boxにはCentOS7.6を使用します。

```ruby
  config.vm.network "private_network", ip: "192.168.33.10"
```

ゲスト側の`192.168.33.10`にホストからアクセス出来るようにします。

```ruby
  config.vm.synced_folder ".", "/home/vagrant/workdir"
```

ホスト側のルート （`Vagrantfile`のある位置) とゲスト側の`/home/vagrant/workdir`を同期します。

```ruby
  config.vm.provision "shell", path: "setup.sh"
```

初回`vagrant up`時に`setup.sh`をゲスト内で実行します

### setup.sh

```shell
sudo yum update -y
sudo yum install -y httpd git unzip
```

パッケージのアップデートし、基本的なパッケージをインストールします。

```shell
# add EPEL repository
sudo yum install -y epel-release
# add Remi repository
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

初期状態のyumでインストールされるPHPはバージョンが古く、CakePHPの必須要件を満たせません。
PHP7をインストールするために、EPELとRemiリポジトリを追加します。

```shell
# install MariaDB
cat <<EOF | sudo tee /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
EOF
```

初期状態のyumでインストールされるMariaDBはバージョンが古いため、
MariaDB Foundation公式のリポジトリを追加します。

`/etc/yum.repos.d/MariaDB.repo`に下記を追記します。

```MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
```

```shell
sudo yum install -y MariaDB-server MairaDB-client
```

MariaDBをインストールします。

```shell
# get composer
curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

`composer.phar`をダウンロードし、グローバルで実行できるよう移動します。