Laravel 8.x Sail 文件

xtheme發表於2021-01-06

介紹

Laravel Sail 是一個輕量級的命令列介面, 用於與 Laravel 的預設 Docker 開發環境進行互動. Sail 為使用 PHP, MySQL 和 Redis 構建 Laravel 應用程式提供了一個很好的起點, 而無需事先具有 Docker 經驗.

Sail 的核心是 docker-compose.yml 檔案和儲存在專案根目錄的 sail 指令碼. sail 指令碼為 CLI 提供了便捷的方法, 可用於與 docker-compose.yml 檔案定義的 Docker 容器進行互動.

Laravel Sail 支援 macOS、Linux 和 Windows (透過 WSL2)。

安裝 & 設定

Laravel Sail 會隨著所有全新的 Laravel 應用程式一起自動安裝, 因此你可以立即的開始使用它. 要了解如何建立一個新的 Laravel 應用程式, 請查閱適合您目前作業系統的 安裝文件.

補充: 此處是指一開始使用 Laravel 8.x 建立應用, 若您還在使用先前的版本, 或是由先前的版本升級至 8.x, 請參照下述步奏安裝 Sail 到您當前的應用.

安裝 Sail 到當前應用中

假如您對使用 Sail 在您現有的 Laravel 應用感到興趣, 您可以透過 Composer 套件管理簡單的安裝 Sail. 當然, 這些步驟是假設您現有的本地開發環境允許你安裝 Copmoser 依賴:

composer require laravel/sail --dev

在 Sail 完成安裝後, 您可以執行 sail:install Artisan 命令. 這個命令將會發布 Sail 的 docker-compose.yml 檔案到您應用程式的根目錄:

php artisan sail:install

最後, 您可以開始 Sail. 要繼續學習如何使用 Sail, 請接著閱讀本文擋的其餘部份:

./vendor/bin/sail up

配置 Bash 別名

預設情況下, Sail 命令使用 vendor/bin/sail 指令碼呼叫, 該指令碼已包含在所有新建的 Laravel 應用程式中:

./vendor/bin/sail up

但與其重複的輸入 vendor/bin/sail 來執行 Sail 命令, 您可能會希望配置一個 Bash 別名方便你更容易的執行 Sail 命令:

alias sail='bash vendor/bin/sail'

補充: 透過 vim ~/.bashrc 加入別名, 可以讓別名常駐

一旦配置了 Bash 別名, 您可以透過簡單的鍵入 sail 來執行 Sail 命令. 本文接下來的示例都假定您已經配置了此別名:

sail up

啟動 & 停止 Sail

Laravel Sail 的 docker-compose.yml 檔案中定義了各種 Docker 容器, 這些容器可以一起工作幫助您建構 Laravel 應用程式. 每一個容器都定義在 docker-compose.yml 檔案中的 services 配置內. laravel.test 容器是為應用程式提供服務的主要應用程式容器.

在開始 Sail 之前, 您應該確認沒有其他的網站伺服器或資料庫正執行在您的本地計算機上. 要開始啟用 docker-compose.yml 檔案中定義的所有 Docker 容器, 請執行 up 命令:

sail up

要在後臺啟動所有 Docker 容器, 您可以在 “分離” 模式下啟動 Sail:

sail up -d

啟動應用程式的容器後, 您可以在 Web 瀏覽器中訪問專案: http://localhost.

要停止所有容器, 只需按 Control + C 即可停止容器的執行. 如果容器在後臺執行, 您可以使用 down 命令:

sail down

執行命令

使用 Laravel Sail 時, 應用程式在 Docker 容器中執行, 並且與本地計算機隔離. 不過 Sail 提供了一種針對應用程式執行各種命令的便捷方法, 例如任意的 PHP 命令, Artisan 命令, Composer 命令和 Node / NPM 命令.

當您閱讀 Laravel 文件時, 您可能經常看到在未使用 Sail 的狀況下執行 Composer, Artisan 或是 Node / NPM 命令. 以下示例假設您已經在本地計算機上安裝上述工具. 如果您打算使用 Sail 建構您的本地開發環境 , 您需要改用 Sail 執行這些命令:

# 在本地執行 Artisan 命令...
php artisan queue:work

# 在 Laravel Sail 中執行 Artisan 命令...
sail artisan queue:work

執行 PHP 命令

PHP 命令可以使用 php 命令執行. 當然, 這些命令將使用為您的應用程式配置的 PHP 版本執行. 要了解更多關於 PHP 版本可用的 Laravel Sail 資訊, 請查閱 PHP 版本文件:

sail php --version

sail php script.php

執行 Composer 命令

Composer 命令可以使用 composer 命令執行. Laravel Sail 的應用程式容器中已經安裝 Composer 2.x:

sail composer require laravel/sanctum

在已執行的應用中安裝 Composer 依賴

假如您與團隊一起開發應用程式, 您也許不是最初建立 Laravel 應用程式的人. 因此, 當您克隆應用程式的倉庫到本地計算機後, 將缺少安裝 Composer 依賴也包含了 Sail.

您可以導航到應用程式目錄下並執行以下命令來安裝應用所需的依賴, 這個命令使用一個包含 PHP 與 Composer 的小型 Docker 容器進行應用程式依賴的安裝:

docker run --rm
    -v $(pwd):/opt
    -w /opt
    laravelsail/php80-composer:latest
    composer install

執行 Artisan 命令

