Lumen に Laravel Sail をインストールしたときの作業手順のメモ
検証環境
Windows11 Home Edition (version 24H2) D:\>wsl --version WSL バージョン: 2.3.26.0 カーネル バージョン: 5.15.167.4-1 WSLg バージョン: 1.0.65 MSRDC バージョン: 1.2.5620 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26100.1-240331-1435.ge-release Windows バージョン: 10.0.26100.2605 # installed ubuntu version Ubuntu 22.04.4 LTS (Jammy Jellyfish) # docker Docker version 27.4.1, build b9d17ea Docker Compose version v2.32.1 github.com/docker/buildx v0.19.3 48d6a39
Ubuntu 環境に devbox をインストール
下記コマンドで devbox
をインストール
$ curl -fsSL https://get.jetify.com/devbox | bash
正常にインストールされたか確認
$ devbox version 0.13.7
$ devbox help Instant, easy, predictable development environments Usage: devbox [flags] devbox [command] Available Commands: add Add a new package to your devbox auth Devbox auth commands cache Collection of commands to interact with nix cache completion Generate the autocompletion script for the specified shell create Initialize a directory as a devbox project using a template generate Generate supporting files for your project global Manage global devbox packages help Help about any command info Display package info init Initialize a directory as a devbox project install Install all packages mentioned in devbox.json list List installed packages rm Remove a package from your devbox run Run a script or command in a shell with access to your packages search Search for nix packages secrets Interact with devbox secrets in jetify cloud. services Interact with devbox services. shell Start a new shell with access to your packages shellenv Print shell commands that create a Devbox Environment in the shell update Update packages in your devbox version Print version information Flags: -h, --help help for devbox -q, --quiet suppresses logs Use "devbox [command] --help" for more information about a command.
Lumen のプロジェクトを作成
Lumen プロジェクトのディレクトリを作成して php
と composer
をインストール
$ mkdir lumen-project $ cd lumen-project $ devbox init $ devbox add php82 php82Packages.composer
composer
を使って Lumen をインストール
$ devbox shell $ composer create-project laravel/lumen ./tmp $ mv ./tmp/* ./tmp/.* . $ rmdir ./tmp $ php artisan --version Laravel Framework Lumen (10.0.4) (Laravel Components ^10.0)
Laravel Sail のインストール
composer
を使って Laravel Sail をインストール
$ composer require laravel/sail --dev
boostrap/app.php
に下記を追加
if(env('APP_ENV') == 'local')
{
$app->register(Laravel\Sail\SailServiceProvider::class);
}
sail
関連の artisan
コマンドが追加されているか確認
$ php artisan list . . . sail sail:add Add a service to an existing Sail installation sail:install Install Laravel Sail's default Docker Compose file sail:publish Publish the Laravel Sail Docker files . . .
php artisan sail:install
を実行する
$ php artisan sail:install --devcontainer
Laravel Sail のカスタマイズ
インストール直後の状態では HTTP サーバーが起動しないためカスタマイズを行う
docker-compose.yml
laravel.test
の environment
に SUPERVISOR_PHP_COMMAND
を追加
--- a/docker-compose.yml 2025-01-02 17:27:54.006158767 +0900 +++ b/docker-compose.yml 2025-01-02 17:14:04.886161856 +0900 @@ -17,6 +17,7 @@ XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' IGNITION_LOCAL_SITES_PATH: '${PWD}' + SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS -S 0.0.0.0:80 -t /var/www/html/public" volumes: - '.:/var/www/html' networks:
.env
WWWGROUP
と WWWUSER
を追加
WWWGROUP=1000 WWWUSER=1000
動作確認
下記コマンドで sail
を立ち上げる
$ ./vendor/bin/sail up -d
http://localhost にアクセスして以下のレスポンスが返れば成功
Lumen (10.0.4) (Laravel Components ^10.0)
トラブルシューティング
artisan sail:publish
が動作しない
artisan sail:publish
は内部で artisan vendor:publish
を呼び出しているため Lumen では動作しない
下記手順で artisna sail:publish
と同じ結果が得られる
vendor/laravel/sail/
以下の docker 関連ファイルを ./docker/
以下へコピー
$ mkdir ./docker $ cp -rf ./vendor/laravel/sail/runtimes/* ./docker/ $ cp -rf ./vendor/laravel/sail/database/* ./docker/
必要に応じて docker-compose.yml
のパス指定を変更する
--- a/docker-compose.yml 2025-01-02 18:36:41.176152586 +0900 +++ b/docker-compose.yml 2025-01-02 18:37:11.586153133 +0900 @@ -1,7 +1,7 @@ services: laravel.test: build: - context: './vendor/laravel/sail/runtimes/8.4' + context: './docker/8.4' dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}'