跳转到内容
开源

上傳資料夾並部署服務

把電腦上的資料夾或 .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/)再重新選擇。

名稱、連接埠、公開網域、環境變數、建置變數、規格和安全性的意義與從 Git 部署相同。

建置方式 選 Railpack 時,由建置器判斷語言。選 Dockerfile 時,使用資料夾最上層的 Dockerfile。要建置資料夾裡的某個子資料夾,在 更多設定 的 根目錄 填它,例如 apps/web。

按 檢查變更,核對 Deployment 和 Build。套用後頁面會切到服務,建置 分頁顯示上傳進度:取得許可、上傳、開始建置。上傳完成前請保持頁面開啟。

建置成功後,Keel 會把服務換成新映像檔,新建置完成後自動部署 預設開啟。

在服務的 建置 分頁按 上傳資料夾,選擇新版的資料夾。Zeabur 會沿用這個服務的建置方式與設定。

終端機和腳本可以用 zeaburctl up,不用知道 registry 或 Zeabur 的位址。用 Zeabur Identity 登入時,資料夾交給叢集裡的 Zeabur。用安裝程式給的管理員 kubeconfig 等其他憑證時,指令在你的電腦上跑同樣的步驟,憑證不會離開你的電腦。

zeaburctl up ./site --project shop --service site

服務不存在時,指令會替你建立。在腳本或 CI 裡,--project 和 --service 都要填,專案必須已存在。

上傳完成後,建置 分頁會出現一筆建置,成功後 概覽 顯示服務就緒。用 kubectl 查看:

kubectl -n shop get build site
kubectl -n shop get buildruns

Build 的 SOURCE 是 Archive,REVISION 是上傳內容的 digest。BuildRun 的 PHASE 變成 Succeeded 後,Deployment 的映像檔會換成 archive-<時間>-<digest 前七碼> 這種 tag。

上傳建立的物件和從 Git 部署相同,只有 Build 的來源不一樣:spec.source 是 archive,不是 git,也沒有 credentialsRef。Deployment、Service、<服務名稱>-env 照 Git 頁面的 YAML 建立,把 web 換成 site,再建立這個 Build:

apiVersion: builder.zeabur.com/v1alpha1
kind: Build
metadata:
name: site
labels:
app.kubernetes.io/name: site
annotations:
builder.zeabur.com/upload-token-request: u1
spec:
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/native

annotation 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}'=u1
printf '{"auths":{"localhost:5000":{"registrytoken":"%s"}}}' \
"$(kubectl -n shop get secret site-upload -o jsonpath='{.data.token}' | base64 -d)" > auth.json
kubectl -n zot get secret zot-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
kubectl -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+gzip
kubectl -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 裡這個服務的上傳內容。