Laradockを使う時に気をつけること

Laravelプロジェクトのローカル環境をdocker-composeで簡単に構築できる [Laradock](https://laradock.io/) ですが、
複数プロジェクトで使おうとしたときや、予期せぬところでハマることがあったので注意点のメモです。

ちなみに初めてLaradockを使用したときはこちらの記事を参考にさせていただきました。
https://qiita.com/kamukiriri/items/73ff35fc7f9083ca68c1#補足2-ローカル開発環境としてlaradockを使用する


# 前提条件
### Version
Laradock: 7.14

### ファイル構成

https://laradock.io/getting-started/#A1
こっちのパターンで、Laravelプロジェクトの中にLaradockを置くときの想定です。

```
laravel/
　└ laradock/
```

# 気をつけること
以下に挙げていきます。

Laradockのディレクトリ名については参考記事でも言及されていますが、
イメージおよびコンテナ名とは連動していないのでリネームしなくても問題はなさそうです。

## .envで設定しておくべきところ

env-example を .env にリネームして必要な項目を設定します。
（コメントアウト行はデフォルトの設定です）

```config:/laravel/laradock/.env
### Paths #################################################
# DATA_PATH_HOST=~/.laradock/data
DATA_PATH_HOST=~/.laradock/my-laradock_data

### Docker compose files ##################################
# COMPOSE_PROJECT_NAME=laradock
COMPOSE_PROJECT_NAME=my-laradock

### NGINX #################################################
# NGINX_HOST_HTTP_PORT=80
# NGINX_HOST_HTTPS_PORT=443
NGINX_HOST_HTTP_PORT=8080
NGINX_HOST_HTTPS_PORT=4430
```

`DATA_PATH_HOST`
DBを使用する場合のストレージ。プロジェクトごとに分けた方が都合よさそう。

`COMPOSE_PROJECT_NAME`
ここで設定した名前がコンテナおよびイメージ名のプレフィックスになります。
複数プロジェクトでLaradockを利用する場合はこれをちゃんと設定しておかないと後で面倒なことに。
公式にも記載があります。

> By default the containers that will be created have the current directory name as suffix (e.g. laradock_workspace_1). This can cause mixture of data inside the container volumes if you use laradock in multiple projects. In this case, either read the guide for multiple projects or change the variable COMPOSE_PROJECT_NAME to something unique like your project name.

https://laradock.io/getting-started/#usage

`NGINX_HOST_HTTP_PORT` ,  `NGINX_HOST_HTTPS_PORT`
Apacheを使用する場合はそちらの設定を。
1つのプロジェクトならそのままでも良いかもしれませんが、複数プロジェクトのlocal環境を同時に立ち上げたい場合などは重複しないように変更する必要あり。


## packagist.orgへの接続状況
これはかなり限定的な場面になりますが・・・
ちょうど新しいプロジェクトを作ろうとしていたときに直面して困ったので一応書いておきます。

2019/4/9に一時的に日本から(？) https://packagist.org/ （Composerが使用しているパッケージリポジトリ）に接続できなくなった時間帯がありました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Packagist 経路障害っぽいな</p>&mdash; ぜり (zeriyoshi) (@zeriyoshi) <a href="https://twitter.com/zeriyoshi/status/1115474093233426433?ref_src=twsrc%5Etfw">2019年4月9日</a></blockquote>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">packagist、社内からだと経路障害で繫がらない</p>&mdash; くまぽー (@kumapo0313) <a href="https://twitter.com/kumapo0313/status/1115483881895907329?ref_src=twsrc%5Etfw">2019年4月9日</a></blockquote>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr"><a href="https://twitter.com/packagist?ref_src=twsrc%5Etfw">@packagist</a> [Composer\Repository\RepositorySecurityException]<br>  The contents of <a href="https://t.co/TACParcKvd">https://t.co/TACParcKvd</a><br>  3ccb3e... do not match its signature. <br>This is a error i&#39;m getting for the last 24 hours, so i&#39;ve setup new VPS, same error. is it just me ?</p>&mdash; ςЎβξЯиęł (@cybernet2u) <a href="https://twitter.com/cybernet2u/status/1115533665386287104?ref_src=twsrc%5Etfw">2019年4月9日</a></blockquote>
　
ComposerでLaravelをインストールしようとした時点で失敗していてこんな状況に。

```console
$ composer diag
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: 
The "http://repo.packagist.org/packages.json" file could not be downloaded: failed to open stream: Operation timed out
Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info
[Composer\Downloader\TransportException] The "http://repo.packagist.org/packages.json" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
failed to open stream: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
Checking https connectivity to packagist: [Composer\Downloader\TransportException] The "https://repo.packagist.org/packages.json" file could not be downloaded: failed to open stream: Operation timed out
```

これに関しては参照先リポジトリを packagist.jp に変更することで解決しました。
https://qiita.com/Hiraku/items/51961aa49f7a2922011d

　
ですがLaradock内でもworkspaceコンテナを作るのにComposerを使用していて、同じようにエラーに。。😩
何度 `docker-compose up -d nginx` ってしてもうまくいかないので悩みましたが、ここが原因でした。
（workspaceコンテナはデフォルトで .env の `WORKSPACE_COMPOSER_GLOBAL_INSTALL` がtrueになってるので、なにもしなければ同時に立ち上がるようになっています。）

```dockerfile:/laravel/laradock/workspace/Dockerfile
###########################################################################
# Composer:
###########################################################################

USER root

# Add the composer.json
COPY ./composer.json /home/laradock/.composer/composer.json

# Add the auth.json for magento 2 credentials
COPY ./auth.json /home/laradock/.composer/auth.json

# Make sure that ~/.composer belongs to laradock
RUN chown -R laradock:laradock /home/laradock/.composer

USER laradock

# Check if global install need to be ran
ARG COMPOSER_GLOBAL_INSTALL=false
ENV COMPOSER_GLOBAL_INSTALL ${COMPOSER_GLOBAL_INSTALL}

RUN if [ ${COMPOSER_GLOBAL_INSTALL} = true ]; then \
    # run the install
    composer global install \
;fi
```

で、 .env に `WORKSPACE_COMPOSER_REPO_PACKAGIST` っていうのがあったのでこれを https://packagist.jp にしてみたりしましたがやっぱりだめでした。
その日は諦めて帰ったら次の日 packagist.org につながるようになっていたのでよかったです。

・・・なにか良い対策法があれば知りたいです🙄