thread-master/docs/product/haixun-deployment/requirements.md

5.9 KiB
Raw Permalink Blame History

Requirements: 設定驅動的多主機正式部署

Status: draft-for-review
Slug: haixun-deployment
Last updated: 2026-07-18
Implementation: not started

1. 一句話

營運者只需在本機設定檔填寫主機 IP、網域與加密機密就能把全新的 Ubuntu 24.04 VM 初始化並部署成可分開更新、重啟與擴充的 frontend、backend、worker、Redis、MinIO、Registry 與 Edge 環境。

2. 目標

R-01 設定檔是部署真相來源

  • 非機密拓撲集中在 deploy/prod/deployment.yml
  • 機密集中在 Ansible Vault 加密的 deploy/prod/secrets.vault.yml
  • 遠端不得成為設定真相來源,不要求登入遠端手動編輯 env 或 YAML。
  • 每台主機最低只需填可 SSH 的 IPSSH user/port/key 可設全域預設並允許單機覆寫。
  • WireGuard IP 預設自動分配,必要時才手動覆寫。

R-02 空 VM 可自動初始化

  • 支援全新 Ubuntu 24.04 LTS VM。
  • 初始前提僅為SSH 可達、指定使用者可 sudo、DNS 已按設定指向 Edge 與 Registry。
  • bootstrap 必須安裝 Python、Docker Engine、Compose plugin、WireGuard、UFW、chrony、fail2ban 與安全更新工具。
  • bootstrap 必須建立服務帳號、目錄、權限、Docker log rotation、TLS 與防火牆規則。
  • bootstrap 必須可重複執行且不得刪除既有資料。

R-03 元件可獨立部署

  • frontend、backend、worker、Redis、MinIO、Registry、Edge 可個別 bootstrap、deploy、restart、status 與 rollback資料層 rollback 另定義)。
  • frontend、backend、worker 不得綁在同一 release artifact。
  • 本機 build image 並 push 至自架 Registry遠端不得執行 Go/npm build。
  • 遠端在舊服務仍運作時先 pull image再以 Compose recreate/restart。
  • 設定變更可不 rebuild image單獨同步並 recreate 指定角色。

R-04 可從設定動態增加節點

  • frontend、backend、worker host list 可有任意多台。
  • 新增 worker 後不需流量註冊即可開始 claim job且每台 worker ID 必須唯一。
  • 新增 frontend/backend 後,自動重建 Edge upstream健康檢查通過後才加入流量。
  • 同一部署指令只處理設定中指定的角色或 host其他節點不得被意外重啟。

R-05 資料與狀態

  • MongoDB 使用 Atlas不再於 production Compose 自架 MongoDB。
  • Redis 第一版為獨立單機、啟用密碼與 AOF接受單點故障。
  • MinIO 第一版為獨立單機與持久 volume接受單點故障。
  • frontend/backend/worker container 應可替換;媒體物件持久化於 MinIO業務資料持久化於 MongoDBcache/lock 位於 Redis。
  • worker 的 Playwright、Node script 與 Chromium 必須封裝在 image解密 session 暫存檔只可位於 ephemeral storage 並限制權限。
  • gateway 使用的 extension ZIP 必須封裝在固定 image path不能依賴開發者本機絕對路徑。

R-06 MongoDB Atlas 初始資料庫流程

  • first deploy 必須先驗證 Atlas DNS、TLS、帳密、database name 與來源 allowlist。
  • 依序執行 forward migration、cmd/initcmd/seeder
  • migration 失敗不得切換 backend。
  • cmd/init 必須保持 idempotent僅建立 operational indexes。
  • seeder 的管理員 email、display name、password 必須由 Vault 設定。
  • 重跑 seeder 不得覆寫既有管理員密碼;改密碼必須是獨立明確操作。
  • 一般 deploy 可執行 migration但不得每次自動 seed。

R-07 網路與安全

  • 主機間服務流量走 WireGuard不直接暴露 Redis、MinIO、backend 或 crawler 到公網。
  • Edge 僅公開網站需要的 80/443Registry 只以 TLS 提供服務並要求認證。
  • Edge 與 Registry 使用 DNS + Let's Encrypt憑證自動續期。
  • Atlas 只 allowlist 固定出口 IPbackend/worker 的 Atlas 流量必須符合此出口設計。
  • frontend 與 API 使用同網域Edge 將 /api 轉送 backend/haixun-assets 轉送 MinIO。
  • crawler 只能在 worker Docker private network 內被存取,不 publish host port。
  • Vault 明文、生成的 env、Registry 密碼與私鑰不得提交 Git 或寫入 image。

R-08 維運與防呆

  • 提供 preflight、doctor、status、logs、restart、deploy-config 與 rollback 指令。
  • 所有設定先寫暫存檔並驗證,再原子替換。
  • backend/frontend 採健康節點逐台更新,不可一次停止所有副本。
  • destructive reset/wipe 不得包含在一般 deploy且必須有環境名稱與二次確認。
  • Redis、MinIO 與 Registry 必須具備備份與還原文件Atlas 備份使用 Atlas Backup/PITR。
  • 單機 Redis、MinIO、Registry、Edge 的單點風險必須在 status 與文件中明示。

3. 不在第一版範圍

  • Kubernetes。
  • Docker Swarm。
  • Redis Sentinel/Cluster。
  • 分散式 MinIO。
  • 多 Edge 高可用與自動 failover。
  • 在遠端 VM 進行應用程式編譯。
  • 自動建立 MongoDB Atlas project/cluster第一版只連接已建立的 Atlas cluster。
  • 自動修改 Atlas allowlist固定出口 IP 先由營運者配置到 Atlas。

4. 已知限制

  • 增加 worker 可提高一般 Mongo job 吞吐量,但目前 Outbox 仍被全域 Redis lock 序列化。
  • Outbox 查詢目前最多掃描 500 筆且不適合作為大規模 worker pool 的最終方案。
  • Redis、MinIO、Registry、Edge 第一版各一台時仍有單點故障。
  • gateway 現有 health endpoint 只檢查 Redis正式 rolling deployment 前需補足 Mongo readiness。

5. 驗收摘要

  • 從全新 Ubuntu 24.04 VM 開始,除 DNS/Atlas/SSH 外不需登入遠端手動操作。
  • 修改一份 host 設定加入 worker IP 後,可只部署新 worker。
  • 修改設定但不 build遠端 recreate 後能讀到新設定。
  • backend/frontend 多節點更新期間至少保留一個健康節點。
  • migration/init/seed 的順序、失敗停止與重跑安全性可驗證。
  • 公網不能直連 Redis、MinIO private API、backend private port 或 crawler。