久々にLaravelを使う(前回使ったのは6系だったな?)ので、備忘録を残します!
今回はDockerを使って環境を構築してみたいと思います!
環境
- WSL2
- Laravelは11系を使用
- PHPは8.2系にアップデート済み
- DockerはDocker Desktop for Windowsを利用
PHPが7系で8系にアップデートしたい方はこちらを参考にしてください
Laravelプロジェクトの作成
まずはcomposerを使ってLaravelプロジェクトの作成を行います。
開発を行うディレクトリに移動して次のコマンドを実行します。
composer create-project laravel/laravel hoge-app
※WSL環境で開発を行う場合、プロジェクト作成の場所は結構大事になってきます! 推奨は~/
以下です!
理由に関してはこちらの記事を参照
Laravel Sailのインストール
Laravel Sailとは、Laravelの開発環境をDockerを利用して簡単にセットアップできるツールです。
これを入れる事により、DockerでLaravelを動かすために必要なものを全て入れてくれて、Dockerの知識がなくても簡単にLaravelの開発環境を準備することができます。
インストールするために作成したプロジェクトにcd hoge-app
で移動します。
その後、Laravel Sailをインストールします。
php artisan sail:install
Which services would you like to install?
と聞かれるので該当するものを選びましょう!今回はmysql
を選択しました!
プロジェクトを起動してみる
Laravel sailのインストールが無事完了すると次のような画面が表示されます。
./vendor/bin/sail up
./vendor/bin/sail artisan migrate
ここにあるように、これらのコマンドを実行します。
まずはプロジェクトの立ち上げるために
./vendor/bin/sail up
を実行します。
このコマンドでDockerコンテナが立ち上がらり、Laravelの開発に必要になるWebサーバーやデータベースなどのサービスが実行されます!
問題がなければDocker Desktopの方でも該当プロジェクトのstatusがRunnningとなり起動していることを確認できると思います!
マイグレーションを実行
次にマイグレーションを実行するために
./vendor/bin/sail artisan migrate
を実行します!
先ほどコマンドを実行した画面はログがでているので、新しくターミナルを開きそこで実行してください。
ポートの変更
これで通常localhostにアクセスするとLaravelの画面が表示すると思うのですが、私の場合WSLでApacheなどのwebサーバーがすでにあるため、localhostにアクセスしてもこのプロジェクトが表示されることがありません。
なので、このプロジェクトのポート番号を設定してあげる必要があります。
具体的には
- docker-compose.yml
- .env
の2つのファイルで設定を追加します
docker-compose.ymlの変更
こちらのファイルのservices.laravel.test.ports
の項目を探し任意のポート番号に変更します
デフォルトでは
'${APP_PORT:-80}:80'
となっていると思うので、この-80
の部分を任意の数値に変えます
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.3
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.3/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-8888}:80'
.envに追加
.envには新たにポートの設定を追加します。
docker-compose.ymlで設定したポート番号と同じ番号を設定してください!
APP_PORT=8888
コンテナの再起動
ここまで設定したらSailコンテナを再起動する必要があります!
コンテナの停止と起動は
./vendor/bin/sail down
./vendor/bin/sail up
でしたね!
ここではこれまでの順序通りにやっていたとしてもう少し詳しく説明します。
先ほど./vendor/bin/sail up
で開いていたターミナルを開き、Ctrl + c
で実行を中断させましょう。
そうすると
Gracefully stopping... (press Ctrl+C again to force)
[+] Stopping 2/2
✔ Container hoge-app-laravel.test-1 Stopped 0.8s
✔ Container hoge-app-mysql-1 Stopped
となるはずです。
次にコンテナを停止させます。
./vendor/bin/sail down
でSailコンテナを完全に停止させます。
./vendor/bin/sail down
[+] Running 3/3
✔ Container hoge-app-laravel.test-1 Removed 0.0s
✔ Container hoge-app-mysql-1 Removed 0.0s
✔ Network hoge-app Removed
となったら完了です。
その後、再度コンテナを起動します
./vendor/bin/sail up
を実行します。
補足ですが、
./vendor/bin/sail up -d
のように末尾に-d
を付けることにより、バックグラウンドで実行(デタッチモード)することも可能です!
ログなどを見たい場合には-d
を付けないで実行し、ターミナルをそのまま他の作業でも使いたい場合には-d
をつけて実行するといいと思います!
その後、localhost:8888
にアクセスしてLaravelの画面が表示されたら無事作業完了です!
./vendor/bin/sail
って打つの面倒くさい
ここまで作業してきて思った方いるでしょう、そう、./vendor/bin/sail
って毎度入力するの面倒くさい・・・
そんな方に朗報です、エイリアスを登録しましょう!
ご自身の環境に合わせて.bashrc
や.zshrc
などに次のエイリアスを登録します
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
これを追加すると、今まで./vendor/bin/sail up
と入力していたのが、sail up
で完結します!
.zshrc
などを更新したらsource ~/.zshrc
をして再読み込みをするのをお忘れなく!
終わりに
初Dockerだったのですが、ここまで簡単に構築できてびっくりです。
逆に、Dockerの設定を自分で全くしていないので、これを自分で設定しなければならないとなると、ちょっと怖いですね!
今後の課題ということで、やりながら覚えていきます!