健康检查
Zeabur 会自动对每个服务执行健康检查,确保部署准备就绪后才接收流量。这实现了零停机部署——如果新部署未通过健康检查,旧版本会继续处理请求。
健康检查的运作方式
当你部署一个服务时,Zeabur 会探测服务的监听端口,验证它是否正在接受连接。只有当健康检查通过后,部署才会被视为就绪。在此之前,先前的部署会维持运作并继续处理流量。
这代表:
- 健康检查成功 — 流量会路由到新部署,旧部署则会被终止。
- 健康检查失败 — 新部署会被标记为失败,旧部署继续运作。不会发生停机。
💡
对于挂载了存储空间的服务,Zeabur 会使用 Recreate 部署策略而非滚动更新。这代表旧部署会在新部署启动前先停止,导致部署期间会有短暂的停机时间。这是为了避免两个实例同时访问同一个存储空间而造成数据冲突。
默认行为
默认情况下,Zeabur 会检查你的服务所暴露的端口是否正在接受 TCP 连接。对大多数 Web 应用程序来说,这就足够了——一旦你的 HTTP 服务器开始监听,健康检查就会通过。
默认设置如下:
| 参数 | 默认值 |
|---|---|
| 检查类型 | TCP 端口探测 |
| 间隔时间 | 数秒(系统默认) |
| 超时时间 | 数秒(系统默认) |
| 失败阈值 | 连续多次失败 |
自定义健康检查路径
如果需要更精确的健康验证,你可以设定自定义的 HTTP 健康检查路径。当你的应用程序在真正准备好处理流量之前需要额外的启动时间(例如预热缓存或建立数据库连接)时,这会特别有用。
设定自定义健康检查路径的步骤:
- 在 Zeabur 仪表板中打开你的服务。
- 前往 Settings。
- 在 Health Check 区段中,输入你的自定义路径(例如
/healthz或/api/health)。
你的应用程序应在该路径返回 HTTP 2xx 状态码,表示已准备好接收流量。
// 示例:Express.js 健康检查端点
app.get('/healthz', (req, res) => {
// 在此执行任何就绪检查
res.status(200).json({ status: 'ok' })
})疑难排解
部署卡在「Deploying」状态
如果你的部署一直无法通过健康检查,请确认:
- 你的应用程序是否在正确的端口上监听。Zeabur 会设定
PORT环境变量——请确保你的应用程序绑定到0.0.0.0:$PORT。 - 你的应用程序是否能在超时时间内完成启动。如果初始化需要较长时间,请考虑新增一个能立即响应的轻量健康端点。
- 如果使用自定义健康检查路径,请确保该端点返回 HTTP
2xx响应。
启动时间较长的服务
某些应用程序(例如 Java 服务或加载大型 ML 模型的应用程序)可能需要额外的初始化时间。在这种情况下,请设定一个自定义健康检查端点,只在应用程序完全就绪后才返回成功响应,而不是依赖默认的 TCP 探测。