Laradoc×DockerでLaravel環境を構築

# 前提条件
macOS Big Sur -bash
Docker　Desktopを公式よりダウンロードしてインストールして立ち上げていること


# Laradocをインストール
プロジェクトのワークスペースになるフォルダをどこか適当な場所に作って、ターミナルでそのフォルダのディレクトリへ行って、以下のコマンドでLaradocをインストールする。

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

# laradocの.envファイルを作成
インストールされてたら、laradocというフォルダが生成されるので、`$ cd laradoc`で移動しておいてから.env.exampleを複製して.envファイルを作る。

```terminal
laradoc$ cp .env.example .env
```

.envファイルをテキストエディタで開いて、以下の箇所を変更する。

データベースのデータ保存先を../dataディレクトリに変更。

```.env
# Choose storage path on your machine. For all storage systems
 DATA_PATH_HOST=../data
```

他のプロジェクトでLaradockを使用する可能性もあるので、コンテナ名の重複を防ぐためにプロジェクト名に変更しておく。

```.env
# Define the prefix of container names. This is useful if you have multiple projects that use laradock to have separate containers per project.
 COMPOSE_PROJECT_NAME=プロジェクト名
```

PHPのバージョンを指定。8じゃなくて、ちゃんと8.0と入力しましょう。(これのせいか、エラーが起きました。)

```.env
# Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM).
# Accepted values: 8.0 - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
 PHP_VERSION=8.0
```

# Laradock起動

ターミナルでlaradocディレクトリにいる状態で以下を入力

```terminal
laradoc$ docker-compose up -d workspace php-fpm nginx mysql phpmyadmin
```
... doneが出たら完了。

# 立ち上がったかチェック

ブラウザを起動して、urlを入力する部分にlocalhostと入力してアクセス。

404 Not Found
nginx

とあれば成功！


# Laradoc起動でエラーが出た時の対処法
## PHPのバージョンでエラー

```
=> ERROR [internal] load metadata for docker.io/laradock/workspace:latest-8                                                                  4.4s
------
 > [internal] load metadata for docker.io/laradock/workspace:latest-8:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: docker.io/laradock/workspace:latest-8: not found
ERROR: Service 'workspace' failed to build : Build failed
```

.envのPHP_VERSIONの指定を確認。
私は`PHP_VERSION=8`としてしまったため、このエラーが出ました。`.0`も大事です。


## 時間かかりすぎ問題

```terminal
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).
```

`$docker-compose up -d workspace php-fpm nginx mysql phpmyadmin`をした後、異常に時間がかかった時に出ました。

スルーしてもう一度`$docker-compose up -d workspace php-fpm nginx mysql phpmyadmin`をしただけでいけました。


## ポート被ってる問題

```terminal
Creating プロジェクト名_nginx_1      ... error

ERROR: for プロジェクト名_nginx_1  Cannot start service nginx: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use

ERROR: for nginx  Cannot start service nginx: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.
```

80番のポートが他の処理で使われている場合に起こるようです。
.envファイルでポートを80以外に変更しましょう。以下の326行目あたりにあるNGINX_HOST_HTTP_PORTの部分を変更してください。私は81も使っていたので82にしました。

```.env
NGINX_HOST_HTTP_PORT=82
```

ポート番号を変更したら、アクセスしてチェックするU暗号RLがlocalhostではなく、`localhost:指定したポート番号`になるので注意。

ちなみに、ポート番号を使っているか確認する際は以下で確認できる。

```terminal
$ sudo lsof -i -P | grep ":80"
```


# Laravelのアプリケーションプロジェクトファイルを作成

laradocディレクトリで以下を入力

```
laradoc$ docker-compose exec workspace bash
```

なんか`root@bfcbaebbdded:/var/www#`みたいなのが出たらコンテナのworkspace内に入ってコマンドが打てるようになった印なので、コンテナ内にlaravelをインストールする。

```
$ composer create-project laravel/laravel:^8.0 プロジェクトフォルダ名 --prefer-dist
```

zip形式で落とせるので--prefer-distを末尾につけると高速でダウンロードできる。
ここら辺のコマンドは、公式ドキュメントの[composerでのインストール](https://readouble.com/laravel/8.x/ja/installation.html)の部分に書いてあるのでそちらを参考にどうぞ。

`Application key set successfully.`と出たら完了。`exit`と入力してコンテナのworkspaseから抜けて、ターミナルのlaradocディレクトリに戻る。

また.envを開いて、以下の部分を変更して、Laravelアプリケーションの場所を指定。
プロジェクトフォルダ名とは、先ほど`composer create-project`コマンドで使った名前を使用する。

```laradoc/.env
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../プロジェクトフォルダ名
```


# Docker再起動

laradockディレクトリでもう一度、以下のコマンドを入力。

```
laradoc$ docker-compose up -d workspace php-fpm nginx mysql phpmyadmin
```

...doneが並んでいたら完了。ERROが付いているものがあったら失敗してる。。

ブラウザで`localhost`か`、ポート番号を80以外に変更した人はlocalhost:ポート番号`にアクセスすると、Laravelと、出ていたら成功。


# どうしてもうまくいかない時

以下のコマンドで、dockerを止めて、1番最初に作ったプロジェクトのワークスペースになるフォルダごと削除して、PCを再起動して1番最初からやり直してみると意外とうまくいったりします。

```
$ docker-compose stop
```

ここまでやったのに…とは思うのですが、色々な開発環境を構築するソフト(MAMPやらLocal by flyfheelやら)色々立ち上げてみたりして並列で作業していると、なんかPCの調子が悪いことってあるんですよね。