使用 Laravel Sail 新增和開發 Laravel Octane 應用(相容 Debug)

微波爐發表於2022-03-15

本文原創,轉載請註明出處。

我寫的其它關於 Laravel Sail 內容:使用 PHPStorm 來開發和 Debug Laravel Sail 專案

使用 Laravel Sail 新增和開發 Laravel Octane 應用(相容 Debug)

Laravel Sail 為我們提供了基於 Docker 的開發環境,Laravel Octane 可以顯著提升我們的 Laravel 應用的效能,那我們應該如何使用 Laravel Sail 來開發我們的 Laravel Octane 應用呢?

本文假設本地已經擁有一個 Laravel Sail 專案且已經能夠正常啟動容器進行開發,將在此基礎上為其安裝 Laravel Octane 並使其能夠在 Sail 容器中執行。

建立 sail 命令別名,將用 sail 來代替 vendor/bin/sail

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

啟動 sail 容器

sail up -d

安裝 Octane

sail composer require laravel/octane

由於 Sail 容器中預設安裝 php-swoole 擴充套件,所以我們無需再手動為容器配置 PHP 擴充套件,直接執行 Octane 的安裝指令即可:

sail php artisan octane:install

在安裝的過程中,選擇 swoole 安裝方法

image-20220315000952661

在專案根目錄的 docker-compose.yml 檔案中開放 8000 埠,如果你的專案根目錄沒有這個檔案,則需要執行以下命令讓 Sail 釋出 Docker 檔案

sail artisan sail:publish

docker-compose.yml 中開放 8000 埠

...
services:
    laravel.test:
        ...
        ports:
            - '${APP_PORT:-80}:80'
            # 此處新增 8000 埠
            - '8000:8000' 
        ...

由於 Laravel Octane 啟動後,應用將常駐記憶體,無法及時地根據檔案的修改重新解釋我們的應用,所以需要監聽檔案的修改,在程式碼變更時重新解釋。

監聽檔案修改需要 Chokidar 檔案監視庫

sail npm install --save-dev chokidar

Sail 容器中是如何維持 PHP 程式的?

開啟專案根目錄下的 /docker/8.1/Dockerfile

若找不到檔案請使用 sail artisan sail:publish 釋出檔案

docker 資料夾內有針對不同版本的 PHP 配置不同的容器,具體執行哪個版本是看 docker-compose.yml

...
services:
    laravel.test:
        build:
            context: ./docker/8.1 # 此處即為 Dockerfile 所在資料夾

在 Dockerfile 中可以看到如下的指令

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

Supervisord 是一款程式管理工具,主要功能是保護我們的程式,它將在後臺啟動我們需要的程式,並防止其被作業系統中斷或者在中斷後迅速重啟。此處的 supervisord.conf 即為 Supervisord 的配置檔案。根據指令,我們可以知道 Sail 是在 Docker 容器構建(build)時將 Dockerfile 同目錄下的 supervisord.conf 複製進容器中 Supervisord 應用的目錄中。

在同目錄下的 start-container 檔案中我們也可以看到 sail 在啟動容器時將執行以下 Supervisord 指令來根據配置檔案啟動我們的程式。

/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf

所以我們要修改的內容就在 supervisord.conf 中,開啟檔案,此處便是容器執行的指令,文件建議的方法是直接修改這條指令,但是這將導致無法使用 PhpStorm 進行 Debug,所以我們的思路是讓容器同時啟動和守護兩個程式。

supervisord.conf 的末尾新增 octane 的配置

[program:octane]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000 --watch
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

此處即為啟動基於 Octane 的 Laravel 應用,指定伺服器為 swoole 服務,在 8000 埠傳輸資料,並監聽檔案修改。

由於 supervisord.conf 是在容器 build 的階段便進入容器了,所以修改 supervisord.conf 後需要重新 build 我們的容器,使用以下命令即可:

sail build --no-cache

啟動容器後,檢視 Octane 的執行狀態

sail php artisan octane:status

image-20220315083123578

使用瀏覽器訪問 localhost:8000 即可看到我們應用的首頁。

image-20220315083252779

在需要進行 Debug 的時候訪問 80 埠上的應用即可。
盡情開發你的高效能 PHP 應用吧~

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

相關文章