Files
awoooi/ops/config/service-registry.yaml

281 lines
9.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ops/config/service-registry.yaml
# Service Registry — 服務 Stateful 分級清單
# 版本: 2.0.0
# 建立: Claude Sonnet 4.6 / 2026-04-08 Asia/Taipei
# 維護: Gitea main + controlled CDruntime ConfigMap 必須由 renderer 精確產生
# 說明:
# BLOCK = 系統禁止自動修復,僅告警(資料風險最高)
# CRITICAL_HITL = 允許 Playbook但需 MultiSig 2票
# STANDARD_HITL = 允許 Playbook需 1票審核
# AUTO = 允許自動執行(無狀態服務)
# 參考: ADR-062, ADR-063
schema_version: service_registry_v2
governance_version: global_product_governance_v2
identity_policy:
match_mode: exact_alias_only
unknown_asset_terminal: asset_identity_unresolved
unknown_asset_auto_fallback_allowed: false
cross_domain_fallback_allowed: false
services:
# ─── BLOCK系統禁止連 Playbook 都不提供)────────────────────────────
- name: postgres
display_name: "PostgreSQL 主庫 (awoooi_prod)"
host: "192.168.0.188"
stateful_level: BLOCK
asset_domain: database
reason: "主要業務資料庫,重啟可能導致 WAL 截斷、事務回滾"
alert_only: true
containers: ["postgres"]
- name: momo-db
display_name: "PostgreSQL (momo_db)"
host: "192.168.0.188"
stateful_level: BLOCK
asset_domain: database
reason: "momo 產品資料庫,禁止自動操作"
alert_only: true
containers: ["momo-db"]
- name: langfuse-db
display_name: "PostgreSQL (Langfuse)"
host: "192.168.0.110"
stateful_level: BLOCK
asset_domain: database
reason: "LLM trace 資料庫,重啟導致追蹤資料遺失"
alert_only: true
containers: ["langfuse-db"]
- name: harbor-db
display_name: "PostgreSQL (Harbor Registry)"
host: "192.168.0.110"
stateful_level: BLOCK
asset_domain: database
reason: "Harbor Registry 資料庫,重啟可能損壞 image layer 索引"
alert_only: true
containers: ["harbor-db"]
- name: sentry-postgres
display_name: "PostgreSQL (Sentry)"
host: "192.168.0.110"
stateful_level: BLOCK
asset_domain: database
reason: "Sentry 錯誤追蹤資料庫"
alert_only: true
containers: ["sentry-postgres"]
- name: signoz-clickhouse
display_name: "ClickHouse (SignOz)"
host: "192.168.0.110"
stateful_level: BLOCK
asset_domain: database
reason: "列欄式 OLAP 資料庫;只允許具備 native backup、bounded apply、rollback 與 post-verifier 的受控重建"
alert_only: true
containers: ["signoz-clickhouse"]
# ─── CRITICAL_HITL高風險需 MultiSig 2票 ──────────────────────────
- name: redis
display_name: "Redis (AWOOOI)"
host: "192.168.0.188"
stateful_level: CRITICAL_HITL
asset_domain: database
reason: "AWOOOI 依賴 Redis 做冪等鎖與快取,重啟丟失鎖狀態"
requires_pre_backup: false
containers: ["redis"]
- name: harbor-redis
display_name: "Redis (Harbor)"
host: "192.168.0.110"
stateful_level: CRITICAL_HITL
asset_domain: database
reason: "Harbor session 快取"
containers: ["harbor-redis"]
- name: sentry-redis
display_name: "Redis (Sentry)"
host: "192.168.0.110"
stateful_level: CRITICAL_HITL
asset_domain: database
reason: "Sentry 任務佇列"
containers: ["sentry-redis"]
- name: gitea
display_name: "Gitea (程式碼倉庫)"
host: "192.168.0.110"
stateful_level: CRITICAL_HITL
reason: "restart 會殺掉活躍 SSH sessionGit push 中斷可能損壞 working copy"
requires_pre_backup: false
containers: ["gitea"]
- name: harbor
display_name: "Harbor (Container Registry)"
host: "192.168.0.110"
stateful_level: CRITICAL_HITL
reason: "重啟中斷 pull/pushGC 進行中重啟可能損壞 layer"
requires_pre_backup: false
containers: ["harbor-core", "harbor-jobservice", "harbor-portal"]
- name: minio
display_name: "MinIO (物件存儲)"
host: "192.168.0.188"
stateful_level: CRITICAL_HITL
asset_domain: storage
reason: "寫入中重啟可能導致 multipart upload 中斷"
requires_pre_backup: false
containers: ["minio"]
# ─── STANDARD_HITL中風險需 1票審核 ──────────────────────────────
- name: prometheus
display_name: "Prometheus"
host: "192.168.0.110"
stateful_level: STANDARD_HITL
reason: "有 TSDB WALexited 狀態用 docker start非 restart"
restart_command: "docker start"
containers: ["prometheus"]
- name: grafana
display_name: "Grafana"
host: "192.168.0.110"
stateful_level: STANDARD_HITL
reason: "有 SQLite 設定儲存exited 用 docker start"
restart_command: "docker start"
containers: ["grafana"]
- name: alertmanager
display_name: "Alertmanager"
host: "192.168.0.110"
stateful_level: STANDARD_HITL
reason: "有 silence 狀態exited 用 docker start"
restart_command: "docker start"
containers: ["alertmanager"]
# ─── AUTO無狀態允許自動修復 ──────────────────────────────────────
- name: wazuh-manager
canonical_id: "service:wazuh-manager"
display_name: "Wazuh Manager (host_112)"
host: "192.168.0.112"
stateful_level: AUTO
asset_domain: host_systemd
reason: "Only the bounded no-write posture catalog is enabled; active response and arbitrary service mutation remain unavailable"
executor: host_ansible_executor
verifier: iwooos_wazuh_controlled_executor_runtime
aliases: ["wazuh-manager.service"]
containers: []
allowed_catalog_ids:
- ansible:wazuh-manager-posture-readback
- name: nginx
display_name: "Nginx (反向代理)"
host: "192.168.0.110"
stateful_level: AUTO
containers: ["nginx", "nginx-188"]
- name: awoooi-api
display_name: "AWOOOI API (K3s)"
host: "k3s"
stateful_level: AUTO
asset_domain: kubernetes_workload
containers: []
- name: awoooi-web
display_name: "AWOOOI Web (K3s)"
host: "k3s"
stateful_level: AUTO
asset_domain: kubernetes_workload
containers: []
- name: blackbox-exporter
display_name: "Blackbox Exporter"
host: "192.168.0.110"
stateful_level: AUTO
containers: ["blackbox-exporter"]
- name: sentry
display_name: "Sentry (錯誤追蹤)"
host: "192.168.0.110"
stateful_level: AUTO
asset_domain: docker_container
reason: "Sentry container 只能走該 host 的 exact-container bounded PlayBook禁止 compose-wide 或跨 host fallback"
containers:
- sentry-web
- sentry-worker
- sentry-cron
- sentry-self-hosted-snuba-profiling-functions-consumer-1
allowed_catalog_ids:
- ansible:110-sentry-profiling-consumer-recovery
- name: openclaw
canonical_id: "service:openclaw:host188"
display_name: "OpenClaw / ClawBot (host_188)"
host: "192.168.0.188"
stateful_level: AUTO
asset_domain: docker_compose_container
reason: "Only the immutable-source host188 callback-forwarder PlayBook may converge this exact compose service; cross-domain fallback is forbidden"
executor: host_ansible_executor
verifier: openclaw_callback_forwarder_independent_verifier
aliases:
- clawbot
- clawbot.service
containers:
- openclaw
- clawbot
allowed_catalog_ids:
- ansible:188-openclaw-callback-forwarder
- name: langfuse
display_name: "Langfuse (LLMOps)"
host: "192.168.0.110"
stateful_level: AUTO
containers: ["langfuse-web", "langfuse-worker"]
- name: signoz
display_name: "SignOz (APM)"
host: "192.168.0.188"
stateful_level: AUTO
reason: "APM 無狀態查詢層docker compose up -d 可恢復ClickHouse 資料不受影響)"
containers: ["signoz"]
- name: bitan-app
display_name: "Bitan App"
host: "192.168.0.188"
stateful_level: AUTO
containers: ["bitan-app"]
- name: ollama
display_name: "Ollama (Local LLM)"
host: "192.168.0.188"
stateful_level: AUTO
containers: ["ollama"]
- name: momo-app
display_name: "momo Web App"
host: "192.168.0.188"
stateful_level: AUTO
containers: ["momo-app"]
- name: tsenyang-website
display_name: "Tsenyang Website"
host: "192.168.0.188"
stateful_level: AUTO
containers: ["tsenyang-website"]
- name: stock-platform
display_name: "Stock Platform"
host: "192.168.0.110"
stateful_level: AUTO
containers: ["stock-platform"]
# ─── 備份策略參考 ────────────────────────────────────────────────────────
backup_policies:
velero_max_age_hours: 4 # Velero 備份過期閾值Q2 決策)
emergency_backup_timeout: 600 # 緊急備份超時秒數
block_backup_on_high_io: true # CPU/IO > 80% 時禁止觸發備份Q4 決策)
io_threshold_percent: 80
# ─── MultiSig 設定 ───────────────────────────────────────────────────────
multisig:
critical_required_votes: 2 # CRITICAL_HITL 需要幾票
standard_required_votes: 1 # STANDARD_HITL 需要幾票
vote_expiry_minutes: 30 # 投票有效期