Laradock + nginx + MySQL + phpMyAdmin => macOS

#はじめに
qiitaの他の方々がすでに書かれていたことをもとに、自分の環境で動いた手順をまとめました。
何かとお役に立てたら幸いです。

- Docker version 18.03.1-ce, build 9ee9f40
- docker-compose version 1.21.1, build 5a3f1a3
- すでにdocker、composerはインストールされた状態

##Laradockのインストール

```shell:作業するディレクトリ作成&移動
$ mkdir laradock_test && cd laradock_test
```

```shell:Laradockのインストール
$ git clone https://github.com/Laradock/laradock.git
```

```shell:laradockディレクトリへ移動
$ cd laradock
```

```shell:テンプレートから.envファイル作成
$ cp env-example .env
```
.envは後ほど変更するときに使います。

##コンテナを起動

```shell:コンテナの起動
$ docker-compose up -d nginx mysql phpmyadmin workspace
```

```shell:起動しているコンテナを表示
$ docker-compose ps
           Name                          Command              State                     Ports
----------------------------------------------------------------------------------------------------------------
laradock_mysql_1              docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp
laradock_nginx_1              nginx                           Up      0.0.0.0:443->443/tcp, 0.0.0.0:8880->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up      9000/tcp
laradock_phpmyadmin_1         /run.sh supervisord -n          Up      0.0.0.0:8080->80/tcp, 9000/tcp
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp
```
`docker ps`でも見れますが、もうちょっと簡潔に見せるために`docker-compose ps`で確認します。

##コンテナに入る

```shell:基本的なコンテナに入る方法
ex)$ docker-compose exec workspace bash
```

ただ、上記のままだとコンテナの中に`root`ユーザーとして入ることになり、`composer`の実行時に「`root`ユーザーでは実行しないように」と警告が表示されるます。
なので、`--user` オプションを `laradock` で指定してログインします。

```shell:user指定でworkspaceコンテナに入る
$ docker-compose exec --user=laradock workspace bash
```

##Laravel新規作成

laravelの開発に必要なものがworkspaceコンテナに用意されているため、workspace内で作業をすれば問題なし。

```shell:プロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel myproject
```

しばらくするとmyprojectがlaradockと同階層に生成されます。

```shell:生成されたプロジェクトの階層
drwxr-xr-x    5 kamokamo  staff   160  7 18 23:06 .
drwxr-xr-x@ 131 kamokamo  staff  4192  7 18 23:29 ..
drwxr-xr-x   62 kamokamo  staff  1984  7 18 23:29 laradock
drwxr-xr-x   24 kamokamo  staff   768  7 18 19:09 myproject
```

この状態では、laradockのworkspace（`laradock_test/laradock/workspace`）でアプリケーションを生成したのに、そのディレクトリはlaradockが置かれている階層（`laradock_test/myproject/`）と同じパスになりました。

##アプリケーションのパスを変更

このままでは`workspace`コンテナに入る度に`myproject`へ移動しないと行けないので、パスを変更します。

```shell:workspaceから出て.envを修正
$ exit;
$ vi .env
- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../myproject/
```

また、他の設定も変更する必要があれば、今のうちに変えておきます。
自分の場合、

- すでに使わ荒れているポートがある
- MySQLの設定がうまく行っていないところ

という問題があったので以下の変更をしました。

```diff:変更事項
(user配下の~/.laradock/data/mysqlが永続化されたので作業するディレクトリ内へ変更)
- DATA_PATH_HOST=~/.laradock/data
+ DATA_PATH_HOST=.laradock/data/

（macのApacheが利用するポートと被って、エラーの可能性があったため）
- NGINX_HOST_HTTP_PORT=80
+ NGINX_HOST_HTTP_PORT=8880

（mysqlのmigrate時にエラーが出たので事前に変更）
- MYSQL_VERSION=latest
- MYSQL_DATABASE=default
- MYSQL_USER=default
+ MYSQL_VERSION=5.7
+ MYSQL_DATABASE=laradock
+ MYSQL_USER=laradock
```

