CLI
zenavo 讓你在終端機或 CI 中部署和運維專案。它透過 API 金鑰呼叫 REST API,指令結構沿用 Zeabur 的 CLI(auth、workspace、context、project、service、deployment),遷移過來很容易。
安裝
用 Go 1.26 或更高版本從 zenavo-cli 儲存庫建置:
make build # 為本機建置 ./zenavo
make dist # 為 macOS、Linux 和 Windows 建置 dist/zenavo_<os>_<arch>,附帶 SHA256SUMS登入
zenavo auth login # 顯示一個程式碼並開啟 <console>/device
zenavo auth login --scope deploy # 請求一個可以部署、但不能做所有事的金鑰
zenavo auth login --with-token < key.txt # 使用已有的 API 金鑰,從 stdin 讀取
zenavo auth status # 當前登入的身份,以及金鑰可以做什麼auth login 會顯示一個程式碼,並開啟控制台的 /device 頁面:登入,輸入程式碼並批准。批准之前,請核對頁面顯示的裝置名稱和網路。透過 SSH 使用時,在任意裝置上開啟列印出的位址即可。之後 CLI 會獲得自己的 API 金鑰,名為“CLI on <computer>”,有效期 90 天。在批准頁面上,你可以降低它的權限,並限定部分專案。
--scope 選擇 CLI 請求的權限:read(唯讀)、deploy(部署)或 full(完全存取,預設)。請只請求你需要的權限,在共用的機器上尤其如此。批准人仍然可以降低權限或限定部分專案,但不能提高權限。CLI 會儲存批准的結果,zenavo auth status 會顯示它:
https://zenavo.app as dev@example.com (saved key)
Access: deploy (deploy and configure existing projects), limited to 1 project(s): proj_…當指令需要的權限超出金鑰允許的範圍時,API 會返回 403,CLI 會告訴你該怎麼做:用更大的範圍重新登入(zenavo auth login --scope full)、批准金鑰存取所有專案,或者對於任何 API 金鑰都不能做的事(帳單、成員、帳號),使用控制台。使用 --with-token 時,金鑰的權限是在建立時選擇的,所以 auth status 無法顯示;--scope 在這種情況下也不適用。
金鑰儲存在 ~/.config/zenavo/config.json(或 $ZENAVO_CONFIG)中,檔案權限為 0600,並且只會傳送給建立它的那個控制台。auth logout 會在本機忘記它;要吊銷它,請在 API 金鑰 中刪除。
CI 與指令碼
不需要登入,把 ZENAVO_TOKEN 設為一個 API 金鑰(不是 https://zenavo.app 時還要設定 ZENAVO_API_URL),並傳入 -i=false,這樣任何指令都不會提示輸入。--json 會在 stdout 上輸出 JSON,方便 jq 處理;進度輸出到 stderr。被跟蹤的任務失敗時,退出碼為 1。
export ZENAVO_TOKEN=zv_pat_…
zenavo deploy web -p blog -i=false上下文
zenavo team switch 和 zenavo context set project|service 會儲存之後的指令使用的團隊、專案和服務。--team(或 --workspace)、--project/-p 和 --service/-s 可以在單條指令中覆蓋它們。如果沒有儲存也沒有傳入專案或服務,CLI 會使用唯一的那個,能詢問時會詢問,否則會提示需要傳入什麼。
快速上手
zenavo team ls # 你的團隊;* 標記當前團隊
zenavo team switch acme
zenavo project create blog --git https://github.com/acme/blog
zenavo env set PORT=3000 DATABASE_PASSWORD # 只寫 KEY 會提示輸入值,且不回顯
zenavo deploy # 部署所有服務;跟蹤建置日誌
zenavo deploy web # 部署一個服務;其他服務保持原樣
zenavo service ls # 狀態、就緒情況、重啟次數、CPU 和記憶體
zenavo logs web -f # 即時執行日誌
zenavo logs --build # 最近一次建置和部署日誌
zenavo domain add blog # blog.zenavo.app,或你自己的完整網域
zenavo rollback # 選擇之前一次成功的部署
zenavo template deploy -f zeabur.yaml --var DOMAIN=blog指令
| 指令 | 作用 |
|---|---|
auth login | logout | status | 透過瀏覽器或 API 金鑰登入;忘記金鑰;顯示當前身份 |
team ls | current | switch | clear | 團隊(別名 workspace)。切換時會清除儲存的專案和服務 |
context show | set project | set service | clear | 之後的指令使用的預設值 |
server ls | get | 團隊的伺服器。新增伺服器請在控制台中操作 |
project ls | get | create | delete | 專案。create --git <url> 或 --image <image> 會新增第一個服務;delete 需要輸入專案名稱 |
service ls | deploy | restart | suspend | resume | exec | 服務。exec -- <command> 在容器中用 sh -c 執行,最長 60 秒 |
deploy [service] [--dir <path>] | 部署專案或一個服務,並跟蹤建置。--dir 把本機目錄上傳為服務的來源,必要時會建立服務。--detach 立即返回 |
logs [service] [-f] [--build] | 最後 200 行執行日誌,-f 持續輸出;--build 列印最近一次建置日誌 |
shell [service] | 在服務的容器中開啟互動式終端機(bash 或 sh);退出碼與 shell 相同 |
job ls | get | log | wait | 任務:部署、重啟、備份(別名 deployment) |
rollback [job-id] | 把專案回滾到之前一次成功的部署 |
env ls | set | unset | 服務的變數。除非加 --reveal,否則值保持隱藏;set --file .env;--deploy 儲存後部署 |
domain ls | add | rm | 不帶點的名稱(blog)獲得一個生成的網域;完整的名稱則是你自己的網域 |
template deploy -f <file> | 從 Zeabur 模板(YAML)或 Zenavo 匯出檔案(JSON)建立專案;--var KEY=value、--deploy |
backup ls | create | 備份。create --engine postgres|mysql|volume:<id>。下載和恢復請在控制台中操作 |
version | CLI 的版本 |
每條指令都支援 --help。全域性參數:--team(--workspace)、--project/-p、--service/-s、--json、--yes/-y、-i=false 和 --api。
CLI 暫不支援的功能
新增和初始化伺服器、團隊管理、GitHub App,以及下載或還原備份,請在控制台中操作。