LaraDockを使ったPHPの開発環境の構築方法をまとめました。

新しく入った現場でPHPとフレームワークとしてLaravelを使うことになりました。
Dockerなどで勉強出来る環境が無いか探していたところ、LaradockというものがあったのがこれでLaravelの環境を作ってみました。
既に沢山同様な記事がございますが、勉強も兼ねて実施したことをまとめさせて頂きます。
今回はブラウザでlocalhostを開いて、「Laravel」の文字が表示されている画面をするところまでまとめています。

******************************************************************
2019年5月8日追記
タグの変更
「Laravel5.6」⇨「Laravel」

******************************************************************
2019年4月30日追記

「laradock」ディレクトリ内の「.env」ファイルを編集するタイミングについて修正しました。
コンテナの初回起動前に編集する様に書き直しました。

また、コンテナ名の変更方法とPHPバージョンの変更方法について記載致しました。

******************************************************************
2018年6月23日追記
追記した現時点では、下記方法で「Laradock」ディレクトリを作成すると「docker-compose.yml」のバージョンが「2」から「3」に変更になっております。
構築方法に一部変更点がございますのでご注意ください。
詳細は下記[「laradock」ディレクトリの「docker-compose.yml」を編集します。](https://qiita.com/maejima_f/items/cb35327d0ae8c78a5bb9#laradokディレクトリのdocker-composeymlを編集します)をご確認ください。

******************************************************************


# 動作環境について
OS:macOS Sierra
version: 10.12.6

Docker(Engine):17.12.0-ce
Compose:1.18.0

git: 2.12.2
# 参考資料
[DockerでLaravelの開発環境を構築する(更新:2017/07/03)]
(https://qiita.com/kurkuru/items/6ce0b9c4632b944347b8)
[laradockでlaravelの開発環境構築]
(http://www.dn-web64.com/archives/web/laradock_laravel/)

# 環境構築方法
まず、プロジェクトディレクトリとlaradock関係のディレクトリを格納する専用のディレクトリを作ります。

```
~ $ mkdir app
~ $ cd app
```

### *Laradockをインストールします。*
```
~/app $ git clone https://github.com/LaraDock/laradock.git
Cloning into 'laradock'...
remote: Counting objects: 6491, done.
remote: Total 6491 (delta 0), reused 0 (delta 0), pack-reused 6491
Receiving objects: 100% (6491/6491), 6.08 MiB | 191.00 KiB/s, done.
Resolving deltas: 100% (3421/3421), done.
```
「laradock」ディレクトリが作成されます。

```
~/PG/app $ ls
laradock
~/PG/app $ cd laradock
```

###「laradock」ディレクトリに移動して、「env-example」を改名コピーします。

```
~/PG/app/laradock $ cp env-example .env
```

###*「.env」を編集します。*
```
~/PG/app/laradock $ vim .env
```

「.env」に下記を追記します。

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

コンテナ名を変更する際には下記の値を変更します。(デフォルトは「laradock」)

```
COMPOSE_PROJECT_NAME=laradock
```

PHPのバージョンを変更する場合は下記の値を変更します。

```
PHP_VERSION=7.2
```


###*各種必要なコンテナを起動させます。*
ここでは「Nginx」、「Redis」、「MySQL」、「Beanstalkd」のコンテナを作ります。
一番最初はイメージを作成する時間が必要な為、1時間ほどかかります。

```
$ docker-compose up -d nginx mysql redis beanstalkd
・
・
・
・
・
Creating laradock_redis_1        ... done
Creating laradock_mysql_1        ... done
Creating laradock_applications_1 ... done
`docker-compose build` or `docker-compose up --build`.
Creating laradock_workspace_1    ... done
Creating laradock_redis_1        ... 
Creating laradock_php-fpm_1      ... done
Creating laradock_workspace_1    ... 
Creating laradock_php-fpm_1      ... 
Creating laradock_nginx_1        ... done
Creating laradock_beanstalkd_1   ... done
~/PG/app/laradock $ 
```

各種コンテナの状態を確認してみましょう。　
「State」が「up」なら立ち上がっていることになります。```
~/app/laradock $ docker-compose ps```
<img width="808" alt="スクリーンショット 2018-02-18 18.29.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/238861/9e655e1a-265b-50b1-7517-49d0825e32cc.png">



現段階でlocalhpstへアクセスしてみると、「404エラー」となります。

<img width="1337" alt="スクリーンショット 2018-02-17 17.01.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/238861/8a5b234b-bfb5-217c-57ca-0f0d098e2de9.png">


###*次にLaravelのプロジェクトを作ります。*

「laradock_workspace_1」コンテナがログイン先のプロジェクト用のコンテナになります。
'コンテナにアクセスします'

```
~/app/laradock $ docker exec -it laradock_workspace_1 /bin/bash
root@e43ece0f6a55:/var/www# 
```

アップデートをします。
```root@e43ece0f6a55:/var/www# apt-get update
```

後々ファイルを編集出来る様に「vim」でも入れておきます。```
root@e43ece0f6a55:/var/www# apt-get install vim
```


Laravelプロジェクトの作成
下記「test」がアプリケーション名(プロジェクト名)となります。
コマンド入力直後にwarningメッセージの様なものが出て、1分ぐらいwaitingの状態になりますが気にせず待っていて大丈夫です。

```
root@8f657f48f919:/var/www# composer create-project laravel/laravel test
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Installing laravel/laravel (v5.6.0)
- Installing laravel/laravel (v5.6.0): Downloading (100%)
\> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 71 installs, 0 updates, 0 removals
  - Installing symfony/thanks (v1.0.6): Downloading (100%) 
・
・
・
・
・
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
\> @php artisan key:generate
Application key [base64:???????????????????????=] set successfully.
root@e43ece0f6a55:/var/www# 
```
Laravelのプロジェクトの作成完了です。

「test」ディレクトリが作成されていることを確認します。

```
root@e43ece0f6a55:/var/www# ls
laradock  test
```

「test」ディレクトリでLaravelのバージョンを確認します。
*artisanコマンドは「test」ディレクトリ上でないと動かせません。

```
root@e43ece0f6a55:/var/www# cd test
root@e43ece0f6a55:/var/www/test# php artisan --version
Laravel Framework 5.6.3
```
一旦コンテナを停止させます。

```
~/PG/app/laradock $ docker-compose stop
Stopping laradock_nginx_1      ... done
Stopping laradock_beanstalkd_1 ... done
Stopping laradock_php-fpm_1    ... done
Stopping laradock_workspace_1  ... done
Stopping laradock_redis_1      ... done
Stopping laradock_mysql_1      ... done
```

###*「laradok」ディレクトリの「docker-compose.yml」を編集します。*
******************************************************************
2018年6月23日追記
追記した現時点では、下記方法で「Laradock」ディレクトリを作成すると「docker-compose.yml」のバージョンが「2」から「3」に変更になっております。

改めて「laradock」のコンテナを作成した際に下記修正を行おうと試みましたが、下記手順を無理やり行うとしたらコンテナを起動出来なくなりました。
最終的に、「docker-compose.yml」に下記修正を行わないまま再度コンテナにアクセスし、ソースコードの変更等を行なった際に変更が正しく反映されることを確認致しました。
今後は下記手順は不要になります。
引き続き、下記「[次の2つの設定を実施します。](https://qiita.com/maejima_f/items/cb35327d0ae8c78a5bb9#次の2つの設定を実施します)」を実施してください。
******************************************************************

ホスト側の「test」ディレクトリで編集したことがゲスト(Dockerコンテナ)の「test」ディレクトリでも反映される様に設定します。
その為に、「docker-compose.yml」を編集します。

```
~/app/laradock $ vim docker-compose.yml
```
「vim docker-compose.yml」下記の部分を、

```
    applications:
      image: tianon/true
```
この通りに書き換えます。

```
    applications:
      image: tianon/true
      volumes:
          - ${APPLICATION}/test:/var/www
```
*「${APPLICATION}」がホスト側の「app」ディレクトリに当たります。

コンテナを再度起動します。
```docker-compose up -d nginx mysql redis beanstalkd```
コンテナへ移動します。
```docker exec -it laradock_workspace_1 /bin/bash```

### *次の2つの設定を実施します。*
1.特定ディレクトリのパーミッションの変更
2.nginxの設定の変更


*・特定ディレクトリのパーミッションの変更*
「storage」、「bootstrap/cache」ディレクトリをwebサーバーから書き込み可能にする必要があります。
現在のパーミッションの確認

```
drwxr-xr-x  4 root root    136 Feb 17 08:11 bootstrap
drwxr-xr-x  5 root root    170 Feb 17 08:11 storage
drwxr-xr-x 5 root root  170 Feb 17 08:18 cache
```

パーミッションを変更する

```
root@e43ece0f6a55:/var/www/test# chmod 766 bootstrap/cache
root@e43ece0f6a55:/var/www/test# chmod 766 storage
```

*・nginxの設定の変更(ドキュメントrootのパスを変更)*

```
root@8f657f48f919:/var/www/laradock# vim nginx/sites/default.conf
root@e43ece0f6a55:/var/www/test# cd ../laradock
root@e43ece0f6a55:/var/www/laradock# vim nginx/sites/default.conf
```

「default.conf」の下記の部分

```
    server_name localhost;
    root /var/www/public;
    index index.php index.html index.htm;
```
「root /var/www/public;」。これを「root /var/www/test/public;」に変更します。


変更し終えらた1度コンテナを再起動させます。

```
docker-compose up -d nginx mysql redis beanstalkd
docker exec -it laradock_workspace_1 /bin/bash
```
### *再度localhostへ*

<img width="1331" alt="スクリーンショット 2018-02-17 18.22.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/238861/e10d4a9b-4ecb-af5f-c1c3-69647208200e.png">

起動出来ました。

次はMySQLとの接続の仕方をまとめていきます。