Sentinel API v1

從第一個 API 呼叫到正式環境

Operate · Recovery

先診斷、可驗證地復原

這裡是值班分流與復原順序;可執行腳本和完整事故處置手冊只隨已驗證的 Source Kit 提供。網站不會遠端操作你的節點,也不會要求 API key。

先用對版本。下方命令必須從通過 SHA-256/revision 驗證的 Source Kit 執行;部署節點的 /v1/openapi.json 和該 kit 內 docs/api/operator-playbooks.md、deploy/api/recovery/README.md 才是版本權威。不要從網頁複製腳本到未知 checkout。

錯誤碼分流

先記錄 HTTP status、error.code、request_id、Retry-After 與聚合健康狀態;不要記錄 API key、RTSP URL、請求 body 或環境變數。完整診斷與升級條件在 Source Kit 的 docs/api/operator-playbooks.md。

穩定信號第一本手冊
source.authentication_failed · source_unreachable · rtsp_*RTSP 身分驗證、斷線或存取政策
model_unavailable · inference.capacity_exceededProvider 可用性與容量
database_capacity_exceeded · evidence_capacity_exceeded儲存壓力與復原點
delivery retrying/dead_letterWebhook 故障與有界重播
invalid_api_key · bad webhook signature密鑰/簽署密鑰洩漏

建立靜止、可驗證的備份

在受信任的 POSIX shell 中進入 kit 的 deploy/api。Windows 請使用 Ubuntu/WSL 內的獨立 checkout;這些 recovery 腳本不是 PowerShell 命令。--stop-writers 會造成短暫監控缺口,必須先核准並記錄。

install -d -m 700 /secure/sentinel-backups
cd deploy/api
./recovery/backup.sh \
  --output-dir /secure/sentinel-backups \
  --stop-writers

腳本只停止它確認屬於該 Compose 專案的 writer,使用 SQLite online backup,並保留 data、evidence 與 model cache。備份不含 .env;災難復原還需要不可變 digest 的精確 API image 與分開保管的 secret。

每份副本都要驗證

./recovery/verify.sh \
  --backup-dir /secure/sentinel-backups/sentinel-backup-ID

verify 會重算大小與 SHA-256、檢查 archive path 與 SQLite quick_check。複製到加密、受控的 off-node 儲存後要再跑一次;manifest hash 只能偵測損壞,不是簽章或不可變儲存。

只還原到新的 volume,再離線驗證

BACKUP=/secure/sentinel-backups/sentinel-backup-ID
./recovery/restore.sh \
  --backup-dir "$BACKUP" \
  --target-data-volume sentinel-restore-data-ID \
  --target-model-volume sentinel-restore-models-ID

# Review the dry-run, then authorize creation of only those new volumes.
./recovery/restore.sh \
  --backup-dir "$BACKUP" \
  --target-data-volume sentinel-restore-data-ID \
  --target-model-volume sentinel-restore-models-ID \
  --execute

./recovery/validate-restore.sh \
  --backup-dir "$BACKUP" \
  --data-volume sentinel-restore-data-ID \
  --model-volume sentinel-restore-models-ID

不得就地覆蓋 production volume。離線 byte-for-byte 驗證後,才用不同 project、network、port 與還原 volume 啟動候選 Runtime,並重跑 readiness、Source/Monitor reconcile、證據下載、Webhook backlog 與真實模型驗收。

回復上一代,不刪除任何一代

./recovery/rollback.sh --backup-dir "$BACKUP"
# Only after the read-only preflight proves volumes and exact image identity:
./recovery/rollback.sh --backup-dir "$BACKUP" --execute

Rollback 會遺失只寫入候選版本的資料。先停止新寫入,並在需要時備份候選版本。腳本不會刪除原始或候選 volume;不要添加 --volumes,也不要執行 docker system prune --volumes。