用 Laravel Sail 來建置 Laravel 開發環境
在建置 Laravel 的開發環境上,官方與非官方都有提供非常多的方式。
在 MacOS 上,有輕量級的開發環境 Laravel Valet,之前也有發過一篇文章簡單介紹如何使用。
而在 Windows 上,雖然沒有 Valet 可以使用,但依然有許多優秀的選擇。
例如 Laravel Homestead,整合非常多常用的軟體,但由於是安裝整個虛擬作業系統,所以除了有點肥之外,啟動速度也不盡人意。
跟 Valet 使用起來相當類似的 Laragon,不但輕巧方便,更可以隨意切換想要的 PHP 與 Nginx 的版本。
或是使用 Docker 來建置的 Laradock,除了整合非常多軟體,更可以依照需求只啟動需要的容器服務。
在 Laravel 8 推出後不久,官方也推出一個以 Docker 來建置開發環境的 Laravel Sail,使用起來非常簡單,本篇文章跟大家簡單介紹。
在使用 Laravel Sail 之前,電腦必須先安裝 Docker。
設定 Laravel Sail
首先在專案底下,使用 composer 安裝 Laravel Sail。
composer require laravel/sail --dev
接著使用 artisan 指令產出 docker-compose.yml。
php artisan sail:install
可以選擇想要使用的服務。
Which services would you like to install? [mysql]:
[0] mysql
[1] pgsql
[2] mariadb
[3] redis
[4] memcached
[5] meilisearch
[6] minio
[7] mailhog
[8] selenium
> 0,3,7
Sail scaffolding installed successfully.
之後就可以使用 docker 來建置開發環境了。
./vendor/bin/sail up
如果不想打那麼多字的話可以在 .bashrc 或是 .zshrc 中設定 alias(別名)。
alias sail='bash vendor/bin/sail'
這樣啟動開發環境只需要輸入 sail 就好,啟動之後如果想終止,可以使用 Ctrl + C 終止容器。
sail up
如果想要在背景執行,可以加上 -d
選項,即 Docker 原始提供的參數 -d, --detach
。
sail up -d
終止所有 Laravel Sail 所有服務容器。
sail stop
想要終止在背景執行的 Laravel Sail 並刪除所有服務容器的話。
sail down
如果想要對建立的容器進行調整的話,可以將 sail 的 docker-compose.yml 產出來。
php artisan sail:publish
此時專案底下就會多一個 docker 資料夾,底下會放置建置容器用的 Dockerfile 還有 php.ini 等設定檔案。
$ tree docker
docker
├── 7.4
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
└── 8.0
├── Dockerfile
├── php.ini
├── start-container
└── supervisord.conf
2 directories, 8 files
docker-compse.yml 中的 context 也會更動,從 ./vendor/laravel/sail/runtimes/8.0
會從改成 ./docker/8.0
。
build:
context: ./docker/8.0
dockerfile: Dockerfile
更動後,需要重新建立容器,這裡可以使用 build 的指令。
sail build --no-cache
使用 Laravel Sail 開發
想要連上 Laravel Sail 的 MySQL,在 .env 設定檔案有一個小地方需要注意。
DB_CONNECTION=mysql
# 因為連的是 container,DB_HOST 這裡不是填寫 IP 而是設定成 mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
...
# Redis 的連線也是同理
REDIS_HOST=redis
Laravel Sail 有一個很棒的地方是有整合 artisan 指令,你可以在 Laravel Sail 中執行 artisan 指令。
sail artisan migrate
除此之外還有整合 php 指令。
sail php --version
sail php script.php
甚至還有自動測試。
sail test
sail test --filter run_a_simple_test
還有很多功能這裡沒有提到,可以上官方文件查看,順帶一提,sail down 並無法清除資料庫的資料,如果想要完全清掉的話,可以使用 docker 的指令。
docker volume prune
Laravel Sail 啟動相當快速,也比較沒那麼肥,推薦給在 Windows 上想找個輕量開發環境的朋友。