Windows10 HomeでLaraDockを使う

laradockとはlaravel用のdockerで、簡単に導入ができると聞いたんだけど、windows10ではそうではなかった。
情報が混在していて、思いがけず時間がかかることかかること…。

主にGUI派の人間のlaradockでLaravelを使うまでの方法を記載しておく。
※<a href="https://qooga.jb-jk.net/wp/use-laradock-on-windows-10/">ブログ</a>からのほぼ転載です。Qiitaに載せて欲しい言われたんで…半年ほど経ったけど…

#環境
Windows 10 home
Docker version 18.03.0-ce, build 0520e24302 (docker --version)
Laravel Framework 5.7.22 (php artisan --version)
Laradock(git rev-parse HEAD) 913abc54f9edde865a1d6de8a03b38098593ebfb

dockerを使うのでdocker入っていることを前提とする。
ので、入れてない場合、下記を参照にまず入れておいてください。
[windows10のhomeだけどdocker使う](https://qiita.com/qooga/items/42767b80d0b2006d1740)

#落とす
作る予定(プロジェクト)のフォルダに下記GITをクローンする。
複数立てる予定なら『laradock_【プロジェクト名】』的な。
https://github.com/LaraDock/laradock.git
これがサーバになる。

もし今回書いているものにバージョンに合わせたいなら、下記を実行しておく

```
git checkout 913abc54f9edde865a1d6de8a03b38098593ebfb
```

今回は仮として『laradock_pj』というディレクトリを作成し、パスを『d:/laraval.host/laradock_pj/』とする。

『env-example』をコピーして『.env』を作る。
作らないと『docker-compose』時『ERROR: The Compose file～』になる。
※公式でいうとこの『cp env-example .env』に該当。

使用容量も増やしておくことを忘れない。

#環境設定ファイル(.env)を書き換える
先程作成した『.env』ファイルを書き換える。
通常は『～.yml』をいじる内容も『.env』の設定で大体イケるようになっている。

##環境情報の保存場所を変更
DATA_PATH_HOSTは『/.laradock/data』が基本なのだが、書き換えないと他に作成したlaradockと設定を共有されてしまう。
別にプロジェクトを立て度に要らない設定を読み込んだり、何か既にデータがあったりとか延々書き換えたり追加した状態になる。
多人数プロジェクトの場合環境の統一されてる？とか、とにかく後で困る。
かといえ、ただ『~/.laradock_pj/data』にするとユーザディレクトリに環境が増えれば増えた分だけ溢れかえる。
なので『/.laradocks』というまとめるディレクトリを用意。

```
DATA_PATH_HOST=~/.laradocks/.laradock_pj/data
```

##タイムゾーン
下記のように変えるのもよろしいけど、サーバはUTCのままでいいと個人的には思う。

```
WORKSPACE_TIMEZONE=Asia/Tokyo
```

##prefix
複数作成することを前提としているのだからプロジェクト毎に変える。

```
COMPOSE_PROJECT_NAME=laradockpj
```
アンダーバーは使っても無視され、なかったことにされるので、使わない方が無難。

##DBの接続設定変更
今回はMySQLを例とする。

接続情報は後で使うことを考えると変更しておく方がいいと思う。
今回は作成予定laravelプロジェクトに合わせて下記のように変更した

```
MYSQL_DATABASE=laravel_pj
MYSQL_USER=homestead
MYSQL_PASSWORD=secret
```
※laravelの.env設定にも使うので覚えておくこと。

###MySQLのVERSION指定がlatestのままだと起動してくれない様子。
- latestだと8系をインストールされる。
- Laravel 5は5.7以上を推奨されている。
ので、今回は

```
MYSQL_VERSION=5.7
```

しかしこの変更だけではインストールエラーが変わらず、docker-compose.ymlを書き換えることこそが必要であることを発見したので、もしかしたらバージョン変更は不要かも知れない…

##ポート指定を変更
windows自体は80を指定してもいいのだが、
案件共同作業者がmacだとportの80使っていたりするから、開発環境を統一することも考えて変えておく。
今回は『800』とする。

```
NGINX_HOST_HTTP_PORT=800
```

もしapacheを使うのであれば

```
APACHE_HOST_HTTP_PORT=800
```


#docker-compose.ymlに追記する
windowsでは必須なのだが、どうもmacでも要るらしい。

```
    mysql:
      build:
        context: ./mysql
…(略)
      networks:
        - backend
      user: "1000:50"   # 追加
      command: --innodb-use-native-aio=0   # 追加
```
一度作成していた場合、多分もうどうにもならないので、ここみて消してきてください。

#IP・ポート設定
[基本的には以前やり方をを説明した通り。](https://qiita.com/qooga/items/42767b80d0b2006d1740)

コマンド実行が出来るものでアクセス出来るIPを調べる。

```
docker-machine ip
```
今回は仮として『192.168.99.100』

次にポートを設定する。
『Virtual Box』→『default』→『ネットワーク』→『アダプター』→『ポートフォワーディング』

- ホストポート：仮想環境側ポート。通常『80』
- ゲストポート：windows側ポート(アクセス用ポート)。今回は『800』
上記で設定したNGINX_HOST_HTTP_PORTの値とゲストポートの値を合わせる

上記よりサーバ起動後アクセス出来るURLは下記となる。
『http://192.168.99.100:800』

ついでに追加ポート
HTTPSを使うなら下記を作る。

- ホストポート：443
- ゲストポート：443

phpMyAdmin等使う予定があるなら下記を作っておく。

- ホストポート：8080
- ゲストポート：8080

あと不要かも知れないが、念の為MySQL用に追加した。

- ホストポート：50
- ゲストポート：1000

#共有ファイルを設定
[ここで書いたように、VirtualBoxにイチイチ共有フォルダを設定しない](https://qiita.com/qooga/items/42767b80d0b2006d1740)と使えないから、ある程度共通のところを作ることをオススメする。

『Oracle VM VirtualBox』起動→『default』の設定→『共有フォルダ』→『追加』

- フォルダのパス　：　D:\laraval.host
- フォルダ名　：　/d/laraval.host

#サーバ動かす
『Docker Quickstart Terminal』を起動。

```
cd d:/laraval.host/laradock_pj/
```
で先程作成したのlaradockプロジェクトディレクトリに入ってから

```
docker-compose up -d nginx workspace
```
でコンテナを立ち上げる。MySQLは後程。

ここでもしエラーでたら『.env』を確認
初回はけっこう時間がかかるが、止まったら

```
docker-compose ps
```
で起動中のものを確認。

この時点で『http://192.168.99.100:800』にブラウザからアクセス出来る。
nginxの404エラーが表示されれば成功。

```
docker-compose exec workspace bash
```
でworkspaceに入る。

`pwd`で『/var/www』

`ls -a`で、windows側と共有設定したディレクトリ内容が表示されていれば成功。

#バーチャルホスト(URL)設定
.envのAPP_CODE_PATH_HOSTを変更する方法がよく勧められているが、共有されるディレクトリまで変更になっちゃうから、個人的に面白くない。
なので、それはそれとて、laravelにアクセス出来るURLを用意する。

#バーチャルホスト設定ファイルの作成
『～/laradock_pj/nginx/sites』以下にある『laravel.conf.example』をコピーして『laravel.conf』を作る。
ちなみにapacheを使用する場合は『～/laradock_pj/apache2/sites』

基本的に殆ど内容を変更しなくていいのだが、今回はプロジェクトを『laravel_pj』とするので、これに合わせる。
またサーバ名の『.test』はブラウザよってはNGの場合があるので『laravel.local』に変更。

```
server_name laravel.local;
root /var/www/laravel_pj/public;
```
そして後で記載するポート設定後『docker-compose up -d nginx』するだけで完了。

と、そのハズなんだけど、
何故かうまくいかない人々は
『～/laradock_pj/nginx/』以下『Dockerfile』の最終行に下記を追加する。

```
ADD laravel.conf /etc/nginx/conf.d/
```
既存を編集することになるし、他にやりようがあるかもしれないので自己責任！
1回『docker-compose up』でnginxを1回も起動してないとADDのせいで起動出来なくなるので、初回起動をしてから編集する。
というか本来は追加せずに出来るハズなんだよ…

```
docker-compose up -d nginx
```
等upを呼び直し『up-to-date』させておく。

#ポートの設定
windows側hostsファイルに情報追加。

```
192.168.99.100      dockerhost
192.168.99.100      laravel.local
```
後者だけでもOK。
ただIP指定でもアクセス出来るけど、localhost的なノリでサーバ名ある方がよくない？的な思いからdockerhostも設定しておく。

後程サーバを動かした際に
http://laravel.local:800
はlaravelのインストール先が、表示され
http://dockerhost:800
は192.168.99.100:800でアクセスしたのと同じ結果が表示されている。

下記が色々参考になった。
[【Laravel】Laradockで複数プロジェクトを動かす手順 | ぺんすけブログ](https://pensuke.work/posts/laradock-multiproject/)
[Laradockで複数サイトをSSL対応して同時に動かす – mrkmyki＠フリーランスブログ](https://mrkmyki.com/2018/11/26/laradock%E3%81%A7%E8%A4%87%E6%95%B0%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92ssl%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E5%90%8C%E6%99%82%E3%81%AB%E5%8B%95%E3%81%8B%E3%81%99/)

#Laravelを入れる
composerを使うが、仮想サーバ側で実行しているので、勿論windows側にcomposerが入っておらずともOK。
workspaceに入った(workspace bash)状態でLaravel作成コマンドを実行する。
今回は『laravel.conf』の設定とあわせて『laravel_pj』とするため、下記のようなコマンドになる。

```
composer create-project laravel/laravel laravel_pj
```
結果、windows側『D:\laraval.host\laravel_pj』が出来ている。
もし出来て無ければdockerの方のインストールが失敗しているので要見直し。

インストールが終わったら
http://laravel.local:800
にアクセスすると『Laravel』と中心に書かれたの使い方の説明リンクが貼られたページが表示されていれば成功。
これでインストールは完了となる。