FR-184 · 需求索引 · 本頁由 build 掃資料夾生成

FR-184 主系統上 GCP(一台 VM、Terraform)

狀態:已開卡待派(母卡 CM-3643) 文件 2 份 handoff 2 份
§1

🔴 先看哪一份

文件 性質 什麼時候看
discussion.md 需求討論稿 想知道為什麼 VM 不是 K8s、每月多少錢、十個服務怎麼跑、D1~D8 要裁什麼
design.md 設計(定稿 v1.0) 要知道定了什麼、六張卡怎麼切、怎麼驗收
~/Projects/Billows/Audit-Manager/guidant-ai-infra 程式碼 Terraform 本體,真相以 repo 為準
§2

結論

D1~D8 已裁(2026-11-07):一台 GCE VM 跑既有安裝版,主產品只改 Turnstile 開關;e2-standard-2(2 核 8 GB)+8 GB swap、GCP 台灣;DEPLOYMENT_MODE=host(saas 兩個既有缺口另開 FR);Turnstile 開,裝機時 install.conf 填兩把 key(主產品改成有填 key 就開,同一包落地版與雲端版通用);DB/Redis 密碼決策者自帶、Secret Manager 只建殼;80/443 只放行 Cloudflare;Brevo 587 寄信;License Center 鎖 VM IP;出版管線 gcp-prod 比照 POC 要按 ▶。六張卡五批,apply 類兩張首腦親手做。像但不做:K8s(有 SLA 再開)、saas 模式、Turnstile 後台設定頁(之後另做)。

§3

📊 總進度

棒次 Notion 卡 做什麼 狀態
前置 — GCP 專案 guidant-ai-cloud-514012、帳單、API、state bucket;infra repo 骨架 ✅ 2026-11-07
討論稿 — discussion.md ✅ 2026-11-07 審過
設計 — design.md v1.0、handoff/cards.py 驗批 ✅ 2026-11-07
T1 CM-3644 Terraform 平台 module 到 plan ✅ 2026-11-07
T2 CM-3645 建機與 DNS(首腦親手) ✅ 2026-11-08
Turnstile — 主產品改成有填 key 就開(BE a108ab505、FE f95a85b8),取代 F1、T4 ✅ 2026-11-08(待重出包)
T3 CM-3646 裝機與開通(首腦親手) ⬜
P1 CM-3647 出版管線 gcp-prod ⬜
O1 CM-3648 備份、告警、災難復原 ⬜
F1 CM-3650 FE 加雲端 build mode(Turnstile) 取消 2026-11-08
T4 CM-3651 雲端 FE image 換上 VM、BE 開 Turnstile 取消 2026-11-08
V1 CM-3649 驗收與收口(批 5) ⬜
§4

需求討論紀錄

  • 2026-11-07 決策者:想把主系統部署到 GCP,要自動化、要 Terraform、未來換平台也能支援。
  • 2026-11-07 決策者:一套就好,stg 先不做,急著上。
  • 2026-11-07 決策者:自己營運、POC 階段;問 K8s 費用後裁「POC 走 VM」。
  • 2026-11-07 決策者:規格先 16 GB;Agent 裝在客戶端不用管;寄信走 Brevo;LC 鎖 IP 或 access token;CI 不要多一種。
  • 2026-11-07 決策者:第一個 GCP 帳單帳戶被 Google 風控關閉,重建帳單帳戶與專案 guidant-ai-cloud-514012 後恢復;舊專案不刪。
  • 2026-11-07 首腦探脈:DEPLOYMENT_MODE=saas 有兩個既有缺口(總部判定、更新中心認照),列 D1 建議第一期跑 host。
  • 2026-11-07 決策者裁 D1~D8:D1 host、D2 Turnstile 關、D3 先 8 GB(首腦建議 16 GB,決策者裁 8、可再調)、D4 密碼自帶、D5~D8 照建議。
  • 2026-11-07 決策者觀察「現在的 host 其實也是 saas 模式」——首腦確認:DEPLOYMENT_MODE 真正控制的是信任模型(綁不綁機、能不能關執法、誰算總部),不是能不能多租戶;改名列入 saas FR。
  • 2026-11-07 首腦開卡:母卡 CM-3643、子卡 CM-3644~3649(六張四批);infra repo 登記進工作坊(toml [repos]、Notion Repo 選項、規範檔、hook)。等決策者在工作坊派批 1(T1)。
  • 2026-11-07 決策者前置全部備妥:Cloudflare 權杖(只有 DNS 編輯)+Zone ID 進 infra .env;網址 guidant-ai.jedicotech.com;Brevo 網域驗證、寄件人 noreply@jedicotech.com、四筆 DNS 加進 Cloudflare;Anthropic 金鑰決策者保管;Secret Manager 六個密碼 secret 決策者親手建。T1 的 Secret Manager 段改為「讀既有、綁 IAM、不建」,已回寫 CM-3644/CM-3643。AI 與 SMTP 金鑰定走後台填(不進 .env)。
  • 2026-11-07 決策者改判 D2:Turnstile「我需要,這是必要的」,不接受 POC 關著上線。首腦查實 FE site key 是 build 時烙入、BE secret 是執行期 .env、installer 寫死 TURNSTILE_ENABLED=false;拆 F1(fe,CM-3650,批 4)+T4(infra,CM-3651,批 5),V1 移批 6。決策者已在 Cloudflare 建小工具 Guidant AI Cloud For GCP(主機名稱要填 guidant-ai.jedicotech.com,不是根網域)。
  • 2026-11-08 決策者:「不能加個判斷嗎?有給 key 就開,沒有的話之後要可以在系統裡面讓 admin 設定」。首腦直接改主產品(BE a108ab505、FE f95a85b8,已 push):兩把都填真 key 才開,後端驗 token、登入頁、前門 CSP 同一判定;key 放 compose .env、install.conf 可帶。順帶發現前門 CSP 原本會擋 Turnstile,原 F1/T4 做法開不起來。F1、T4 取消,V1 移批 5;admin 後台設定之後另做。1.30.0 要重出包才帶到。
  • 2026-11-08 決策者:「升級走線上更新,出包我自己跑」。D8 改為平常走更新中心、只收正式發版;P1 直接部署保留、定位救火用。
§5

文件

以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。

需求與討論

文件 類型 標題 最後更新
discussion / md 需求討論稿 主系統上 GCP 2026-11-07

設計

文件 類型 標題 最後更新
design / md 設計 設計 v1.0:一台 GCE VM 跑既有安裝版,Terraform 建機 2026-11-08

交接與收口時間軸(handoff/,2 份)

由新到舊。每份是某一棒次交接當下的完整現況快照,看某個時間點「當時知道什麼」請從這裡進。

日期 文件 標題
2026-11-08 FR-184-STATE / md FR-184 交接現況(STATE)
2026-11-08 FR-184-LOG / md FR-184 交接紀錄(LOG)

資產子資料夾(無文件,不建頁):diagrams/(4 個檔)

§6

Notion 卡

卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。

關係 卡號 標題 狀態
母案 CM-3643 FR-184 主系統上 GCP(6 張卡 4 批) —
子卡 CM-3644 — —
子卡 CM-3645 — —
子卡 CM-3646 — —
子卡 CM-3647 — —
子卡 CM-3648 — —
子卡 CM-3649 — —
子卡 CM-3650 — —
子卡 CM-3651 — —