laradockで複数プロジェクトの環境構築をする

[【Laravel】Laradockで複数プロジェクトを動かす手順](https://pensuke.work/posts/laradock-multiproject/)
https://laradock.io/getting-started/#B

公式と上の記事を参考にlaradockの開発環境をしてみました。
その記録として、残しておこうと思います。
1プロジェクトに1laradockで増やしていくことを前提とした内容です。

```
workspace
|_app
   |_laradock
   |_source
```


この環境構築の際にものすごくエラーがでたので、エラーだけをまとめた記事を別で作りました。合わせて参考にしていただければ幸いです。
[laradock環境構築のエラーと解決策](https://qiita.com/HiMinmeg/items/b1d0e6c717891e35674f)



# Laradockをgit cloneする
```
$ git clone https://github.com/Laradock/laradock.git laradock
```

## envファイルを編集

まずは基本的な設定から。

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

以下の部分を変えてください。バージョンはお好みで。

```
APP_CODE_PATH_HOST=../app
DATA_PATH_HOST=.app/data
COMPOSE_PROJECT_NAME=app
PHP_VERSION=7.3
MYSQL_VERSION=5.7
```


## confファイルを編集

```
$ cd nginx/sites
$ cp laravel.conf.example app.conf
```
コピーして内容を変更します。
下記引用しました。こちらに沿ってください。

>larave.conf.exampleではlaravelというフォルダで動かすようにかかえれているので、そのlaravel部分をproject1という風に書き換えます。
またproject1.testだとchromeで動かなかったりするのでproject1.localとしています。
（https://pensuke.work/posts/laradock-multiproject/）

また「hostsの設定を行う」という手順もありますが、現在設定はしていますが、自分の環境では上手くいってないので、割愛します。
（個別で設定してるのにlocalhostでも表示されてしまうのです…）

こちらも引用させていただきます。
>Nginxでdocker上のサイト設定は行いましたが、これだけではローカルPC上で http://project1.local/にアクセスしてもなにも表示されません。
hostsの最下部に追記しましょう。
編集ファイル: /private/etc/hosts

>127.0.0.1	project1.local
::1 project1.local


## DBの設定
```
$ cd mysql/docker-entrypoint-initdb.d/
$ cp createdb.sql.example createdb.sql
```
この中のファイルを以下のように編集します

```
CREATE DATABASE IF NOT EXISTS `app` COLLATE 'utf8_general_ci' ;
GRANT ALL ON `app`.* TO 'default'@'%' ;
```
コメントアウトを外し、2ヶ所変更します。

mysqlコンテナを立ち上げ、DBの内容を確認しましょう

```
$ docker-compose up -d mysql
$ docker exec -it laradock_mysql_1 bash
# mysql -u root -p
Enter password:

Server version: 5.7.34 MySQL Community Server (GPL)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| default            |
| mysql              |
| performance_schema |
| sys                |
| app                |
+--------------------+
6 rows in set (0.00 sec)
```

自分の作りたいDB名がはいってたらOKです。

# アプリを作る or プロジェクトをgit cloneして残りのコンテナを起動

自分の場合はgit cloneしました。
新しく作る場合は他でも紹介されているので割愛します。

```
$ docker-compose exec --user=laradock workspace bash
# git clone URL
```

git cloneしてきた場合は.envファイルをコピー＆venderファイルを作成してください

```
$ docker exec -it laradock_workspace_1 bash
# cd app
# cp .env.example .env
# composer install
```

プロジェクト内の.envファイルがテキストエディタなどで保存できない場合は、
権限を確認して、変更してください。

これを

```
# ls -l
total 1604
drwxr-xr-x 14 root root   4096 Jun  3 10:27 app
-rw-r--r--  1 root root   1686 Jun  3 10:27 artisan
省略
```

こう

```
# chown -R laradock:laradock /var/www
# ls -l
total 1604
drwxr-xr-x 14 laradock laradock   4096 Jun  3 10:27 app
-rw-r--r--  1 laradock laradock   1686 Jun  3 10:27 artisan
省略
```

## laravelプロジェクトの.envファイルを編集

laradockのmysqlコンテナを立ち上げる前に設定したDB名にしましょう。

```
DB_DATABASE=app
```


## migrateする

```
/var/www# cd app
# php artisan migrate
```


マイグレーションできない時はmysqlの権限を確認してください

```
$ docker exec -it laradock_mysql_1 bash
# /var/lib/mysql# ls -l
```

ちなみにファイル構成はこんな感じでつくったDBが入ってます

```
root@5120d5325290:/var/lib/mysql# ls
auto.cnf    ca.pem           client-key.pem  ib_buffer_pool  ib_logfile1  ibtmp1  performance_schema  public_key.pem   server-key.pem  app
ca-key.pem  client-cert.pem  default         ib_logfile0     ibdata1      mysql   private_key.pem     server-cert.pem  sys
```

権限がmysql以外になってたら、mysqlに変えましょう

```
-rw-r----- 1 1000 1000       56 Jun  3 09:47 auto.cnf
-rw------- 1 1000 1000     1676 Jun  3 09:47 ca-key.pem
-rw-r--r-- 1 1000 1000     1112 Jun  3 09:47 ca.pem
省略
```

```
# chown -R mysql:mysql /var/lib/mysql
```

```
root@5120d5325290:/var/lib/mysql# ls -l
total 188484
-rw-r----- 1 mysql mysql       56 Jun  3 09:47 auto.cnf
-rw------- 1 mysql mysql     1676 Jun  3 09:47 ca-key.pem
```

これでOK！
再度migrateしましょう


# webページが表示されるか確認

ここまできたらあと少しです！
コンテナを全て立ち上げ、webページが表示されるか見てみましょう。

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

## APP KEYを作成する

最後にlaravelのエラー画面が出ていたら、APP KEYを作成してください。

```
# php artisan key:generate
Application key set successfully.
# php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!
```

これでlaravelが使えるようになっているはずです！