今回はLaravel環境をDockerで構築してみます。
前提
PCにGitとDockerのソフトウェアがインストール済み
ソフトウェア構成
PHP(ver. 8.3〜7.3)
Laravel(ver. 指定可能 or 既存)
Nginx
Mysql(ver. 8.0)
コンテナ構成
コンテナの構成は一般的なWeb3層の形で構築します。
infra
├── app
├── db
└── web
手順
以下の手順でコマンドを実行してください。
まずはdocker設定ファイルをクローンします。
$ git clone git@github.com:juno1140/docker-laravel.git .
PHPのバージョンはデフォルトで8.3を利用するようにしていますが、変更する場合はdocker-compose.ymlのapp>build>targetの「php83」を適宜変更してください。変更時は./infra/app/Dockerfileの指定のバージョンのコメントアウトを解除してください。
Laravel11以降はPHP8.2以上でないと動かないのでご注意ください。
問題なければ以下のコマンドを実行します。
$ docker-compose up -d
新規でLaravelプロジェクトを作成する場合
# 最新バージョン
$ docker-compose exec app composer create-project --prefer-dist laravel/laravel .
# バージョン指定の場合
$ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=6.*" .
ブラウザでhttp://localhostにアクセスするとLaravelの初期画面が表示されます。
もしも、下記のようなエラーが出た場合。
The stream or file "/var/www/storage/logs/laravel.log"
以下のコマンドを実行します。
$ docker-compose exec app chmod 777 -R storage
既存のLaravelプロジェクトの場合
既存のプロジェクトがある場合はsrcディレクトリ直下にクローンしてください。
クローンしたらcomposer installします。
$ git clone git@github.com:juno1140/vuesplash.git ./src
$ docker-compose exec app composer install
$ docker-compose exec app cp .env.example .env
$ docker-compose exec app php artisan key:generate
$ docker-compose exec app php artisan storage:link
composer installでエラーが出る場合はPHPのバージョンやパッケージをご確認ください。
ブラウザでhttp://localhostで表示されます。
データベースの接続とmigration
.envのDB情報を以下のように編集します。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password
編集したらマイグレーションを実行しましょう。
$ docker-compose exec app php artisan migrate
エラーが出る場合はキャッシュクリア(ccコマンド)などお試しください。
これでDB接続とテーブルの作成が完了です。
コンテナへのアクセス
各コンテナへは以下のコマンドで入ることができます。
# appコンテナ
$ docker-compose exec app bash
# webコンテナ
$ docker-compose exec web sh
# dbコンテナ
$ docker-compose exec db bash
出るときはCtrl + Dもしくはexitコマンドで出れます。
おまけ
上記で一通りの環境構築は完了です。
以下、おまけとしてLaravelを使う上での便利機能をご紹介します。
alias
今回のLaravel環境では初期状態でコンテナ内でaliasの設定をしています。
例として、php artisanコマンドはコンテナ内ではartで実行できます。
$ art route:list
その他にも、キャッシュクリアはccでできるので便利です。
aliasの一覧はコマンドラインでaliasコマンドを実行してご確認ください。
追加・変更したい場合は、./infra/app/alias.shファイルを更新してdocker-compose build>docker-compose up -dすれば反映されます。
viteでのnpm run dev設定
これまでjsのモジュールバンドラー(複数のファイルを1つにまとめるツール)はwebpackでしたが、Laravel9からviteに変わりました。
viteでnpm run dev(vite)を実行した状態で、ファイルを編集するとホットリロードで瞬時に反映されるようになります。
npm run devの実行はデフォルトで5173ポートで動きます。ただし、今回のdocker環境ではappコンテナで5173ポートが解放されていないため、設定が必要になります。
docker-compose.ymlファイルに下記のコード(ports)を追加してください。
app:
build:
context: .
dockerfile: ./infra/app/Dockerfile
target: php83
volumes:
- ./src:/var/www
ports: # ⇦ここを追加
- "5173:5173" # ⇦ここを追加
working_dir: /var/www
次に、package.jsonにも下記のように–hostを追加します。
"scripts": {
"dev": "vite --host",
"build": "vite build"
},
設定はこれだけです。docker-compose up -dをし直して、appコンテナに入り、npm run devしてみましょう。
画面の表示自体はhttp://localhostのままで問題ありません(ポート番号の指定は不要)。
resources/js/app.jsなどをすぐに画面に反映されます。
ちなみに本番環境へ上げる場合はnpm run buildを実行してください。
まとめ
今回はdockerでLaravel環境を構築してみました。
dockerに関する詳細の説明は省いてしまったので、ご興味ある方は調べてみてください。
また、Laravelの複数プロジェクトの構築方法もご紹介しているのでそちらも参考にしてください。