Files
awoooi/docs/runbooks/HOST-188-HYGIENE-MAINTENANCE-RUNBOOK.md

10 KiB
Raw Blame History

188 Host Hygiene 維護窗口 Runbook

版本2026-07-11.v3 適用範圍:192.168.0.188 host PostgreSQL 14/mainawoooi-startup.service、certbot / ACME renewal hygiene。 狀態:HOST_188_HYGIENE_GREEN


1. 目的

188 目前的產品服務、public routes 與 host hygiene 均已收斂為 green。這份 runbook 將「服務恢復」、「host hygiene」、「DR escrow」與「Wazuh registry」分開避免把 route 200、container healthy、pg_isready、exporter green 或 reset-failed 誤判成其他層級也完成。

本文件記錄 2026-06-26 已完成的 188 host hygiene 修復與後續操作邊界。它不是 DR escrow 完成證明,也不是 Wazuh / SOC runtime action 授權。未取得 owner、rollback owner、maintenance window、backup / restore evidence 與 post-check plan 前,仍不得執行資料層 break-glass、restore、未批准 renew、或其他主機寫入。


2. 最新只讀證據

2026-07-11 14:55 Asia/Taipei live evidence 取代舊 2026-06-26 baseline

層級 證據 判定
Host systemd systemctl is-system-runningrunningfailed units 0 loaded units listed host hygiene green
產品容器 MOMO、VibeWork、2026FIFA、ClawBot、MinIO、exporters、MOMO DB 等容器 healthy / up 產品服務 green
PostgreSQL runtime k3s-postgres-recovery container 為 Running=trueNetworkMode=host、restart policy unless-stoppedpg_isready -h localhost -p 5432 accepting connections production DB runtime green
Host PostgreSQL unit /etc/postgresql/14/main/start.conf=manualpostgresql@14-main.service 為 disabled / inactiverecovery container 同一 data/config mount 仍 accepting connections 避免 host/container 雙啟動競爭
Startup unit source/live SHA 為 d9b099382fbc618280241d398a2a3d2c89f004804ab793c177a25a43505ebe8dunit SHA 為 995705578f4ba50f02100f7f60f432fa86d3f37e13aaa6f1d93c1d8685a8cafbmetadata repair、kine write、ClawBot rebuild、188 SignOz 均預設 opt-in fail-closed 修復完成
Nginx / ACME route sentry.wooo.workgitea.wooo.worklangfuse.wooo.worksignoz.wooo.work HTTP-01 self-test token 均由 /var/www/html 正確回應 challenge route green
certbot timers duplicate apt certbot.timer 已停用snap snap.certbot.renew.timer enabled / active / waitingcertbot.servicesnap.certbot.renew.service Result=success / inactive renewal runner hygiene green
public cert sentry.wooo.work certificate notAfter=2026-09-24 13:44:28 UTCsnap renew timer enabled / waiting certificate readback green

controlled reconcile receipt/usr/local/sbin/awoooi-host188-hygiene reconcilePRODUCT_SERVICE_RESTARTS=0rollback 為 /var/lib/awoooi-host188-hygiene/backups/host188-hygiene-20260711T145537+0800-334605-before-reconcile。獨立 checklist 回 PASS=17 WARN=1 BLOCKED=0HOST_HYGIENE_BLOCKED=0warning 只說明 pg_lsclusters 看不到 container-owned PID model不是 DB 不可用。


3. GO / NO-GO

Gate GO 條件 NO-GO 條件
服務層 MOMO / VibeWork / 2026FIFA / SignOz / public routes 可用 產品 route 或 DB 容器同時故障時,先走 incident triage
PostgreSQL DB owner 確認 host 14/main 是否仍為 authoritative source 無法確認用途就不得 reset / disable / restore
Backup 有可追溯 backup ref、restore target isolation、rollback owner 沒有 backup / restore evidence 就不得 pg_resetwal 或 restore
certbot DNS / ACME / public gateway owner response acceptedrate-limit 冷卻期明確 ACME route 未確認、仍被 rate-limit、或缺 rollback owner
維護窗口 owner、窗口、post-check、operator notification 完整 只有「服務看起來綠」或「想清 failed units」

4. PostgreSQL 14/main 決策樹

  1. 先判定用途

    • 是否仍被任何 production service 使用。
    • 是否只是舊的 host cluster產品 DB 已由 containerized PostgreSQL 接管。
    • 是否仍承載 K3s Kine、MOMO、monitoring、legacy app 或 operator tooling。
  2. 若確認 host cluster 已廢棄

    • 準備 owner disposition廢棄原因、affected scope、最後 backup / dump ref、保留期限。
    • 維護窗口內才可停用 unit 或調整 startup script 的 host PG dependency。
    • 停用後仍需 post-checkpublic routes、MOMO health、SignOz、exporters、backup-status、cold-start。
  3. 若確認 host cluster 仍需要保留

    • 先建立隔離 restore target不直接覆蓋 production data directory。
    • 先比對 backup / WAL / data directory metadata。
    • 只有 DB owner 明確接受資料風險與 rollback plan 後,才可進入 break-glass 修復。
  4. 禁止預設路徑

    • 不得直接 pg_resetwal
    • 不得直接 rm -rf /var/lib/postgresql/14/main
    • 不得直接 systemctl reset-failed 假綠。
    • 不得把 container momo-db healthy 當成 host 14/main healthy。

