用 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

首先在專案底下,使用 composer 安裝 Laravel Sail

composer require laravel/sail --dev

接著使用 artisan 指令產出 docker-compose.yml

php artisan sail:install

之後就可以使用 docker 來建置開發環境了

./vendor/bin/sail up

Laravel 預設整合以下工具

  • php enviroment
  • mailhog
  • mysql
  • redis

如果不想打那麼多字的話可以在 .bashrc 或是 .zshrc 中設定 alias(別名)

alias sail='bash vendor/bin/sail'

這樣啟動開發環境只需要輸入

sail up

啟動之後如果想終止,只需要在終端機上使用 Ctrl + C 終止程序即可
如果想要在背景執行,可以加上 -d 選項

sail up -d

想要終止在背景執行的 Laravel Sail 並刪除 container 的話

sail down

想要連上 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 上想找個輕量開發環境的朋友

 

參考文件
Laravel Sail

sharkHead 後端工程師,稍微擅長 Laravel、Python 與 Google
對於前端有興趣,無奈沒什麼慧根