部署 PHP 專案

Zeabur 除了支援傳統的多檔案 PHP、以 index.php 為入口的專案,另外也支援 LaravelSymfony、ThinkPHP、CodeIgniter 等框架的一鍵部署。

PHP 環境

Zeabur 預設使用 PHP 8 的最新版本、NGINX + php-fpm 伺服器來執行您的程式碼。

Zeabur 的 PHP 環境內建 Composer、apcubcmathgdintlmysqliopcachepcntlpdo_mysqlsysvsemzip 等 PHP 擴充套件。如果您的 composer.json 有安裝其他 ext- 開頭的擴充套件類型定義,Zeabur 也會自動安裝對應的擴充套件。除此之外,也會預設安裝 Node.js、Crontab、cURL、gettext、Git、grep、pkg-config、unzip 等工具。

Zeabur 預設會帶入 APP_ENV=prodAPP_DEBUG=true 環境變數到您的應用程式當中,您可以在 Zeabur 控制台的「環境變數」區塊中手動覆蓋這些變數。

完整的基礎 Image 設定可以參考 zbpack 的程式碼儲存庫

NPM 支援

如果您的專案有 package.json,Zeabur 會幫您執行 npm install 安裝依賴。

如果您的專案的 package.jsonbuild script,Zeabur 會自動幫您執行 npm run build 編譯產物。

自訂編譯和啟動命令

Zeabur 允許你使用環境變數或設定檔自訂 PHP 的編譯和啟動命令。

「編譯命令」適合用在需要下載或編譯自訂產物(如 CSS、JavaScript 等等),或者是配置設定檔的情境。舉例來說,你想往 /etc 資料夾寫入設定檔,你可以設定環境變數:

ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere

或者是在 zbpack.json 中加入以下設定:

zbpack.json
{
    "build_command": "echo 'your-configuration' > /etc/somewhere"
}

你亦可以在這裡執行其他 npm 的命令。

zbpack.json
{
    "build_command": "npm run build:dist"
}

編譯命令 不會 影響 Zeabur 原本的編譯流程,所以您不需要手動再這裡重複指定 Zeabur 預設幫您執行的命令。

「啟動命令」則適合用在啟動 PHP 伺服器時執行的情境,如在原有的命令基礎上加上 php artisan migrate 來建立資料庫的 tables。舉例來說,你可以設定環境變數

ZBPACK_START_COMMAND="php artisan migrate && _startup"

或者是在 zbpack.json 中加入以下設定:

zbpack.json
{
    "start_command": "php artisan migrate && _startup"
}

注意:若是持續運行的服務,則需將啟動指令放置於 () 內,並使用 & 串接命令:

ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"

zbpack.json
{
    "start_command": "(php artisan reverb:start &); _startup"
}

其中 _startup 是 Zeabur 原本的啟動命令(可以在 zbpack 查閱)。如果你有自訂 start_command_startup 必須在你的啟動命令中執行,否則不會啟動 PHP 伺服器。

build_commandstart_command 均會使用 POSIX 相容的 shell 執行,所以你可以使用 && 串接多個命令,或者使用 ; 分隔多個命令。

自訂 PHP 版本

Zeabur 預設使用 PHP 8,但你可以使用 composer.json 或 zbpack 的設定來指定 PHP 版本。如果你的專案是 Laravel Sail,Zeabur 也會根據 docker-compose.yml 自動判斷。zbpack 設定優先級最高、composer.json 次之、Laravel Sail 最低。

composer.json

composer.jsonrequire 設定 php 版本的範圍:

composer.json
{
    "require": {
        "php": "7.4"
    }
}

以上例來說,Zeabur 會使用 PHP 7.4 的最新 patch 版本來執行你的專案。

composer.json
{
    "require": {
        "php": "^7.4"
    }
}

以上例來說,Zeabur 會使用 PHP 7 的最新 minor 版本來執行你的專案。

Laravel Sail

如果你的專案是 Laravel Sail,Zeabur 會自動偵測並使用 Laravel Sail 在 docker-compose.yml 定義的 PHP 版本。

Laravel Sail 的 Docker Compose 定義

zbpack 設定

如果你沒有使用 Laravel Sail 或 Composer,但有更改 PHP 版本的需求,可以使用 ZBPACK_PHP_VERSION 環境變數

ZBPACK_PHP_VERSION=8.0

或者是在 zbpack.json 中加入以下設定

zbpack.json
{
    "php": {
        "version": "8.0"
    }
}

來自訂 PHP 版本。

自訂 php.ini 設定

使用 Zeabur 的設定檔編輯器,建立一個路徑在 /usr/local/etc/php/conf.d、副檔名是 ini 的設定檔案,並且直接寫上想要覆蓋的 PHP 設定即可。

舉例來說,如果想要將最大上傳檔案大小設定為 100MB,可以建立一個檔案 /usr/local/etc/php/conf.d/upload.ini,內容如下:

/usr/local/etc/php/conf.d/upload.ini
upload_max_filesize = 100M

自訂 NGINX 設定

使用 Zeabur 的設定檔編輯器,建立一個路徑是 /etc/nginx/sites-enabled/default 的設定檔案,覆蓋 Zeabur 預設的 NGINX 設定。建立後會自動帶入目前的 NGINX 設定,你可以在此基礎上進行修改。

舉例來說,假如你想要停用 gzip 壓縮,可以將範本的 gzip_static on; 改成 gzip_static off;

/etc/nginx/sites-enabled/default
location / {
    try_files $uri $uri/ /index.php$is_args$args;
    gzip_static off;
}