laradock + cakePHP3で環境構築


laravelだけでなくcakePHPにも[laradock](http://laradock.io/)オススメです。


## laradockを適当なディレクトリにgit cloneする
```
$ mkdir sample_project
$ cd sample_project
$ git clone https://github.com/laradock/laradock.git
```

## .envファイル作成
今回はこういう構成でいこうと思います。

```sample-project内
+ laradock
+ myapp
```

env-exampleファイルをコピーして、.envファイルを作成します

```
$ cd laradock
$ cp env-example .env
```

## docker-composeで環境をビルド
nginxとmysqlとphpmyadmin

```
$ docker-compose up -d nginx mysql phpmyadmin
```

## コンテナが起動しているか確認
```
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                      NAMES
1ba965f3c20d        laradock_mysql        "docker-entrypoint.s…"   18 hours ago        Up 12 seconds       0.0.0.0:3306->3306/tcp                     laradock_mysql_1
310b880caca5        laradock_phpmyadmin   "/run.sh phpmyadmin"     18 hours ago        Up 7 seconds        9000/tcp, 0.0.0.0:8080->80/tcp             laradock_phpmyadmin_1
0781d6c8ab84        laradock_nginx        "nginx"                  18 hours ago        Up 5 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
75a72f0e829c        laradock_php-fpm      "docker-php-entrypoi…"   18 hours ago        Up 6 seconds        9000/tcp                                   laradock_php-fpm_1
6668e7c4ef01        laradock_workspace    "/sbin/my_init"          18 hours ago        Up 12 seconds       0.0.0.0:2222->22/tcp                       laradock_workspace_1
```

phpmyadminは、`.env`のPHP MY ADMINの設定がデフォルトであれば、[http://localhost:8080](http://localhost:8080)で入れます。

## workspaceに入ってみる
```
$ docker-compose exec workspace bash
```

## cakePHP3インストール
myappはcakePHPをインストールするディレクトリ名です。

```
$ composer self-update && composer create-project --prefer-dist cakephp/app myapp
```

## rootディレクトリをcakePHP用に設定
cakePHPのルートディレクトリ`/webroot`を設定します。

```
$ vim laradock/nginx/sites/default.conf

-  root /var/www/public;
+  root /var/www/myapp/webroot;

```

## nginx再起動
rootディレクトリの変更を反映させるためにnginxを再起動します。

```
$ docker-compose restart nginx
```

## intlを有効化
cakePHPはintl拡張モジュールが必要？大人しく入れちゃいます。

```
$ vim laradock/.env

-  PHP_FPM_INSTALL_INTL=false
+  PHP_FPM_INSTALL_INTL=true
```

## php-fpmのコンテナの再生成
intlを有効化したので再びビルドします。

```
$ docker-compose up -d --build php-fpm
```


## 表示確認
[http://localhost](http://0.0.0.0/)でcakePHPのwelcomeページが表示されればOKです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/92407/fb7ad8e8-6df2-03d6-f270-f0fd0a940e22.png" width=60%>


## DB設定
DB接続設定も行います。`laradock/.env`のMYSQLの設定に合わせます。
cakePHPのソース、`config/app.php`の 220行目付近

```config/app.php`
- 'host' => 'localhost',
- 'username' => 'my_app',
- 'database' => 'my_app',

+ 'host' => 'mysql',
+ 'username' => 'default',
+ 'database' => 'my_app',
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/92407/5e4a3c3a-5aa3-881e-64a6-f0d690e69b23.png" width=50%>

こんな風に、welcomeページのDatabaseのところが緑のコック帽(?)になればOKです。
私の場合、なかなかmysqlが起動してくれなく、以前にビルドした全てのdockerコンテナとイメージと、`.laradock`もフォルダごと消去してやり直しました。
[こちらの記事](https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4)にもあるように、dockerの設定を変えるとき`docker-compose stop`してなかったのが原因ぽいです。

## 参考にした記事
:bow::bow::bow::bow::bow::bow:

- [LaradockでCakePHPの開発環境（nginx・php-fpm・mysql）を構築する](https://qiita.com/nino0813g/items/a29e046f851c5eb02a76)
- [LaradockでMySQLがどうしても立ち上がらない人あつまれー！](https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4)



## おまけ
mysqlをビルド時にこんなエラーが。

```
ERROR: Service 'mysql' failed to build: Get https://registry-1.docker.io/v2/library/mysql/manifests/8.0: unauthorized: incorrect username or password
```

一回ログアウトするといいらしい
[コンテナの起動時に ERROR: Service 'mysql' failed to build のエラー対応 - Qiita](https://qiita.com/yshishido/items/cd6188324a125ca7d8d5)

```
$ docker logout
```