上傳資料夾並部署服務
把電腦上的資料夾或 .zip 檔交給 Zeabur Builder 建置。用網頁或 zeaburctl 建立服務、上傳新版本。
在專案選擇 新增 → 上傳資料夾,把資料夾拖進虛線框,填入服務名稱與連接埠,再 檢查變更。套用後資料夾馬上上傳,上傳完成就開始第一次建置。
不需要 Git 儲存庫。資料夾由瀏覽器打包後直接送進叢集的 registry,Zeabur 不保存它,也不會放進 ConfigMap、Secret 或磁碟區。
- 條件和從 Git 部署相同:已安裝 Zeabur Builder 和 Keel,chart 已設定
builds.registry,你有在專案建立服務和 Build 的權限。 - Zeabur Builder 要設定
registry.tokenKey,上傳才會拿到有時效的權杖。沒有設定時,上傳會停在 Zeabur Builder 不允許上傳。 - 你要能讀取專案裡的機密。上傳用的權杖由 Zeabur Builder 寫在
<服務名稱>-upload機密裡,Zeabur 用你的權限讀取它,不用自己的權限。
開啟 新增 → 上傳資料夾,把資料夾拖進虛線框,或按 選擇資料夾。已有 .zip 檔時,直接拖進去或按 選擇 .zip 檔。GitHub 下載的 .zip 常多包一層資料夾,Zeabur 會自動去掉。
打包時:
.gitignore排除的檔案不會上傳,子資料夾裡的.gitignore只管它自己的資料夾。.dockerignore只讀最上層,樣式從最上層算起,和 Docker 一樣。.git資料夾一律不上傳。- 瀏覽器讀不到檔案權限,開頭是
#!的檔案會設成可執行。
打包完成後,虛線框顯示檔案數、打包後的大小,以及被排除的檔案數。
打包後的上限是 256 MiB,解開後的上限是 1 GiB。超過時,虛線框列出最大的幾項,把它們加進 .gitignore(例如 node_modules/)再重新選擇。
設定建置與執行方式
Section titled “設定建置與執行方式”名稱、連接埠、公開網域、環境變數、建置變數、規格和安全性的意義與從 Git 部署相同。
建置方式 選 Railpack 時,由建置器判斷語言。選 Dockerfile 時,使用資料夾最上層的 Dockerfile。要建置資料夾裡的某個子資料夾,在 更多設定 的 根目錄 填它,例如 apps/web。
按 檢查變更,核對 Deployment 和 Build。套用後頁面會切到服務,建置 分頁顯示上傳進度:取得許可、上傳、開始建置。上傳完成前請保持頁面開啟。
建置成功後,Keel 會把服務換成新映像檔,新建置完成後自動部署 預設開啟。
在服務的 建置 分頁按 上傳資料夾,選擇新版的資料夾。Zeabur 會沿用這個服務的建置方式與設定。
用 zeaburctl 上傳
Section titled “用 zeaburctl 上傳”終端機和腳本可以用 zeaburctl up,不用知道 registry 或 Zeabur 的位址。用 Zeabur Identity 登入時,資料夾交給叢集裡的 Zeabur。用安裝程式給的管理員 kubeconfig 等其他憑證時,指令在你的電腦上跑同樣的步驟,憑證不會離開你的電腦。
zeaburctl up ./site --project shop --service site服務不存在時,指令會替你建立。在腳本或 CI 裡,--project 和 --service 都要填,專案必須已存在。
上傳完成後,建置 分頁會出現一筆建置,成功後 概覽 顯示服務就緒。用 kubectl 查看:
kubectl -n shop get build sitekubectl -n shop get buildrunsBuild 的 SOURCE 是 Archive,REVISION 是上傳內容的 digest。BuildRun 的 PHASE 變成 Succeeded 後,Deployment 的映像檔會換成 archive-<時間>-<digest 前七碼> 這種 tag。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”上傳建立的物件和從 Git 部署相同,只有 Build 的來源不一樣:spec.source 是 archive,不是 git,也沒有 credentialsRef。Deployment、Service、<服務名稱>-env 照 Git 頁面的 YAML 建立,把 web 換成 site,再建立這個 Build:
apiVersion: builder.zeabur.com/v1alpha1kind: Buildmetadata: name: site labels: app.kubernetes.io/name: site annotations: builder.zeabur.com/upload-token-request: u1spec: builderRef: railpack source: archive: {} output: image: zot.zot.svc:5000/shop/site notify: - type: keel url: http://keel.keel.svc.cluster.local:9300/v1/webhooks/nativeannotation builder.zeabur.com/upload-token-request 的值可以自己取,每換一個新值,Zeabur Builder 就發一個新權杖,寫進 <服務名稱>-upload 機密,15 分鐘內有效。接著用 ORAS 把資料夾推到 registry,再把 digest 寫進 Build:
kubectl -n shop wait build/site --for=jsonpath='{.status.uploadToken.request}'=u1printf '{"auths":{"localhost:5000":{"registrytoken":"%s"}}}' \ "$(kubectl -n shop get secret site-upload -o jsonpath='{.data.token}' | base64 -d)" > auth.jsonkubectl -n zot get secret zot-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crtkubectl -n zot port-forward svc/zot 5000:5000 &tar -czf source.tar.gz -C ./site .oras push --registry-config auth.json --ca-file ca.crt \ localhost:5000/shop/site/source:upload-1 \ --artifact-type application/vnd.zeabur.source.v1+tar \ source.tar.gz:application/vnd.oci.image.layer.v1.tar+gzipkubectl -n shop patch build site --type=merge \ -p '{"spec":{"source":{"archive":{"digest":"sha256:<oras 印出的 digest>"}}}}'上傳新版本時,換一個 annotation 值、推新的內容,再改 digest。網頁和 zeaburctl up 會替你套用 .gitignore、.dockerignore 和大小限制,自己打包時要自己排除不需要的檔案。推送的格式和限制見 Zeabur Builder 的說明。
| 畫面上的情況 | 接著做 |
|---|---|
| 等待資料夾 | 上傳還沒開始,或中途關掉了頁面。在 建置 按 上傳資料夾。 |
| Zeabur Builder 不允許上傳 | 確認 Zeabur Builder 設定了 registry.tokenKey,且你能讀取 <服務名稱>-upload 機密。 |
| 資料夾上傳失敗 | 按 再試一次。權杖 15 分鐘後失效,Zeabur 會重新要一個。 |
| 資料夾已上傳,但建置沒有開始 | 按 再試一次。仍失敗時,到 建置 看 Build 的狀況。 |
| 建置回報找不到來源 | 上傳的內容可能已被 registry 清掉。registry 預設只保留每個服務最近 20 次上傳,重新上傳即可。 |
刪除服務時會一併刪除它的 Build,Zeabur Builder 也會清掉 registry 裡這個服務的上傳內容。