跳到正文

建置方案(Dockerfile 與 zbpack) ​

Git 服務在 Zenavo 的建置機上用 BuildKit 建置。服務如何建置稱為它的建置計劃,部署前可以預覽。

Dockerfile ​

如果服務的根目錄中有 Dockerfile,會直接使用它。新增服務時可以在 高階設定 → Dockerfile 路徑 中設定其他路徑,之後也可以在服務的 設定 分頁 → Dockerfile 中修改(例如 deploy/api.Dockerfile,相對於根目錄)。

zbpack ​

沒有 Dockerfile 時,zbpack 會識別語言和框架並生成一個。它支援 Node.js、Bun、Deno、Python、Go、PHP、Ruby、Java、Rust、.NET、靜態網站等。儲存庫中有 zbpack.json 檔案,或者服務有 ZBPACK_* 環境變數(用於設定 zbpack,例如建置和啟動指令)時,也會使用 zbpack。

zbpack 建置的映像檔監聽 8080 連接埠,所以除非你另外設定,服務的 HTTP 連接埠就是 8080。

zbpack 選項 ​

在服務的 設定 分頁 → 建置 → zbpack 選項 中,每行填寫一個 KEY=value:

  • 以 ZBPACK_ 開頭的鍵,例如 ZBPACK_BUILD_COMMAND=npm run build 或 ZBPACK_START_COMMAND=node dist/server.js,會作為變數傳給 zbpack。它們優先於 變數 分頁中的 ZBPACK_* 變數。
  • 其他鍵會寫入根目錄中的 zbpack.<service>.json,效果與儲存庫中的 zbpack.json 檔案相同。以 JSON 形式寫的值({…}、[…]、true 或 false)會保留其型別。

只要設定了任何 zbpack 選項,服務就會用 zbpack 建置,即使根目錄中有 Dockerfile。

建置參數 ​

在 設定 分頁 → 建置 → 建置參數 中,每行填寫一個 KEY=value。每一項都會傳給建置:你自己的 Dockerfile 用同名的 ARG 行讀取;在 zbpack 生成的 Dockerfile 中,Zenavo 會在每個執行指令的階段加上這行 ARG。變數 分頁中的變數不會自動傳給建置;要使用某個變數,用 ${KEY} 引用它,例如 VITE_API_URL=${API_URL}。

建置日誌中會隱藏這些值,但如果宣告它的階段在最終映像檔中,就可以從映像檔的歷史中讀到;建置過程如果把它寫進了輸出,也能從輸出中讀到。只有在建置確實需要時,才把金鑰作為建置參數傳入。

根目錄 ​

在 monorepo 中,新增服務時或之後在 設定 分頁中,把 根目錄 設為服務所在的資料夾,例如 /apps/api。建置以該資料夾作為上下文,Dockerfile 和 zbpack 都是如此。它必須在儲存庫內部。

要只在該資料夾有改動時重新部署,請設定服務的監聽路徑。

在 manifest 中 ​

設定 分頁儲存的是專案 manifest 中服務 source 的這些欄位;你也可以在匯出或匯入的 manifest 中設定它們:

json
"source": {
  "git": "https://github.com/acme/mono",
  "ref": "main",
  "context": "apps/api",
  "dockerfile": "Dockerfile",
  "build_args": { "NODE_ENV": "production" },
  "zbpack": { "ZBPACK_BUILD_COMMAND": "npm run build" },
  "auto_deploy": true,
  "watch_paths": ["apps/api/", "packages/shared/"]
}

建置計劃預覽 ​

預覽會複製分支,報告建置將使用什麼,但不會建置或執行任何東西:

行範例
提供方Dockerfile、go、nodejs、python 等
版本Go 版本 1.26.1,Node.js 版本 22
連接埠來自 Dockerfile 的 EXPOSE,zbpack 則為 8080

限制 ​

建置共享 Zenavo 的建置機,建置機繁忙時會排隊。一次建置(包括複製)最長可以執行方案的單次建置上限:Free 15 分鐘,Dev 30 分鐘,Pro、Team 和企業版 60 分鐘;其中複製本身最多 10 分鐘。達到上限的建置會被中止,部署失敗,已用的建置分鐘數照常計入。各方案的建置分鐘數見用量與帳單。

與 Zeabur 無關聯。