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

參考資料

sharkHead
written by
sharkHead

後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

5 則留言
AlanSyue AlanSyue

Laravel Sail 好方便,感謝你的文章分享~

sharkHead sharkHead

不客氣,也謝謝你的留言 😃

訪客

您好,我開啟了sail 後終端機提示 INFO Server running on [http://0.0.0.0:80]. 但是點進去卻顯示。

無法連上這個網站http://0.0.0.0/ 的網頁可能暫時離線,或是已經遷移到另一個網址。 ERR_ADDRESS_INVALID

sharkHead sharkHead

Hello

因為我不太知道你用的作業系統是什麼,所以比較難判斷問題。

假設你是在 Windows 的 WSL 上面跑 Docker 的話,可能要看看 WSL 本身的 IP 是什麼。

服務應該確實跑起來了,但是用 0.0.0.0 是連不上的。

訪客

我有嘗試照著做一次,遇到一個wwwgroup沒設定值的問題 https://stackoverflow.com/questions/67224488/laravel-sail-wont-build-on-ubuntu-20-04-groupadd-invalid-group-id-sail 照著做就解決了

新增留言
編輯留言