【初心者】LaradockでLaravelの開発環境を簡単構築

LaradockでLaravelアプリの開発環境を構築する際に、何度かのつまづきがありましたが、色々な参考サイトの情報をつなぎ合わせ、何とか解決に至りました。その備忘録です。
（特にphpmyadminからmysqlへの接続でコケたことが記事化の要因でした）

<font color="blue">
※本記事では、Laradock内の `workspace` `nginx` `mysql` `phpmyadmin`のみの使用について記載しています。
</font>

# リスペクトな記事
この記事を作成するにあたり、参考にした記事です。

- [25分で終わる！Laradockを使ったLaravel環境構築](https://wally-ngm.hatenablog.com/entry/2018/12/12/013844)

- [Laradockを使ってLaravel 5.5環境を構築する](https://qiita.com/rock619/items/62c2ab2252c405e26479)

- [LaradockのプロジェクトコンテナとMySQLコンテナを接続する方法](https://qiita.com/maejima_f/items/34cf3b8eb5ffbe256ad9)

- [LaradockのMySQLに接続できなくてはまった話](https://qiita.com/dnrsm/items/4bd078c17bb0d6888647)

- [Laradock で mysql がうまく動作しない時は ( mysqlコンテナが起動しない、migration 出来ない）](https://qiita.com/don-bu-rakko/items/cd8f96cc9087abf601e3)

- [Docker一括削除コマンドまとめ](https://qiita.com/boiyama/items/9972601ffc240553e1f3)


# 前提条件
下記がインストールされている

- docker

- docker-compose

- git

# GitからLaradockをクローン
1）任意のディレクトリを作成（例：project） && 作成したディレクトリへ移動

```terminal
$ mkdir project && cd project
```

2）上記ディレクトリへ**Laradock**をGitクローン

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

3）`laradock`へ移動 && `.env`ファイルの作成

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

（補足）Gitクローンで上記ディレクトリ`project`内に`laradock`ディレクトリが生成されます。
`.env`は後に触りますので、所在を確認しておいてください。

```text:今はこんな構成のはず
project /
　┗laradock /
　　　┗.env
```


（補足：はじめてLaradockを入れる場合は、この補足を無視してOK）
もし既にLaradockを導入している場合は（これから２つ目以上のLaradockを導入しようとしている場合は）、この時点で`laradock/.env`の`COMPOSE_PROJECT_NAME`（コンテナ名）を編集した方がいいかもしれません。詳しくは[コチラ](https://qiita.com/tomokei5634/items/74c7734701fff8b99904)


# workspaceコンテナの起動とlaravelプロジェクトの作成

4）`laradock`ディレクトリで`workspace`コンテナの起動
〜〜少し時間がかかります〜〜

```terminal:laradock
$ docker-compose up -d workspace
```

5）`workspace`コンテナが起動したら、コンテナへ入る
(11/7追記)※`--user=laradock`を忘れないように注意
もし`Do not run Composer as root/super user!`のアラートが出たら[コチラ](https://qiita.com/tomokei5634/items/53d817c14bcfd5953824#番外編sampleappの所有者の変更)

```terminal:laradock
$ docker-compose exec --user=laradock workspace bash
```

6）`workspace`コンテナ内でlaravelプロジェクトを作成
（プロジェクト名は任意。例：sampleapp）

```terminal:workspace
$ composer create-project laravel/laravel sampleapp
```

〜〜少し時間がかかります〜〜

7）終わったら、コンテナから出る

```terminal:workspace
$ exit
```

8）一旦、コンテナを停止

```terminal:laradock
$ docker-compose stop
```

この時点で`project`ディレクトリ内に`sampleapp`ディレクトリが生成されています。また、`laradock`と`sampleapp`に、それぞれ`.env`ファイルがあるので所在を確認。

```:今はこんな構成のはず
project /
　┣laradock /
　┃　┗.env
　┗sampleapp /
　　　┗.env
```

# `.env`ファイルの変更
## `laradock`の`.env`ファイルの変更
9）`laradock`ディレクトリにある`.env`ファイル内の一部を変更します。
まずは、ホストパス `APP_CODE_PATH_HOST` を`../`から`../sampleapp`へ変更。

```config:laradock/.env
# APP_CODE_PATH_HOST=../
# my change ↓↓↓
APP_CODE_PATH_HOST=../sampleapp
```

10）データベースなどの保存先 `DATA_PATH_HOST` を`~/.laradock/data`から`.laradock/data`へ変更（デフォルトではホームディレクトリ上に保存されるが、それをプロジェクトディレクトリのlaradock下へ変更）

```config:laradock/.env
# DATA_PATH_HOST=~/.laradock/data
# my change ↓↓↓
DATA_PATH_HOST=.laradock/data
```

11）<font color="red">重要！</font>次に`mysql`のバージョン`MYSQL_VERSION`を`5.7`に下げます。
（`latest`のままだと、2019年10月時点では`8.0`がインストールされ、不都合があるらしい）
（バージョンを下げたことで、うまく行かない場合は[コチラ](https://qiita.com/tomokei5634/items/53d817c14bcfd5953824#番外編laradockdatamysqlの削除)）

```config:laradock/.env
# MYSQL_VERSION=latest
# my change ↓↓↓
MYSQL_VERSION=5.7
```
`.env`ファイルを保存して閉じてください。

## `sampleapp`の`.env`ファイルの変更
<font color="red">※ココから変更するのは`sampleapp`ディレクトリの方の`.env`ファイルですので注意！（`.env`ファイルは`laradock`ディレクトリと`sampleapp`ディレクトリの両方に存在して、ややこしいですがご注意ください）</font>

12）アプリケーションの名前 `APP_NAME` を任意のものに変更（例：SampleApp）

```config:sampleapp/.env
# APP_NAME=Laravel
# my change ↓↓↓
APP_NAME=SampleApp
```

13）`laradock`の`.env`にある`mysql`の情報を参照しながら、
`sampleapp`の`.env`にある`mysql`の情報を変更します。

```config:（参照）laradock/.env
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
```

```config:（変更）sampleapp/.env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
# my change ↓↓↓
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
```

`.env`ファイルを保存して閉じてください。

# コンテナの立ち上げ　→　ブラウザでの確認
14）`laradock`ディレクトリから各コンテナを立ち上げます。

```terminal:laradock
$ docker-compose up -d workspace nginx mysql phpmyadmin
```

〜〜多少、時間がかかります〜〜

15）コンテナの立ち上がりを確認（とくに`mysql`もちゃんと立ち上がっているか）

```terminal:laradock
$ docker ps                                                                             
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                      NAMES
a501918bd6d5        laradock_nginx        "/bin/bash /opt/star…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
b3f1661bc327        laradock_php-fpm      "docker-php-entrypoi…"   About a minute ago   Up About a minute   9000/tcp                                   laradock_php-fpm_1
9b59af74dc9c        laradock_phpmyadmin   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp                       laradock_phpmyadmin_1
106b6d2851c0        laradock_workspace    "/sbin/my_init"          About a minute ago   Up About a minute   0.0.0.0:2222->22/tcp                       laradock_workspace_1
b50a3cc6b88a        laradock_mysql        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1
d6e837f0f469        docker:dind           "dockerd-entrypoint.…"   About a minute ago   Up About a minute   2375-2376/tcp                              laradock_docker-in-docker_1
```

16）では、ブラウザから`http://localhost/`へアクセスを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/76aae6bb-4b00-2832-f13e-cb9d846e94c2.png)

# `sampleapp`ディレクトリをいじってみる

試しに`sampleapp`ディレクトリをいじって、表示が変更できるかを確認。
**Laravel**を**ヤッホー**に変えて見ます。

17）`sampleapp/resources/views/welcome.blade.php`をエディタで開き編集

```html:sampleapp/resources/views/welcome.blade.php
<div class="title m-b-md">
  Laravel
</div>
    ↓↓↓
<div class="title m-b-md">
  ヤッホー
</div>
```

18）保存して、ブラウザをリフレッシュして、変更を確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/f4846e69-aab5-f591-417a-874af576b19f.png)


# データベースmysqlへ`phpmyadmin`でアクセス
19）ブラウザで`http://localhost:8080/`へアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/a758bf03-0232-42aa-3280-ca1fb3a743f5.png)

20）ログインできるかを確認
ログイン情報は[上記](#sampleappのenvファイルの変更)で設定した内容を参照

```config:sampleapp/.env
DB_HOST=mysql
DB_USERNAME=default
DB_PASSWORD=secret
```

![Screenshot from 2019-10-13 10-49-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/864e7f31-300a-2d38-c23f-a9ce284f17ea.png)


工程は以上です。


# うまくいかなかった場合
一度、すべてのコンテナ、イメージ、ボリューム、ネットワークを削除して、やり直すことを提案します。

しかし、この方法で削除すると、本当に全部が消えるので、他のプロジェクトに関わるコンテナやイメージがある場合は、個々に削除してください。

## 全てのコンテナの停止

```terminal
$ docker stop $(docker ps -q)
```

## コンテナの一括削除

```terminal
$ docker system prune
```

## イメージ一括削除

```terminal
$ docker rmi `docker images -q`
```

```terminal
$ docker rmi `docker images -f "dangling=true" -q`
```

## ボリュームの一括削除

```terminal
$ docker volume prune
```

## ネットワークの一括削除

```terminal
$ docker network prune
```

# 別のプロジェクト（別のコンテナ名）で立ち上げる場合
どうぞ、こちらもご覧ください。

- [【初心者】Laradockで別のプロジェクト（コンテナ）を立ち上げる場合 - Qiita](https://qiita.com/tomokei5634/items/74c7734701fff8b99904)


# 補足
## （番外編）`sampleapp`の所有者の変更

<font color="maroon">
(11/7追記)
※下記に記載しているアラートの解決方法がわかりました。
※上記工程（5）で `workspace`コンテナへ入るときに、`--user=laradock`を付けていないと、下記のアラートが表示されます。ちゃんとつけていたら「所有者の変更」はしなくて良いです。この補足事項は無視してOKです。
</font>

私の場合、laravelプロジェクトを作成した際に下記が表示された
<font color="DarkGoldenRod">Do not run Composer as root/super user! See https://getcomposer.org/root for details</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/3458e5d8-62c4-00f8-5107-0c103f4cb08d.png)

そして、生成されたディレクトリ`sampleapp`は所有者が`root`になっており、私が書き込みできなくなっていました。（この後に`sampleapp`内の`.env`ファイルを変更しますが、書き込みができず進めませんでした）

```terminal:project
$ ls -l
drwxr-xr-x 69 user user  4096 10月 13 08:29 laradock
drwxr-xr-x 12 root root 4096 10月 13 08:32 sampleapp
```

そこで、`sampleapp`の所有者の変更をしました（所有者を`root`から`user`へ変更）。

```terminal:project
$ sudo chown -R user sampleapp
[sudo] user のパスワード:
```
所有者を変更したことで、以降は問題なく進めることができました。

```terminal:project
$ ls -l
drwxr-xr-x 69 user user  4096 10月 13 08:29 laradock
drwxr-xr-x 12 user root 4096 10月 13 08:32 sampleapp
```

## （番外編）`~/.laradock/data/mysql`の削除

<font color="maroon">
(11/7追記)
※データベースなどの保存先 `DATA_PATH_HOST` を`~/.laradock/data`から`.laradock/data`へ変更している場合は、この補足事項は無視してOKです。
</font>

上記で`mysql`のバージョンを下げましたが、これにともない、ホームディレクトリ下にある`.laradock/data/mysql`を削除した方が良いらしい。

```terminal
$ sudo rm -rf ~/.laradock/data/mysql
```