⚡️
WSL環境で爆速! Dockerを活用したLaravel Sailのセットアップ方法
はじめに
WSL 環境で Laravel-Sail を使って開発していると遅くて困ることがありました。そこで、解決策を調査しパフォーマンス向上を実現する方法を見つけました。その手順をご紹介します。また、phpMyAdmin の環境構築についても触れています。
結論
Windows 上でなく、Linux 環境(WSL)に Laravel プロジェクトを設置し動作させることで、問題を解決しました。この方法により、リソースの効率的な利用や遅延の軽減を実現できました。
前提条件
WSL のバージョンと Docker のバージョンは次の通りです。
WSL バージョン
wsl --list --verbose
# 出力
NAME STATE VERSION
* Ubuntu-22.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
Docker のバージョン
docker --version
# 出力
Docker version 20.10.17, build 100c701
1.プロジェクトの作成
必ず Ubuntu 内で作業を行ってください。以下はプロジェクトの作成手順です。
ubuntu 環境のホームディレクトリ(home)に移動
root@user:~# cd /home/Laravel-Project
WSL 内で Laravel プロジェクトを作成
「example-app」はプロジェクト名です。お好みで変更してください。
curl -s https://laravel.build/example-app | bash
2. WSL 内で VSCode を起動してプロダクトを立ち上げる
Laravel-Project ディレクトリ内の example-app ディレクトリに移動し、VS Code で開きます。これにより、VS Code を WSL 環境内で使用しながら、example-app プロジェクトをエディタで編集できます。
root@user:~/Laravel-Project# cd example-app
root@user:~/Laravel-Project/example-app# code .
3. phpMyAdmin docker-compose.yml 追記
以下がカスタマイズされた docker-compose.yml ファイルです。phpMyAdmin の追加により、MySQL データベースの管理を簡単に行えます。
docker-compose.yml
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}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
- meilisearch
- mailpit
- selenium
mysql:
image: 'mysql/mysql-server:8.0'
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: 1
volumes:
- 'sail-mysql:/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
# 追記-------------------------------
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
PMA_USER: "${DB_USERNAME}"
PMA_PASSWORD: "${DB_PASSWORD}"
PMA_HOST: mysql
networks:
- sail
# -----------------------------------
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test:
- CMD
- redis-cli
- ping
retries: 3
timeout: 5s
meilisearch:
image: 'getmeili/meilisearch:latest'
ports:
- '${FORWARD_MEILISEARCH_PORT:-7700}:7700'
environment:
MEILI_NO_ANALYTICS: '${MEILISEARCH_NO_ANALYTICS:-false}'
volumes:
- 'sail-meilisearch:/meili_data'
networks:
- sail
healthcheck:
test:
- CMD
- wget
- '--no-verbose'
- '--spider'
- 'http://localhost:7700/health'
retries: 3
timeout: 5s
mailpit:
image: 'axllent/mailpit:latest'
ports:
- '${FORWARD_MAILPIT_PORT:-1025}:1025'
- '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
selenium:
image: selenium/standalone-chrome
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local
sail-redis:
driver: local
sail-meilisearch:
driver: local
4. Laravel のタイムゾーンを日本に変更
Laravel のタイムゾーンを日本に設定することで、日本時間での正確な日付と時刻を取得できます。
以下、config/app.php ファイルを以下のように設定してください。
config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
5.Laravel Sail の起動と停止
起動コマンド
./vendor/bin/sail up -d
Laravel へアクセス
Permission エラー解決
Permission エラーが発生したので解決策を残させて頂きます。
エラーログ
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:
file_put_contents(/var/www/html/storage/framework/views/19d1ca22cd8db231f88e0685e9c3a20e.php): Failed to open stream: Permission denied Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}}
権限を追加 して 解決
chmod -R 775 storage bootstrap/cache
phpMyAdmin へアクセス
停止コマンド
./vendor/bin/sail down
6. まとめ
お疲れ様でした!! 私はこの開発手順でサクサク動くようになりました。
ここからは、自由にカスタマイズしながら楽しく Laravel 開発を進めていきましょう!!
Discussion