Artisan 命令可以使用 artisan 命令執行:

sail artisan queue:work

執行 Node / NPM 命令

Node 命令可以使用 node 命令執行, 而 NPM 命令可以使用 npm 命令執行:

sail node --version

sail npm run prod

與資料庫互動

MySQL

您可能已經注意到, 應用程式的 docker-compose.yml 檔案包含一個 MySQL 容器的條目. 該容器使用了 Docker volume, 以便即使在停止和重新啟動容器時依然可以持久儲存資料庫中儲存的資料. 另外, 當 MySQL 容器啟動時, 它將確儲存在名稱與您的 DB_DATABASE 環境變數的值匹配的資料庫.

啟動容器後, 您可以透過將應用程式 .env 檔案中的 DB_HOST 環境變數設定為 mysql 來連線到應用程式中的 MySQL 例項.

要從本地計算機連線到應用程式的 MySQL 資料庫, 您可以使用圖形資料庫管理應用程式, 例如 TablePlus. 預設情況下,可以從 localhost 的 3306 埠訪問 MySQL 資料庫.

Redis

應用程式的 docker-compose.yml 檔案也包含 Redis 容器. 該容器使用 Docker volume, 以便即使在停止和重新啟動容器後, Redis 資料中儲存的資料也可以持久儲存. 啟動容器後, 可以透過將應用程式 .env 檔案中的環境變數 REDIS_HOST 設定為 redis 來連線到應用程式中的 Redis 例項.

要從本地計算機連線到應用程式的 Redis 資料庫, 可以使用圖形資料庫管理應用程式, 例如 TablePlus. 預設情況下, 可以從 localhost 的 6379 埠訪問 Redis 資料庫.

執行測試

Laravel 提供了出色的開箱即用測試, 您可以使用 Sail 的 test 命令執行應用程式的 功能和單元測試. 任何 PHPUnit 可接受的 CLI 選項都可以透過 test 命令傳遞:

sail test

sail test --group orders

Sail test 命令相當於執行 Artisan test 命令:

sail artisan test

Laravel Dusk

Laravel Dusk 提供了非常優雅的, 易於使用的瀏覽器自動化測試 API. 有了 Sail, 進行瀏覽器測試更加方便了, 甚至不用在你的本地電腦上安裝 Selenium 或者任何其他工具. 要開啟這項功能, 請在 docker-compose.yml 檔案中取消 Selenium 服務註釋:

selenium:
    image: 'selenium/standalone-chrome'
    volumes:
        - '/dev/shm:/dev/shm'
    networks:
        - sail

下一步, 請確認 docker-compose.yml 檔案中的 laravel.test 服務配置 depends_on 是否包含了 selenium 條目:

depends_on:
    - mysql
    - redis
    - selenium

最後, 您可以透過啟動 Sail 並執行 dusk 命令來進行 Dusk 測試:

sail dusk

預覽電子郵件

Sail 預設的 docker-compose.yml 檔案中包含了一個服務條目 MailHog. MailHog 會在你本地開發的過程中攔截應用程式傳送的電子郵件, 並提供一個便捷的 Web 介面, 方便您透過瀏覽器預覽電子郵件. 使用 Sail 時, MailHog 預設的主機名稱是 mailhog 並使用 1025 埠:

MAIL_HOST=mailhog
MAIL_PORT=1025

當 Sail 執行時, 您可以透過 http://localhost:8025 訪問 MailHog 的 Web 介面.

容器 CLI

有時候, 你可能想要在應用容器中開啟一個 Bash 會話。 這時可以執行 shell 命令,然後你就可以訪問容器中的檔案和已安裝的服務了, 同時還可以執行其他任意指令:

sail shell

想開啟一個新的 Laravel Tinker 會話, 你可以執行 tinker 命令:

sail tinker

PHP 版本

Sail 目前支援透過 PHP 8.0 或 PHP 7.4 為您的應用程式提供服務. 想更改應用程式使用的 PHP 版本, 請在 docker-compose.yml 檔案定義的容器 laravel.test 中調整 build 定義:

# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0

# PHP 7.4
context: ./vendor/laravel/sail/runtimes/7.4

此外, 你如果想更新你的映象名稱來反映當前使用的 PHP 版本, 您可以在 docker-compose.yml 檔案中調整 image 欄位:

image: sail-8.0/app

在修改過 docker-compose.yml 檔案之後, 您應該要重建容器映象然後重啟 Sail:

sail build --no-cache

sail up

共享您的網站

有時後您可能需要公開您的網站分享給同事或是測試應用與網路掛鉤的整合. 想共享您的網站時, 可以使用 share 命令. 當您執行此命令後, 將會獲取一個隨機的網址, 例如 laravel-sail.site 用來訪問您的應用程式:

sail share

假如您想自定子域名, 您可以在執行 share 命令時加上 subdomain 引數:

sail share --subdomain=my-sail-site

share 命令由 Expose 提供, 一個開源的網路隧道服務 BeyondCode.

定製化

因為 Sail 就是 Docker, 所以你可以自由的定製任何內容, 使用 sail:publish 命令可以釋出 Sail 自己的 Dockerfile 方便您定製:

php artisan sail:publish

執行這個命令後, 在你的專案根目錄下會生成一個 docker 目錄, 裡面包含有關你應用的 Dockerfile 和其他配置檔案. 當您自行定製 Sail 配置之後, 您必須使用 build 命令來重新構建容器:

sail build --no-cache
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章