【環境構築】Ubuntu18.04にCakePHP3のテスト環境構築

##目的
・CakePHP3の開発用テスト環境を構築する

##環境

| 項目 | 内容 |
|:-----|:-----:|
| Host OS | Windows10 |
| 仮想ツール | VirtualBox 5.2.16 |
| 仮想 OS | Ubuntu 18.04 |

##前提
（1）Windows10上にVirtualBoxがインストール済み
（2）VirtualBox上にUbuntu18.04が設置済み

##作業手順
（1）PHP、その他必要パッケージインストール
（2）Apacheインストール
（3）MySQLインストール
（4）CakePHPインストール

##内容
####（1）PHP、その他必要パッケージインストール

```terminal:phpとその他必要パッケージインストール
$ sudo apt -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring php7.2-mysql php-sqlite3 sqlite3
```

```terminal:インストール後のPHPのVersion確認
$ php -v
```

▼実行結果
![php_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/5e771807-86cb-ed98-e21b-ba6b31489bad.png)

####（2）Apacheインストール

```terminal:apache2インストール
$ sudo apt -y install apache2
```

```terminal:apache2設定ファイルを編集
$ sudo nano /etc/apache2/apache2.conf
```

```nano:追記内容
<Directory />
　...
　#None から All へ変更
　AllowOverride All
</Directory>
...
<Directory /var/www>
　...
　#None から All へ変更
　AllowOverride All
</Directory>

```

▼編集時の apache2.conf ファイルの内容（抜粋）
![apache_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/fea5cc98-54a0-0d68-d405-f8dc4f29ad6a.png)

・編集後、Apache2 を再起動させ状態を確認

```terminal
$ systemctl restart apache2
$ systemctl status apache2
```

▼実行結果の画面（成功した場合）
![apache_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/210f946d-6cfe-0293-8a23-ee8eb7320bf2.png)

####（3）MySQLインストール

```terminal:mysqlパッケージインストール
$ sudo apt -y install mysql-server mysql-client
```

```terminal:mysqlセットアップ
$ sudo mysql_secure_installation
```

▼セットアップ実行時の問いに対する回答例（今回の設定）

| 質問 | 回答 |
|:------|:-------|
| Press y｜Y for Yes, any other key for No: | [Enter] |
| New password： | password1 |
| Re-enter new password： | password1 |
| Remove anonymous users? | y |
| Disallow root login remotely? | y |
| Remove test database and access to it? | y |
| Reload privilege tables now? | y |

```terminal:設定完了後にmysqlにログインテスト
$ sudo mysql -u root -p
Enter password: password1
```

▼ログイン成功時
![mysql_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/a3ca22e3-4d91-9586-798a-d72ecf585094.png)

・テスト用ユーザ作成

▼テストユーザ設定情報

| 項目 | 設定 |
|:---|:----|
| ユーザ名 | test |
| パスワード | test0123 |

```terminal:mysqlログイン
$ sudo mysql -u root -p
Enter password: password1
```

```mysql:ユーザ作成＆権限付与
> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test0123';
> GRANT ALL ON *.* TO 'test'@'localhost';
```

```mysql:ユーザテーブル確認
> SELECT user,host FROM mysql.user;
```

▼実行結果（最下部にテストユーザが追加されている）
![mysql_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/86ecb7b6-67b0-e61a-4c81-706fd63b548c.png)

```mysql:設定されている文字コード確認
> SHOW VARIABLES LIKE "chara%";
```

▼実行結果
![mysql_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/111b902e-b89e-d93c-e4f4-87e1643c1fa7.png)

・文字コードをUTF-8に統一

```terminal:文字コードを修正
$ sudo nano /etc/mysql/my.cnf
```

```nano:下記をmy.cnfに追記
[mysqld]
character-set-server=utf8
```

▼編集画面
![mysql_06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/3ae35a9f-8501-f446-5023-4949baf7d83d.png)

```terminal:mysql再起動&状態確認
$ systemctl restart mysql
$ systemctl status mysql
```

▼実行画面
![mysql_07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/658aa929-dc3a-c5ba-6b55-fff8e27696bd.png)

```mysql:mysqlにログインし文字コードを確認
> SHOW VARIABLES LIKE "chara%";
```

▼実行結果（latin1 が utf8 に変更されている）
![mysql_08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/abca61ff-5eef-c301-17fc-2a89697610b2.png)

```mysql:CakePHP用のテストDB作成
> CREATE DATABASE testcake;
```

▼実行結果
![mysql_09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/8183fadf-b170-b8f4-0be0-85b3b532fcf0.png)


####（4）CakePHPインストール

```terminal:必要なパッケージがインストールされているか確認
$ php -m | grep -e mbstring -e SimpleXML -e intl
```

▼実行結果（intl がインストールされていないことが判明）
![cakephp_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/d00be64b-21c4-3ef4-4fa3-e1ba7bcbf6a9.png)

```terminal:intlパッケージインストール
$ sudo apt -y install php-intl
```

```terminal:composerをインストール
$ sudo apt -y install composer
```

```terminal:mod_rewriteの設定を有効にする※重要
$ sudo a2enmod rewrite
$ systemctl restart apache2
```

```terminal:CakePHPのプロジェクト（testcake)を作成
$ cd /var/www/html
$ sudo composer create-project --prefer-dist cakephp/app ./testcake
```

▼実行途中でこんなこと聞かれます
![cakephp_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/7b522455-c6c9-1342-1fac-d5090c4ffcba.png)
※ひとまず「y」でEnter

▼処理完了後、フォルダ一覧表示
![cakephp_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/ed65a624-f8a4-fba6-7f02-7ac797c78a14.png)
※無事設定完了！

▼ブラウザからアクセス（下記が表示されれば成功）
![cakephp_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/d55f95fb-c92f-9cb9-e299-761b9ef7a05a.png)

▼Database の箇所でエラーが表示される
![cakephp_06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/b9cd5ff3-87fe-a147-67ee-f23cff087f81.png)

```terminal:/var/www/html/testcake/config/app.phpを編集
$ sudo nano /var/www/html/testcake/config/app.php
```

▼Datasources の内容を下記に変更
![cakephp_08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/f3169bd1-c4d8-2033-7f4a-d36f0713aad4.png)

▼再度ブラウザからアクセス（Database を確認）
![cakephp_09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/e6ecd4dd-58de-445e-7e86-70215d54d192.png)

以上！

##蛇足
　最後の Database の接続部分で少しハマりました。事前にMySQL上で用意した test ユーザに CakePHP 側からアクセスできないという問題でした。対策として 一旦 test ユーザを削除して、改めて作り直し、test ユーザでログイン可能かテストをした上で再度 CakePHP に設定したというような次第です。
　あと、途中 CakePHP のインストールの説明にあった mod_rewrite の部分でもハマりました。こちらも、事前にしっかり設定していれば問題は起きないのですが、抜けると思わぬエラーに見舞われます。ご注意を！

##References
サイト：
『[mysqlへログインできない問題](https://qiita.com/chanP_yamazaki/items/064565e574c493a634fe)』
『[Server World](https://www.server-world.info/query?os=Ubuntu_18.04&p=ntp&f=1)』

書籍：
『PHPフレームワーク CakePHP 3入門』（著）掌田 津耶乃