教學
PHP

部署 PHP 專案

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

NPM 支援

如果你的專案根目錄有 package.json,Zeabur 會自動幫您安裝 Node.js 和 NPM;如果你的 package.jsonbuild script,Zeabur 會自動幫你執行 npm install && npm run build 編譯產物。

如果需要更改編譯的命令(如改執行 npm run build:dist),請參閱〈自訂編譯與啟動命令〉。

自訂編譯和啟動命令

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

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

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

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

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

你亦可以在這裡執行 npm 的命令。注意 Zeabur 只會在 專案根目錄package.json 的情況下安裝 Node.js 和 NPM,如果你的專案沒有 package.json,則不會有 npm 命令可用:

{
    "build_command": "npm install && npm run build:dist"
}

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

ZBPACK_START_COMMAND="php artisan migrate && _startup"

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

{
    "start_command": "php artisan migrate && _startup"
}

其中 _startup 是 Zeabur 原本的啟動命令(可以在 zbpack 查閱 (opens in a new tab))。如果你有自訂 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 版本的範圍:

{
    "require": {
        "php": "7.4"
    }
}

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

{
    "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 中加入以下設定

{
    "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,內容如下:

upload_max_filesize = 100M

自訂 NGINX 設定

使用 Zeabur 的設定檔編輯器,建立一個路徑是 /etc/nginx/sites-enabled/default 的設定檔案,覆蓋 Zeabur 預設的 NGINX 設定。

如果你想以原本的設定檔為基礎微調 NGINX 設定,你可以從 zbpack 的 NGINX 設定檔儲存庫 (opens in a new tab) 下載目前 Zeabur 使用的 NGINX 設定檔,然後在此基礎上進行修改。舉例來說,假如你想要停用 gzip 壓縮,可以將範本的 gzip_static on; 改成 gzip_static off;

server {
    # 參見 https://github.com/zeabur/zbpack/blob/main/internal/php/nginx-conf/default.conf

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static off;  // 停用 GZIP 壓縮
	}
}