前回の記事でlaradockでLaravelプロジェクトを作る方法を説明した。今回は、タイトル通りlaradock1つでLaravelプロジェクトを複数作る方法を解説する。これを説明したかった為に、いや自分が忘れない為に前の記事を作成したと言っても良い。まだ、Laravelプロジェクトを一度も落としたことがない人は前回の記事を見て欲しい。複数作って自分はこれで動いているが動かない人は頑張ってググってくれ。結局ググり力が一番大事な気がする。なお、LaradockはLaravelと混ざって混乱すると思うので、laradockと小文字で表示しています。
前回の記事
目指すもの
目指すフォルダ構造
MyLaravelApp(どこに作っても、名前もなんでもOK、とりあえすデスクトップでも)
├── Laravelproject(自分の作りたいLaravelのアプリ名)
├── Laravelproject2(自分の作りたいLaravelのアプリ名)
└── laradock
目指す状態
docker-composeコマンドでコンテナを作成し、LaravelprojectとLaravelproject2どちらにもアクセスできるようにすること。データベースもそれぞれ、LaravelprojectとLaravelproject2で分けられること
Laravelプロジェクト1つを作成する
まず、下のように1つのLaravelプロジェクトが完成している状態をつくる。
まだ、作っていない人は前回の記事を参照して作成して欲しい。
MyLaravelApp(どこに作っても、名前もなんでもOK、とりあえすデスクトップでも)
├── Laravelproject(自分の作りたいLaravelのアプリ名)
└── laradock
2つめのLaravelプロジェクトを作成する
上の状態から、laradock上でdocker-compose workspace bashでworkspaceに入ってcomposer コマンドで新しくプロジェクトを作成。
composer create-project laravel/laravel Laravelproject2 //新しくLaravelproject2を作成!
ただし、前回の記事を参考にプロジェクトを参考にした人は、workspaceに入るとその直下にアプリのフォルダが表示されている状態になっているはずだ。(前回の記事の手順8を参照)
laradockの.evnのAPP_CODE_PATH_HOSTで../Laravelprojectが指定されている為である。ここで、新たにプロジェクトを作ってしまうとこのプロジェクトの中に、新しくプロジェクトが作成されてしまう。
なので、ここでAPP_CODE_PATH_HOSTを元の状態に変更した状態で再度、workspaceにログインして再度コマンドを叩こう。.envを変更したら一応docker-compose stopでコンテナをストップして再度、起動させよう。
(ここまで記事を見てきたら各コンテナを起動するコマンドはなんとなく覚えているはず!わからないときは常にググろう。)
改めてコマンドをたたいて、新たなプロジェクトを作成する。また、今回は前回作ったLaravelprojectと差別化をするために、ver6.0で作成した。
composer create-project laravel/laravel Laravelproject2 "6.0.*" //新しくLaravelproject2を作成!
コマンドを叩くとフォルダ構造は以下のようになっているはずだ。
MyLaravelApp(どこに作っても、名前もなんでもOK、とりあえすデスクトップでも)
├── Laravelproject(自分の作りたいLaravelのアプリ名)
├── Laravelproject2(自分の作りたいLaravelのアプリ名)
└── laradock
ここまでできたら一旦おつかれさま!workspaecから抜けてちょっと、休憩しよう。(ターミナルでexitを打つと抜けられるぞ。)
laravel.conf.exampleをコピーしてそれぞれの.confファイルを作成する
では、再開!改めてlocalhostにアクセスしてみると、おそらく404で何も表示されないだろう。なぜなら、APP_CODE_PATH_HOSTが../になっているからだ。
その場合に、元のプロジェクト(Laravelproject)が表示されなくなるのではないかと心配するかもしれないが、その為にする設定が以下の方法である。
laradockのnginx/sites下にあるlaravel.conf.exampleをコピーしてそれぞれLaravelproject1.confとLaravelproject2.confを作成して中身を変えていく。VScodeなどのエディタから設定してもよいが、ターミナルに慣れるためにコードを打ち込んでいこう。
cd nginx/sites //laradockの中のnginxの中のsitesフォルダに移動する
cp laravel.conf.example Laravelproject.conf //雛形のlaravel.conf.exampleをコピーして、Laravelproject.confを作成
laravel.conf.example Laravelproject2.conf //雛形のlaravel.conf.exampleをコピーして、Laravelproject2.confを作成
そしたら、そのファイルの中身を変更していくl。servernameをLaravelproject1.test
その下の行はpublicの前にLaravelproject1と打つ。Laravelproject2も同じ手順で作業だ。
vimやviでターミナルからファイルを書き換える方法もあるが、自身がない人はVScodeなどのエディタで記述していこう。
これは何をやってるかと言うと、ブラウザでLaravelproject.testもしくはLaravelproject2.testと打って繋がるようにするためだ。書けたら、Macの方の設定をしなければならないMacのhostsファイルに以下を追加しよう。(隠しファイルを開くコマンドはコマンドシフト.だ)
念のため.hostsファイルはコピーしてデスクトップかどっかに置いとこう。
これでdocker-compose -d nginxでサーバーを起動してproject1.testと打ったらLaravelが表示されているはずだ。
前の記事を参考にしている人は、laradockの.envのAPP_HOST_のところのpublicの前にprojectの名前を追加したと思うがここを消して元に戻しておこう。書き換えたら、docker-compose stopでコンテナを止めて、その後再起動しよう。その後、それぞれLaravelproject.testとLaravelproject2.testにアクセスしてみよう。おそらくこれで動くはず。
プロジェクト事にDBを設定する。(phpmyadmin上で)
ここまで来たら、後もう一息。お次はデータベースの方だ。正直上まではうまくいったんだが、ここで詰まってしまった。
phpmyadminから直で作成する方法と、ターミナルからコマンドで作成していく方法があるが、最初は視覚的にわかりやすいphpmyadminから作っていこう。
docker-compose upでphpmyadminを起動してそこにmysql default secretで入る。ここにデータベースを2つ作っていく。ここで2つ作れれば楽なのだが、なぜだか作れない。そこで一旦phpmyadminを抜けてmysql root rootで入る。本当はrootで入るのはよろしくないらしい。(rootは最強の権限)
mysqlとrootとrootで入りこみ、データベースタブをクリックして、新しくデータベースを2つつくる。そして、それぞれに権限を与えてあげる。権限とはdefaltユーザーにもデータベースが見れる権限のことだ。そこでデータベースを2つ作成する。(LaravelprojectとLaravelproject2)
そしてユーザーアカウントタブを押してdefaultの右端のエクスポートを押すと何やら文章がでてくる。SQL文だ。このSQL文を元に、defaultユーザーに各DB(この場合、LaravelprojectとLaravelproject2)の権限を与えてあげる。
GRANT ALL PRIVILEGES ON データベース名.* TO default
@%
;
これで権限が与えられるので、一旦phpmyadminから抜けて再度defaultユーザーでログインしよう。
テーブルができているはずだ。(実際にはできているというより、defaultユーザーに権限が与えられてるから隠されず表示されている状態。)
ここまできたら後ちょっとだ。
Laravelプロジェクト側の.envのMySQLのDATABASE名のとこをそれぞれ修正しよう。
docker-compose stopでコンテナを止めて再起動して、ワークスペースに入ってそれぞれmigrateする。
そして、php artisan migrateでそれぞれのデータベースにテーブルができれば成功だ。
これで1つのlaradockで複数のプロジェクトが動くようになったぞ。DBの作成を今回は、phpmyadiminで設定したが、コマンドからDBを作成して権限を与える方法もあるので、そっちをやりたい人はググって。
手順まとめ
- Laravelプロジェクトを2つ作成する。
- 各プロジェクトの.confファイルを作成し、.hostsファイルを編集する。
- DBでプロジェクト事にDBを作成して、defaultユーザーに権限を与えてあげる。
注意点
- laradockとLaravelの.envのDBをしっかり揃えよう。ここをしっかり揃えないとmigrateできない。(migrateできないとDBにデータが送れないぞ。)
- hostsファイルはMacのファイル。ファインダーから探して必要な記述を追加しよう。
- laradock側の.envのAPP_CODE_PATH_HOSTを変更すると、ワークスペースに入った時のフォルダ構成が変わる。
そもそもなんでこんな面倒臭い方法を取ろうとしちゃったのだろうか。
正直、もう一つlaradockコピーして違うフォルダでプロジェクト作った方が早いと思うので(.env変更するだけだし)めんどい人はそっちの方法を使おう。
ふう、やっと整理できた〜!間違ってるとこもあるかもしれないので、見つけ次第随時整理していきます。