健康檢查
Zeabur 會自動對每個服務執行健康檢查,確保部署準備就緒後才接收流量。這實現了零停機部署——如果新部署未通過健康檢查,舊版本會繼續處理請求。
健康檢查的運作方式
當你部署一個服務時,Zeabur 會探測服務的監聽連接埠,驗證它是否正在接受連線。只有當健康檢查通過後,部署才會被視為就緒。在此之前,先前的部署會維持運作並繼續處理流量。
這代表:
- 健康檢查成功 — 流量會路由到新部署,舊部署則會被終止。
- 健康檢查失敗 — 新部署會被標記為失敗,舊部署繼續運作。不會發生停機。
💡
對於掛載了儲存空間的服務,Zeabur 會使用 Recreate 部署策略而非滾動更新。這代表舊部署會在新部署啟動前先停止,導致部署期間會有短暫的停機時間。這是為了避免兩個實例同時存取同一個儲存空間而造成資料衝突。
預設行為
預設情況下,Zeabur 會檢查你的服務所暴露的連接埠是否正在接受 TCP 連線。對大多數網頁應用程式來說,這就足夠了——一旦你的 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 探測。