TL;DR
LaravelでWebアプリケーション開発する環境をLaradock使って作ったけど、大小ちょいちょいつまずくところもあったので、次からノンストップでいけるようにまとめておく
環境
Mac OS X 10.13.6
準備
Docker CE for MacをDL&インストールして、docker
、docker-compose
コマンドが使えるようにしておく
Docker IDが必要なので作っておく
想定するゴール
プロジェクト名はsample
ということで
work
├── laradock
└── sample
- PHP 7
- Laravel 5.6
- MySQL 5.7
- Nginx(+php-fpm)
こんな感じで、localhostで最低限の認証処理が動くWebアプリが確認できるところ
スタート
まずはプロジェクト用ディレクトリ作成からworkspace
のコンテナ動かすところまで
# on local
$ mkdir work && cd work
$ git clone https://github.com/laradock/laradock.git
$ cd laradock
$ cp env-example .env
$ docker-compose up -d workspace
workspace
コンテナ上でLaravelプロジェクトを作成する
# on local
$ docker-compose exec --user=laradock workspace bash
# on workspace container
$ composer create-project laravel/laravel sample
$ exit
.env
を2箇所書き換える
# on local
$ vim .env
APP_CODE_PATH_HOST=../
MYSQL_VERSION=latest
↓
APP_CODE_PATH_HOST=../sample
MYSQL_VERSION=5.7
書き換えたら一度workspace
のコンテナは落として、新たにnginx
やmysql
と一緒に起動する
# on local
$ docker-compose down
$ docker-compose up -d workspace nginx mysql
立ち上がったらlocalhost動いてるはずなので、ブラウザからアクセスして一度動作確認する
Laravelの画面が確認できたら一旦OKで、このままだとこのページしか操作できないので、認証周りを動かす
まずLaravelプロジェクト側の.env
の設定が、デフォルトだとHomesteadってLaravel用のVagrant環境を使った想定になっているので、Laradockで動くように一部変更する必要がある
$ vim ../sample/.env
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
↓
DB_HOST=mysql
DB_DATABASE=default
DB_USERNAME=default
あと認証のページと必要なテーブルを作成するため、workspace
のコンテナ上でコマンド実行する
# on local
$ docker-compose exec --user=laradock workspace bash
# on workspace container
$ php artisan make:auth
$ php artisan migrate
$ exit
これでもう一度ブラウザからlocalhostにアクセスして確認する
右上にLOGIN
とREGISTER
のリンクが出現しているはず
これでもうREGISTER
からアカウント登録して、LOGIN
からログインするってところまで動かせるようになっているはずなので、ゴールである
ハマりどころ
まず、デフォルトでそのまま立ち上げるとmysqlは8系が入るが、8系だとmigrate
でエラーになる
この辺の話だと思われるが、8系全然触ったことないし、情報量的にもまだ5系の方が安心感あるし、ってことで5.7を明示的に指定するようにした
あとLaradockのmysqlはデフォルトで~/.laradock/data
ってところにデータを永続化してたりするので、知らずに up/down 繰り返してると「データ消えてないな〜?」なんてハマる(.env
にDATA_PATH_HOST
って設定値でちゃんと書いてある)
他にも途中で「データベース名変えよう〜」とか脇道逸れながらやってたら結構ちょこちょこハマったので、気をつけたほうがいいというか、まずはここまで動かせること確認してから細かいところ見直すほうがいいと思った(ので記事書いた)