docs: 前端內網 IP 禁令 - RCA + Hard Rule v1.6
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled
E2E Health Check / e2e-health (push) Has been cancelled

事故: 2026-03-30 瀏覽器區域網路權限對話框
根因: CD 用 http://192.168.0.125:32334 建置 NEXT_PUBLIC_API_URL

已更新:
- CLAUDE.md: 新增 🔴🔴🔴 前端內網 IP 禁令章節
- HARD_RULES.md: v1.6 新增 Frontend Internal IP 規則
- LOGBOOK.md: RCA 事故回顧

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-30 01:28:38 +08:00
parent 71d6b332ff
commit 9145faf24b
3 changed files with 89 additions and 4 deletions

View File

@@ -123,6 +123,26 @@
| **部署層級** | `feedback_deployment_layer_decision.md` 🔴🔴🔴 主機/容器/K3s 必須評估 |
| **告警鏈路** | `feedback_alertchain_e2e_validation.md` 🔴🔴🔴 Alertmanager→API→Telegram |
| **Telegram Secrets** | `feedback_telegram_secrets_injection.md` 🔴🔴🔴 CD 必須自動注入 K8s Secrets |
| **🔴🔴🔴 前端內網禁令** | `feedback_docker_nextjs_api_url.md` + `feedback_sentry_local_network.md` |
---
## 🔴🔴🔴 前端內網 IP 禁令 (2026-03-30)
**詳細文件:** `feedback_docker_nextjs_api_url.md` + `feedback_sentry_local_network.md`
**絕對禁止** 在 CD 建置時使用內網 IP
```yaml
# ❌ 觸發瀏覽器「存取區域網路」權限對話框
--build-arg NEXT_PUBLIC_API_URL=http://192.168.0.125:32334
--build-arg NEXT_PUBLIC_SENTRY_DSN=http://...@192.168.0.110:9000/2
# ✅ 必須使用公網域名
--build-arg NEXT_PUBLIC_API_URL=https://awoooi.wooo.work
```
**原因**: `NEXT_PUBLIC_*` 是 build-time 變數,會寫死到 JS Bundle
---

View File

@@ -8,10 +8,10 @@
| 欄位 | 值 |
|------|-----|
| **版本** | v1.5 |
| **版本** | v1.6 |
| **建立日期** | 2026-03-20 (台北) |
| **建立者** | Claude Code |
| **最後修改** | 2026-03-26 13:00 (台北) |
| **最後修改** | 2026-03-30 02:30 (台北) |
| **修改者** | Claude Code |
### 變更紀錄
@@ -23,7 +23,8 @@
| v1.2 | 2026-03-24 | Claude Code | 新增 Deployment Verification |
| v1.3 | 2026-03-25 | Claude Code | 新增 Timezone Taipei |
| v1.4 | 2026-03-25 | Claude Code | 新增 Change Annotation + 文件資訊區塊 |
| v1.5 | 2026-03-26 | Claude Code | 關聯紅區治理 (RED_ZONES.md)
| v1.5 | 2026-03-26 | Claude Code | 關聯紅區治理 (RED_ZONES.md) |
| v1.6 | 2026-03-30 | Claude Code | 🔴🔴🔴 前端內網 IP 禁令 (瀏覽器權限事故) |
---
@@ -46,6 +47,33 @@
| **簽核 UI** | **清空內容** | **保留原始內容** | [→ Approval Preserve Content](#approval-preserve-content) |
| **時區** | **UTC/utcnow** | **台北時區 +8** | [→ Timezone Taipei](#timezone-taipei) |
| **變更追蹤** | **無註解** | **人事物+版本+台北時區** | [→ Change Annotation](#change-annotation) |
| **🔴🔴🔴 前端建置** | **內網 IP** | **公網域名** | [→ Frontend Internal IP](#frontend-internal-ip) |
---
## 🔴🔴🔴 Frontend Internal IP
**Memory:** `feedback_docker_nextjs_api_url.md` + `feedback_sentry_local_network.md`
**絕對禁止** 在 CD 建置時使用內網 IP
```yaml
# ❌ 禁止 - 觸發瀏覽器「存取區域網路」權限對話框
--build-arg NEXT_PUBLIC_API_URL=http://192.168.0.125:32334
--build-arg NEXT_PUBLIC_SENTRY_DSN=http://...@192.168.0.110:9000/2
# ✅ 正確 - 使用公網域名
--build-arg NEXT_PUBLIC_API_URL=https://awoooi.wooo.work
```
**為什麼這是 Hard Rule:**
- `NEXT_PUBLIC_*`**build-time** 變數,會寫死到 JS Bundle
- Runtime 設定 (K8s ConfigMap/Secret) 對 Next.js 無效
- 內網 IP 會觸發瀏覽器安全機制,彈出權限對話框
- UX 極差,尤其無痕模式
**2026-03-30 事故回顧:**
CD Pipeline 使用 `http://192.168.0.125:32334` 建置,導致所有 API 請求指向內網 VIP。
---

View File

@@ -5,7 +5,7 @@
---
## 📍 當前狀態 (2026-03-30 14:30 台北)
## 📍 當前狀態 (2026-03-30 02:30 台北)
| 項目 | 狀態 |
|------|------|
@@ -43,6 +43,43 @@
| **Wave 2 Worker HPA** | ✅ **已部署** (min:1 max:3, CPU 70%) |
| **Wave C-D 監控** | ✅ **全部完成** (generate + discover + coverage_report) |
## 🔴 RCA: 瀏覽器區域網路權限對話框 (2026-03-30 02:30 台北)
### 問題
瀏覽器彈出「存取區域網路上的其他裝置」權限對話框Dashboard SSE 連線失敗。
### 根因
CD Pipeline 建置時使用內網 IP
```yaml
--build-arg NEXT_PUBLIC_API_URL=http://192.168.0.125:32334 # ❌ 內網 VIP
```
`NEXT_PUBLIC_*` 是 build-time 變數,寫死到 JS BundleRuntime ConfigMap 無效。
### 修復
```yaml
--build-arg NEXT_PUBLIC_API_URL=https://awoooi.wooo.work # ✅ 公網域名
```
### 已更新文件
| 文件 | 更新內容 |
|------|----------|
| `.gitea/workflows/cd.yaml` | 改用公網域名 |
| `CLAUDE.md` | 新增前端內網 IP 禁令章節 |
| `docs/HARD_RULES.md` | v1.6 新增 Frontend Internal IP 規則 |
| `feedback_docker_nextjs_api_url.md` | 新增禁止內網 IP 說明 |
| `feedback_sentry_local_network.md` | 新增事故回顧 |
### 下一步
- 推版觸發 CD 重新建置
---
## ✅ Phase 19.4 Terminal Service API 整合 (2026-03-30 14:30 台北)
### 實作內容