部署 PHP 專案
Zeabur 除了支援傳統的多檔案 PHP、以 index.php
為入口的專案,另外也支援 Laravel、ThinkPHP、CodeIgniter 等框架的一鍵部署。
NPM 支援
如果你的專案根目錄有 package.json
,Zeabur 會自動幫您安裝 Node.js 和 NPM;如果你的 package.json
有 build
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"
}
注意:若是持續運行的服務,則需將啟動指令放置於 ()
內,並使用 &
串接命令
ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"
或
{
"start_command": "(php artisan reverb:start &); _startup"
}
其中 _startup
是 Zeabur 原本的啟動命令(可以在 zbpack 查閱)。如果你有自訂 start_command
,_startup
必須在你的啟動命令中執行,否則不會啟動 PHP 伺服器。
build_command
和 start_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.json
的 require
設定 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 版本。
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 設定檔儲存庫 下載目前 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 壓縮
}
}