維運監控健康檢查

健康檢查

Zeabur 會自動對每個服務執行健康檢查,確保部署準備就緒後才接收流量。這實現了零停機部署——如果新部署未通過健康檢查,舊版本會繼續處理請求。

健康檢查的運作方式

當你部署一個服務時,Zeabur 會探測服務的監聽連接埠,驗證它是否正在接受連線。只有當健康檢查通過後,部署才會被視為就緒。在此之前,先前的部署會維持運作並繼續處理流量。

這代表:

  • 健康檢查成功 — 流量會路由到新部署,舊部署則會被終止。
  • 健康檢查失敗 — 新部署會被標記為失敗,舊部署繼續運作。不會發生停機。
💡

對於掛載了儲存空間的服務,Zeabur 會使用 Recreate 部署策略而非滾動更新。這代表舊部署會在新部署啟動前先停止,導致部署期間會有短暫的停機時間。這是為了避免兩個實例同時存取同一個儲存空間而造成資料衝突。

預設行為

預設情況下,Zeabur 會檢查你的服務所暴露的連接埠是否正在接受 TCP 連線。對大多數網頁應用程式來說,這就足夠了——一旦你的 HTTP 伺服器開始監聽,健康檢查就會通過。

預設設定如下:

參數預設值
檢查類型TCP 連接埠探測
間隔時間數秒(系統預設)
逾時時間數秒(系統預設)
失敗門檻連續多次失敗

自訂健康檢查路徑

如果需要更精確的健康驗證,你可以設定自訂的 HTTP 健康檢查路徑。當你的應用程式在真正準備好處理流量之前需要額外的啟動時間(例如預熱快取或建立資料庫連線)時,這會特別有用。

設定自訂健康檢查路徑的步驟:

  1. 在 Zeabur 儀表板中開啟你的服務。
  2. 前往 Settings
  3. 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 探測。