跳到正文

CLI ​

zenavo 让你在终端或 CI 中部署和运维项目。它通过 API 密钥调用 REST API,命令结构沿用 Zeabur 的 CLI(auth、workspace、context、project、service、deployment),迁移过来很容易。

安装 ​

用 Go 1.26 或更高版本从 zenavo-cli 仓库构建:

sh
make build            # 为本机构建 ./zenavo
make dist             # 为 macOS、Linux 和 Windows 构建 dist/zenavo_<os>_<arch>,附带 SHA256SUMS

登录 ​

sh
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。

sh
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 会使用唯一的那个,能询问时会询问,否则会提示需要传入什么。

快速上手 ​

sh
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>。下载和恢复请在控制台中操作
versionCLI 的版本

每条命令都支持 --help。全局参数:--team(--workspace)、--project/-p、--service/-s、--json、--yes/-y、-i=false 和 --api。

CLI 暂不支持的功能 ​

添加和初始化服务器、团队管理、GitHub App,以及下载或恢复备份,请在控制台中操作。

与 Zeabur 无关联。