5. certbot / ACME 決策樹

  1. 先停止誤判

    • certbot.service failed 目前代表 renewal 未成功,不代表現有憑證立即失效。
    • sentry.wooo.work cert 仍有效到 2026-07-09 16:03:40 UTC
  2. 先做 owner evidence

    • domain / SAN / shared certificate coverage ref。
    • ACME challenge route owner。
    • renewal owner。
    • rollback owner。
    • validation plan。
  3. 維護窗口內才可做

    • nginx -t
    • ACME challenge route smoke。
    • certbot dry-run 或 renew。
    • Nginx reload。
  4. 禁止事項

    • rate-limit 期間反覆 renew。
    • 未確認 challenge route 就 renew。
    • 同時保留 apt certbot timer 與 snap certbot timer 的重複失敗狀態。
    • 貼出 private key、ACME account key、DNS credential、未脫敏 certbot log。

6. 維護窗口最小步驟

此段只定義順序;不代表目前已批准執行。

Phase 0一鍵只讀 preflight

在 repo 工作站先執行只讀 checklist它不會 restart、reload、renew、reset-failed、restore、pg_resetwal 或寫入遠端狀態。

SSH_BATCH_MODE=yes bash scripts/reboot-recovery/188-host-hygiene-maintenance-checklist.sh --no-color

目前預期結果是:

SERVICE_GREEN=1
HOST_HYGIENE_BLOCKED=0
RUNTIME_ACTION_AUTHORIZED=0
Result: HOST_188_HYGIENE_GREEN.

Phase A維護前只讀快照

systemctl --failed --no-pager
pg_lsclusters
systemctl status postgresql@14-main.service --no-pager
systemctl status certbot.service snap.certbot.renew.service --no-pager
docker ps --format '{{.Names}}\t{{.Status}}\t{{.Ports}}'
/backup/scripts/backup-status.sh --no-notify
/home/wooo/scripts/full-stack-cold-start-check.sh --monitor-read-only --no-color --watch --interval 1 --max-attempts 1

Phase Bowner 決策

決策 必填 evidence
host PostgreSQL 廢棄 owner disposition、affected services、last backup ref、retention owner
host PostgreSQL restore source backup ref、isolated restore target、checksum / row-count plan、rollback owner
certbot route 修復 certificate coverage ref、ACME owner、challenge route plan、post-renew validation

Phase C受控修復

先安裝固定動作 executor再分開執行 check / reconcile

scripts/reboot-recovery/bootstrap-host188-hygiene-executor.sh --check
scripts/reboot-recovery/bootstrap-host188-hygiene-executor.sh --apply
ssh ollama@192.168.0.188 'sudo -n /usr/local/sbin/awoooi-host188-hygiene check'
ssh ollama@192.168.0.188 'sudo -n /usr/local/sbin/awoooi-host188-hygiene reconcile'

executor 只能安裝 canonical startup source/unit、將 PG start mode 設為 manual、daemon-reload 與 reset stale failed state不能 start/restart/stop 產品、Docker、Nginx 或 PostgreSQL。回滾只允許 sudo -n /usr/local/sbin/awoooi-host188-hygiene rollback-latest

Phase Dpost-check

systemctl --failed --no-pager
pg_lsclusters
curl -fsS https://mo.wooo.work/health
curl -fsS https://stock.wooo.work/api/v1/system/freshness
curl -fsS https://awoooi.wooo.work/api/v1/health
/backup/scripts/backup-status.sh --no-notify --no-refresh
/home/wooo/scripts/full-stack-cold-start-check.sh --monitor-read-only --no-color --watch --interval 1 --max-attempts 1

成功標準:

  • 產品 routes 仍綠。
  • backup core 仍 core_blockers=0
  • cold-start 維持 WARN=0 BLOCKED=0
  • 若 owner 決定 host PG 廢棄systemd failed unit 必須以 owner disposition 收斂,不可只是 reset-failed。
  • 若 owner 決定 host PG 修復,必須有 restore / data integrity evidence。
  • 若 certbot 修復,必須有 cert notAfter、ACME route、Nginx config test 與 reload evidence。

7. 目前完成度

Lane 完成度 說明
服務恢復 100% routes、containers、cold-start、backup core 已 green
188 host hygiene repair 100% startup fail-closed、PostgreSQL runtime-ready 判斷、systemd failed units、ACME route 與 certbot timer hygiene 已收斂
PostgreSQL runtime source-of-truth 100% production DB runtime 以 k3s-postgres-recovery host-network container + pg_isready 判斷,不用 host pg_lsclusters 假紅
certbot / ACME route hygiene 100% snap renew timer activecertificate 有效到 2026-09-24續依正常 timer 監控
DR escrow 100% 2026-07-11 checklist 回 escrow_missing=0,但仍與 host hygiene 分開記錄
Wazuh registry NOT_EVALUATED_THIS_RUN 本輪 188 checklist 未取得 fresh manager registry acceptance不得沿用舊值作目前結論

8. 不得宣稱

  • 不得用 188 host green 單獨宣稱全平台 DR completeDR 必須讀同一輪 backup/escrow scorecard。
  • 不得宣稱 Wazuh registry recovered本輪沒有 fresh manager registry acceptance readback。
  • 不得因 certificate 目前有效就停用 snap renew timer / expiry 告警。
  • 不得把 reset-failed 單獨當成修復完成;本次完成是因 startup source、Nginx ACME route、timer split 與 postcheck 同時收斂。
  • 不得宣稱這份文件批准任何新的 runtime action。