##`.env`の変更をコンテナに反映

```shell:コンテナの再起動
$ docker-compose stop
$ docker-compose up -d nginx mysql phpmyadmin workspace
```
これでブラウザに<a href="localhost:8880" target="_blank">localhost:8880</a>でアクセスすると下記のように表示されます。
![スクリーンショット 2018-07-20 11.23.17.png](https://qiita-image-store.s3.amazonaws.com/0/262785/fd36a5de-c2c6-10e5-e40c-b15952393bff.png)

##DB接続の確認

```shell:mysqlに接続
$ docker-compose exec mysql mysql -uroot -proot
mysql>
```
接続が確認できたら、今度は`laradock`ではなく`myproject`の方にある`.env`を修正します。

```shell:mysqlに接続
$ exit;
$ vi ../myproject/.env
```

`laradock`で変更したmysqlの設定に変えます。

```diff:変更事項
- DB_HOST=127.0.0.1
- DB_DATABASE=homestead
- DB_USERNAME=homestead
+ DB_HOST=mysql
+ DB_DATABASE=laradock
+ DB_USERNAME=laradock
```

そして、databaseは先に作っておく必要があるみたいなので`migrate`をします。
ただ、このままだと以下のエラーが出たので対策をしてからします。
> SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table users add unique users_email_unique(email))

```diff:変更事項
$ exit;
$ vi ../myproject/app/Providers/AppServiceProvider.php

︙
  use Illuminate\Support\ServiceProvider;
+ use Illuminate\Support\Facades\Schema;

︙

public function boot()
    {
-        //
+        Schema::defaultStringLength(191);
    }

︙
```
これで`migrate`の準備ができたので実行します。


```shell:migrate実行と結果
$ exit;
$ docker-compose exec --user=laradock workspace php artisan migrate:install
$ Migration table created successfully.

$ docker-compose exec --user=laradock workspace php artisan migrate
$ Migrating: 2014_10_12_000000_create_users_table
$ Migrated:  2014_10_12_000000_create_users_table
$ Migrating: 2014_10_12_100000_create_password_resets_table
$ Migrated:  2014_10_12_100000_create_password_resets_table
```
テーブルも生成されたので、確認をして見ると、

```shell:migrate実行と結果
$ docker-compose exec mysql mysql -uroot -proot laradock
mysql> show tables;

+--------------------+
| Tables_in_laradock |
+--------------------+
| migrations         |
| password_resets    |
| users              |
+--------------------+
3 rows in set (0.00 sec)
```
ちゃんと作られていました。

##書き込みのパーミッション変更
最後にwebサーバーから書き込みできるようにするため、パーミッションの設定を変更します。

```shell:パーミッション変更
$ exit;
$ docker-compose exec --user=laradock workspace
$ chmod 766 storage
$ chmod 766 bootstrap/cache
```

これで権限が変わったので、最後はコンテナを再起動します。

```shell:再起動
$ exit;
$ docker-compose restart
```
お疲れ様です。
長くなりましたが、これで今回の設定は終わりです。

##参考
[Laradockを使ったlaravel開発環境](https://qiita.com/akokubu/items/c79bb7128d7b16a20a22)
[Laradockを使ったLaravel開発環境構築](https://qiita.com/J_Shell/items/695a30fd38444d065ae5)
[Laradockを使ってLaravel環境を5分で構築する(つもりが若干躓いた)](https://qiita.com/yotsak83/items/a7d175206b387b5e5acc)
[LaradockでMySQLがどうしても立ち上がらない人あつまれー！](https://qiita.com/lara_bell/items/d4bd1340a5cc7dfcfcb4)
[はじめての Laradock](https://qiita.com/tdkn/items/b8aa24cca0ba2904f8e7)
[Syntax error or access violation: 1071 Specified key was too long](https://laracasts.com/discuss/channels/general-discussion/syntax-error-or-access-violation-1071-specified-key-was-too-long)