Laradock環境構築

Mac OS X Catalina 10.15.4
初めて頑張ってLaradockで環境構築していきたいと思います。
おかしなところがありましたらぜひ指摘してください。

##Laradockをクローン

まずは専用のディレクトリ作成して移動します。

```
$ mkdir laratest
```

``` 
$ cd laratest
```

そこでgit clone。

```
$ git clone https://github.com/LaraDock/laradock.git
```

##LaraDockの.envファイル作成

そしたら```laradock```というファルが作成されているはずなので、そこに移動します。


```
$ cd laradock
```
その中にある```env-example```ファイルを```.env```としてコピーします。

```
$ cp env-example .env
```

laraDockファイルの中はいろんなソフトがめっちゃ入ってます。
nginx, mysql, php, laravelだけなら特に```.env```操作の必要はなさそう。

##Laradockの環境編集
Laradock内の```.env```ファイルを編集します。
ただ[公式ページ](https://laradock.io/)様では次のように```.env```ファイル内に追加する記載があります。

```
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
```

これ以外にも少し必要。

<img width="258" alt="スクリーンショット 2020-04-27 9.36.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596140/12297dc4-ecaa-e3b0-94b7-cd775c65d53f.png">

#####１、APP_CODE_PATH_HOST
[ ../ ] → [ ../laraapp ]に変更。プロジェクト名に変更ってことですね。
#####２、DATA_PATH_HOST
[ ~/.laradock/data ] → [ .laradock/data ] に変更。

#####３、MYSQL

<img width="246" alt="スクリーンショット 2020-04-27 9.54.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596140/90a385f9-5589-9598-f784-f2237cd710ec.png">

[ latest ] → [ 5.7 ]に変更。8.0系に比べて5.7系が安定しているみたいです。
```MYSQL_DATABAE```
```MYSQL_USER```
```MYSQL_PASSWORD```
とかはなんでも良さそうだけど、他の設定と揃える必要がある。
忘れないようにしないと。
とりあえずLaraDock内の.envファイルの設定と他を揃えます。


##Laradock起動

Laradockを立ち上げて確認してみます。
コンテナ起動が```up```で、オプションで```-d```を付けるとバックグラウンドで動いてくれます。
とりあえずならnginxとmysqlを動かせばいいかと。

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

...

Creating laradock_mysql_1            ... done
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1        ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_nginx_1            ... done

```
初回の起動のときはかなりpullしてくるので結構時間かかります。
完了したら上のような表示が出るはず。
起動してるか確認してみます。

<img width="977" alt="スクリーンショット 2020-04-27 8.11.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596140/968ff93b-1e03-cf4a-cf4d-f99f8581f477.png">

この中に```laradock_workspace_1```コンテナが立ち上がってるのが確認できます。
このコンテナの中に移動します。

```
$ docker exec -it laradock_workspace_1 bash

root@74e5ba95e1d4:/var/www#
```

##プロジェクト作成

移動できたら、まずはアップデートしときます。

```
root@74e5ba95e1d4:/var/www# apt-get update
```

終わったら、Laravelプロジェクトを作成します。下の例では```laraapp```という名前で作ります。

```
root@74e5ba95e1d4:/var/www# composer create-project "laravel/laravel=6.0.*" laraapp
```
現状(2020/4/27)では6.0系がLTSでサポート長いので、これを選択しておきます。
https://readouble.com/laravel/7.x/ja/releases.html

作成が完了したら、ファイルが存在しているのを確認して、一旦コンテナをでます。

```
root@74e5ba95e1d4:/var/www# exit
```

```
$ docker-compose stop
```


##Laravelプロジェクト内の環境

プロジェクト内に移動して、```.env```ファイルを調整します。
さっきのやつと揃える。

```
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
```

##パーミッション設定
webサーバーからの書き込み権限を与えるためにパーミッション設定します。
再度コンテナに入り、プロジェクトフォルダに移動します。

```
root@74e5ba95e1d4:/var/www/laraapp# chmod 766 storage
root@74e5ba95e1d4:/var/www/laraapp# chmod 766 bootstrap/cache
```
##コンテナ再起動

```
docker-compose restart
```

##マウント確認

```laradock_nginx_1```と```laradock_workspace_1```をdocker inspectして、マウント確認


```
$ docker inspect laradock_nginx_1

...

"Mounts": [

...
            {
                "Type": "bind",
                "Source": "/Users/ユーザー/hoge/laratest/laraapp",
                "Destination": "/var/www/",
                "Mode": "cached",
                "RW": true,
                "Propagation": "rprivate"
            },
...
```

```
$docker inspect laradock_workspace_1

...

"Mounts": [

            ...

            {
                "Type": "bind",
                "Source": "/Users/ユーザー/hoge/laratest/laraapp",
                "Destination": "/var/www/",
                "Mode": "cached",
                "RW": true,
                "Propagation": "rprivate"
            },

...
```

この状態でlocalhostに接続してみます。
<img width="269" alt="スクリーンショット 2020-04-27 17.48.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596140/f7b3fc4d-f04c-b15e-b2bf-94343a771f19.png">

はい、なんかおかしいですね。

###nginx

laradockに移動して、ファイルを編集します。エディタはvimじゃなくてもいいです。

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

server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    # For https
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name localhost;
    root /var/www/public;    //ここがこうなってるはずなので、
    index index.php index.html index.htm;

```

```
    server_name localhost;
    root /var/www/laraapp/public;    //こうする プロジェクト名いれる
    index index.php index.html index.htm;
```
nginxのドキュメントルートを変更するとのこと。

これで接続してみます。
<img width="843" alt="スクリーンショット 2020-04-27 18.01.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596140/85c4d723-5948-20bf-ea48-2ed78188b7e2.png">

やっと接続できました...
長かったですが、ありがとうございました。

####参考記事
こちらの記事等をめちゃくちゃ参考にさせていただきました。
ありがとうございました。
[LaradockでDockerによる開発環境を手軽に構築](https://www.wakuwakubank.com/posts/384-laravel-laradock/)
[Laradockを使ったLaravel開発環境構築](https://qiita.com/J_Shell/items/695a30fd38444d065ae5)
[Laravel6 Laradockを使ってDocker環境構築を初めからやってみる](https://qiita.com/majorboy/items/97fa9e0fc7a86a890293)