跳到正文

服务设置 ​

服务的 设置 标签页决定它如何构建和运行。保存 会存下修改,修改在下次部署时生效,准备好后点击 重新部署。变量有自己的标签页(环境变量),域名和端口也是(网络)。

名称、主机名和 ID ​

  • 服务名称 显示在控制台中。改名不会影响任何正在运行的内容。
  • 内网主机名 是项目中其他服务访问它时使用的名称,即 <hostname>.zenavo.internal(内网通信)。只能包含小写字母、数字和短横线,并以字母开头。修改在下次部署时生效;使用旧地址的地方需要一并更新。
  • 服务 ID 是永久的,不会被重复使用:数据卷、日志和 API 路由都使用它。在这里复制,供 API 或 CLI 使用。

配置文件 ​

配置文件 → 打开配置编辑器 可以把文件挂载到容器中,例如 Nginx 配置或 JSON 设置文件,而不需要修改镜像。每个文件需要设置:

  • 挂载路径:文件在容器中的完整路径,例如 /etc/nginx/conf.d/default.conf。
  • 权限:八进制的文件权限(默认 0644)。
  • 文件内容。
  • 用服务的变量替换 ${VARIABLE} 引用:部署时用环境变量中的值填入,这样机密仍然只保存在变量中。

配置文件和变量一样加密存储,并以 Kubernetes Secret 的形式写入服务器。它们在容器中是只读的:应用需要修改并保留的文件,请使用数据卷。

来源与构建 ​

对于 Zenavo 构建的服务,来源 和 构建 部分包含仓库和分支、根目录、Dockerfile、自动部署、监听路径、构建参数 和 zbpack 选项。详见 GitHub、构建方案和本地目录。运行 Docker 镜像的服务则显示镜像,没有需要构建的内容。

启动命令 ​

不修改镜像,覆盖容器运行的内容:

字段覆盖示例
启动命令(ENTRYPOINT)镜像的 ENTRYPOINTdocker-entrypoint.sh
参数(CMD)镜像的 CMD,传给 entrypointnpm run start:prod

留空则使用镜像的默认值。值会被直接执行,不经过 shell:包含空格的部分要加引号;需要 &&、| 或 $VARIABLES 时写成 sh -c "…",例如 sh -c "npx prisma migrate deploy && node server.js"。

健康检查与崩溃限制 ​

健康检查 决定新实例何时可以接收流量,详见健康检查。

崩溃后自动重启次数 就是崩溃限制:单个实例最多重启多少次,之后服务会被暂停。-1(默认)表示无限重启;0 表示第一次崩溃后就暂停。服务被暂停时会发送 服务已暂停 通知。

资源限制 ​

默认情况下,服务可以使用服务器上全部的 CPU 和内存。为了避免一个服务挤占同一台服务器上的其他服务,可以为每个实例设置上限:

  • CPU(m):单位是毫核;1000 是一核,500 是半核。达到上限的服务会被降速,不会被停止。
  • 内存(Mi):单位是 MiB。超过上限的服务会被终止并重启(内存不足),这会计入它的崩溃限制。

留空表示不限制。内存上限要比服务平时的用量留出足够余量:服务的 用量 标签页中可以看到实际用量(监控)。

副本数 ​

副本数 让一个服务在项目所在的服务器上运行多个实例,最多 20 个。流量分配到就绪的实例上,部署时逐个替换,所以一个实例崩溃或被替换时,服务仍能继续响应。

  • 副本运行在同一台服务器上,所以它们能应对进程崩溃,但不能应对服务器宕机。
  • 有数据卷的服务不能使用多个副本,因为数据卷无法在实例之间共享。
  • 每个副本都受上面的资源限制约束,并且有各自独立的内存:会话、上传文件和缓存请放在数据库、Redis 或对象存储中,不要放在进程里。

暂停与删除 ​

在 危险操作 中:

  • 暂停服务 会停止服务,在你 恢复服务 之前它无法访问。配置、域名和数据卷都会保留。详见回滚与暂停。
  • 删除服务 会在你输入服务名称后把它从项目中移除。它会在下次部署(项目 设置 中的 全部部署)时停止。它的数据卷会保留在服务器上,直到项目被删除。依赖它的服务将不再等待它启动。

在 manifest 中 ​

这些设置对应项目 manifest 中服务的字段(设置 → 高级 → 编辑 JSON,或者 API):

json
{
  "name": "web",
  "hostname": "web",
  "entrypoint": ["docker-entrypoint.sh"],
  "command": ["npm", "run", "start:prod"],
  "configs": [{ "path": "/app/config.json", "content": "{\"apiUrl\": \"${API_URL}\"}", "mode": 420, "envsubst": true }],
  "crash_limit": 5,
  "cpus": 0.5,
  "memory_mb": 512,
  "replicas": 2
}

JSON 中的 mode 是十进制(420 即 0644);cpus 的单位是核。

与 Zeabur 无关联。