これまで、開発環境にはxamppやDockerを使用していました。
今回、Dockerを簡易的に操作できるという「Laravel Sail」での開発環境構築を試してみます。
今回、開発環境を構築したのは以下の環境です。
- Windows 11 Home
- Ubuntu-22.04 WSL2
- Docker Desktop 4.15.0
- Laravel 9.52.0
- Laravel Sail 1.20
WindowsにUbuntuやDockerはインストール済みとします。
また、新規プロジェクトではなく、既存プロジェクトに適用してみました。プロジェクトソースはWindows上ではなく、Ubuntu上に展開されています。
Laravel Sailのインストール
最近、Laravelを新規インストールした場合、Sailはデフォルトで組み込まれているようですが、今回の古くから運用しているプロジェクトには含まれてなかったので、まずはパッケージをインストールします。
$ composer require laravel/sail --dev
次に、以下のコマンドでインストールします。
$ php artisan sail:install
すると対話型で、必要なサービスが問われます。今回はmariadbを選択します。
Which services would you like to install? [mysql]: [0] mysql [1] pgsql [2] mariadb [3] redis [4] memcached [5] meilisearch [6] minio [7] mailpit [8] selenium [9] soketi > 2 Sail scaffolding installed successfully. ... Sail images installed successfully. ... Sail build successful.
この処理には少々時間がかかります。
処理が完了すると、Dockerの設定ファイル「docker-compose.yml」ファイルが生成されます。
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mariadb
mariadb:
image: 'mariadb:10'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sail-mariadb:/var/lib/mysql'
- './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
networks:
- sail
healthcheck:
test:
- CMD
- mysqladmin
- ping
- '-p${DB_PASSWORD}'
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-mariadb:
driver: local
セットアップは以上です。
Laravel Sailを起動
それでは、実際にSailを起動してみます。
$ ./vendor/bin/sail up
無事起動する事ができました。
ブラウザから「http://localhost」でアプリケーションにアクセスできます。
停止にはキー「Control + C」を入力します。
ここで、コマンドを簡略化するためにエイリアスに追加しておきます。
$ vim ~/.bashrc
以下を追記します。
alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'
シェルを再読み込みします。
$ source ~/.bashrc
そうすると、先ほどのSail起動コマンドが、以下で実行できます。
$ sail up
さらに、オプションで「-d」を付加することで、バックグラウンドで実行できます。
$ sail up -d
停止する際は、以下のコマンドを実行します。
$ sail stop
PHPダウングレード
デフォルトではコンテナはPHP 8.2で構成されていますが、本番環境に合わせてPHP 8.0を使用したいので、以下のように「docker-compose.yml」を修正します。
ランタイムに合わせてイメージ名を修正しておきます。
...
context: ./vendor/laravel/sail/runtimes/8.0
...
image: sail-8.0/app
...
コンテナイメージを再構築します。
$ sail build --no-cache
コンテナを起動して確認してみます。
$ sail up -d
$ sail php -v
PHP 8.0.28 (cli) (built: Feb 14 2023 18:32:57) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.28, Copyright (c) Zend Technologies
with Zend OPcache v8.0.28, Copyright (c), by Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
PHPのバージョンが8.0になってる事が確認できました。
phpMyAdminコンテナを追加
DBの操作にphpMyAdminを使いたいので、コンテナを追加するために「docker-compose.yml」に以下を追記します。
...
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- 8888:80
environment:
PMA_HOST: mariadb
PMA_USER: '${DB_USERNAME}'
PMA_PASSWORD: '${DB_PASSWORD}'
networks:
- sail
...
コンテナを起動してブラウザに「http://localhost:8888」を入力すると、phpMyAdminの管理画面にアクセスできます。
コメントする