Tech Copilot

February 5, 2026
在 YouTube 觀看

tech-copilot

tech-copilot

全球個案管理系統 (GCMS) - 生產環境上線計畫書


開篇說明

本文件為「全球個案管理系統 (Global Case Management System, GCMS)」首次導入八個國家的生產環境(Production)上線計畫書。其目的在於提供一份清晰、可執行的技術藍圖,確保系統上線過程的流暢、穩定與成功。本文將作為所有相關技術團隊在部署、遷移及驗收階段的共同執行依據,以達成專案既定目標。


📋 目錄

  1. 專案背景與上線目標
  2. 核心架構與導入策略
  3. 關鍵任務:舊資料遷移計畫
  4. 生產環境上線技術檢核清單
  5. 人員配置表
  6. 雲端資源架構與相互依賴說明
  7. 上線後測試計畫
  8. 關鍵里程碑與上線決策
  9. ⭐ 各職位上線查檢表
  10. 附錄 A:快速參考

1. 專案背景與上線目標

1.1 專案的戰略意義

GCMS 的導入,是慈濟全球個案管理數位化轉型的關鍵一步。本專案旨在建立一個統一、標準化的數位平台,用以取代傳統手工作業模式及各地分散的舊有系統。本次八國同步上線,是提升營運效率與資料品質的基石。

1.2 核心目標分析

  • 系統穩定性 (System Stability):確保系統架構與資源配置能承受八國首波上線負載。
  • 資料完整性 (Data Integrity):確保歷史個案資料正確無誤地遷移至新系統。
  • 使用者就緒度 (User Readiness):確認各國種子成員及終端使用者完成操作培訓。

1.3 專案範疇總覽

項目說明
系統名稱全球個案管理系統 (Global Case Management System)
首波導入國家菲律賓、馬來西亞、尼泊爾、印度、美國、墨西哥、南非、莫三比克
支援語系繁體中文、英文、西班牙文

1.4 過渡說明

下一章節將深入探討技術架構與分階段導入策略。


2. 核心架構與導入策略

2.1 架構與流程概述

GCMS 成功依賴穩健技術架構及分階段導入流程,引導各國團隊從啟動至全面推廣。

2.2 系統核心模組

  • Vital CaseBridge (CB):個案管理流程核心引擎。
  • Vital BizForm (BF):表單建立與資料收集模組。

2.3 導入流程

  1. 階段一:Kickoff 與導入訪談 (課程 0-1)
    • 核心任務:確認各國導入需求,針對 CaseBridge 流程進行訪談。
  2. 階段二:系統設定與種子人員培訓 (課程 2-3.1)
    • 核心任務:生產環境帳號授權與試用站台供裝,對「種子成員」進行系統教學。
  3. 階段三:資料盤點與遷移實作 (課程 3.2)
    • 核心任務:整理歷史資料至標準 EXCEL,準備自動化遷移。
  4. 階段四:全面推廣與報表應用 (課程 4-5)
    • 核心任務:全員操作教學與報表應用課程。

2.4 過渡說明

舊資料遷移是技術挑戰最高的環節,下一章將深入分析。


3. 關鍵任務:舊資料遷移計畫

3.1 遷移計畫的重要性

資料遷移風險最高,任何錯誤都可能影響個案服務。

3.2 遷移範圍

  • 個案資料表
  • 長期濟助申請單
  • 臨時濟助申請單
  • 訪視記錄單(暫不處理「提報」資料)

3.3 技術執行邏輯與規則

  • 當地團隊整理舊資料至標準 EXCEL。
  • 技術團隊透過 API 將資料寫入 Vital BizForm。
  • 規則:所有使用者帳號須建立完成,否則資料無法匯入。

3.4 效能評估

  • 10,000 個個案 × 4 張表單 × 3 次 API 呼叫 = 120,000 次 API Call
  • 預計完成時間:約 12 小時
  • 建議於離峰或維護時段執行。

3.5 過渡說明

下一章提供生產環境技術檢核清單。


4. 生產環境上線技術檢核清單

4.1 生產資源與設定清單(來源:/home/dennis_yin/tzuchiK8s)

項目內容來源狀態
雲端資源命名AKS aks-uat-casebridge-japaneast、ACR acruatcasebridgejp、Storage stuatcasebridgejp、MySQL mysql-uat-casebridge-japaneast、Log log-uat-casebridge-japaneast、AGW agw-uat-casebridge-japaneast、Key Vault kv-uat-casebridge-japaneastK8s-UAT/AzureScripts/rg-uat-casebridge-japaneast.md[ ]
MySQL 連線Host mysql-uat-casebridge-japaneast.mysql.database.azure.com:3306、User mysqluatcb、DB vitalcasebridge、密碼 Secret CB_PLT_MYSQL_ROOT_SECRET;.NET 使用 DatabaseSettings__Server/Port/User/Password/Database,需啟用 Azure MySQL SSL 與 AKS 防火牆白名單K8s-UAT/Changelog.md;K8s-UAT/K8sScripts/base/casebridge-configmap.yaml[ ]
Azure Blob 儲存帳號 casereportstorage01、容器 casereport、SAS Secret CB_PLT_AZURE_BLOB_SAS_TOKEN;服務端環境變數 AZURE_BLOB_ACCOUNTAZURE_BLOB_CONTAINERAZURE_BLOB_SAS_TOKENAZURE_BLOB_CONNECTION_STRING(pettycash-service 支援 Connection String)K8s-UAT/K8sScripts/base-backup-20251030-110804/apps-config.yaml;pettycash-service/README.md[ ]
核心 ConfigMap/SecretConfigMap:CB_PLT_CONFIG_SERVER_URL/LABEL/FAIL_FAST_ENABLEDCB_PLT_CONSUL_HOST/PORT/URLCB_PLT_REDIS_HOST/PORTCB_AUTH_JWT_ISSUER_URLCB_AUTH_JWT_JWKS_URLCB_AUTH_JWT_VALID_AUDIENCESCB_OBS_LOGSTASH_HOST/PORT;Secret:CB_PLT_REDIS_SECRETCB_AUTH_GATEWAY_PROVISIONING_SECRETCB_AUTHN_OAUTH_CLIENT_ID/SECRETCB_PLT_MYSQL_ROOT_SECRETcasebridge-authn-keypairK8s-UAT/K8sScripts/k8s_env.md;K8s-UAT/K8sScripts/base/casebridge-secrets.yaml[ ]
應用服務額外設定Mail: CB_APP_MAIL_SENDGRID_SECRET;territory-service DatabaseSettings__* 對應 MySQL;報表/BizForm/Genogram/PettyCash 依賴 Consul + MySQL + Blob(與上列 ConfigMap/Secrets 對齊)K8s-UAT/K8sScripts/k8s_env.md;服務 README[ ]
前端環境變數FRONTEND_NODE_ENVFRONTEND_API_BASE_URLFRONTEND_BIZFORM_URLFRONTEND_TRUSTED_ORIGINSFRONTEND_SSO_URLFRONTEND_CLIENT_IDK8s-UAT/K8sScripts/k8s_env.md[ ]

微服務資源依賴檢查:

MicroService NameMySQLBlobRedisImage Name (ACR)
api-gatewayNNYacruatcasebridgejp.azurecr.io/casebridge/api-gateway:<tag>
authn-serviceNNYacruatcasebridgejp.azurecr.io/casebridge/authn-service:<tag>
authp-serviceYNYacruatcasebridgejp.azurecr.io/casebridge/authp-service:<tag>
authz-serviceNNYacruatcasebridgejp.azurecr.io/casebridge/authz-service:<tag>
blacklist-serviceNNYacruatcasebridgejp.azurecr.io/casebridge/blacklist-service:<tag>
mail-serviceNNNacruatcasebridgejp.azurecr.io/casebridge/mail-service:<tag>
vital-bizform-serviceTBDTBDNacruatcasebridgejp.azurecr.io/casebridge/bizform-service:<tag>
genogram-serviceTBDTBDNacruatcasebridgejp.azurecr.io/casebridge/genogram-service:<tag>
territory-serviceYNNacruatcasebridgejp.azurecr.io/casebridge/territory-service:<tag>
todo-serviceTBDNNacruatcasebridgejp.azurecr.io/casebridge/todo-service:<tag>
reporting-service (vitalbizformrptservice)YYNacruatcasebridgejp.azurecr.io/casebridge/reporting-service:<tag>
pettycash-serviceTBDYNacruatcasebridgejp.azurecr.io/casebridge/pettycash-service:<tag>
tenant-serviceYNNacruatcasebridgejp.azurecr.io/casebridge/tenant-service:<tag>
vital-casebridge-web (frontend)NNNacruatcasebridgejp.azurecr.io/casebridge/vital-casebridge-web:<tag>

圖例:Y = 需要 (Yes),N = 不需要 (No),TBD = 待確認 (To Be Determined)

外部資源設定說明:

資源K8s ConfigMap/Secret服務環境變數範例說明
MySQLConfigMap: CB_PLT_MYSQL_HOST/PORT/USERNAME;Secret: CB_PLT_MYSQL_ROOT_SECRET(K8s-UAT/K8sScripts/base/casebridge-configmap.yaml, casebridge-secrets.yaml).NET: DatabaseSettings__Server/Port/User/Password/Database;Spring: MYSQL_HOST/PORT/USERNAME/PASSWORD(映射同鍵)需開啟 Azure MySQL SSL、將 AKS 出口列入防火牆;預設 DB vitalcasebridge
Blob StorageConfigMap: CB_PLT_AZURE_BLOB_ACCOUNTCB_PLT_AZURE_BLOB_CONTAINER;Secret: CB_PLT_AZURE_BLOB_SAS_TOKEN(base-backup-20251030-110804/apps-config.yaml, casebridge-secrets.yaml).NET: AZURE_BLOB_ACCOUNTAZURE_BLOB_CONTAINERAZURE_BLOB_SAS_TOKENAZURE_BLOB_CONNECTION_STRING(pettycash-service 支援 ConnectionString)用 SAS Token 或 ConnectionString 二選一;容器預設 casereport,帳號 casereportstorage01
RedisConfigMap: CB_PLT_REDIS_HOST/PORT;Secret: CB_PLT_REDIS_SECRET(casebridge-config/casebridge-secrets)Spring: REDIS_HOSTREDIS_PORTREDIS_PASSWORD供 core 服務 (gateway/auth*/blacklist) 使用;密碼不可留空,確認與 credentials.json 一致。

4.2 基礎設施與權限申請 (Provisioning)

  • 帳號中心申請:取得 Ingress 入口 IP (外對內呼叫服務) 找Matt申請
  • 供裝中心申請:取得 Ingress 入口 IP (外對內呼叫服務) 找Matt申請
  • 授權中心申請:取得 Egress 出口 IP (內對外呼叫服務) 找David設定

4.3 K8s 與環境配置 (Infrastructure as Code)

  • YAML/壓模檔校核:Deployment CPU/Memory 限制符合負載預估
  • ConfigMap & Secrets:確認語系資料庫連線字串與金鑰
  • 環境一致性:Prod 與 QA 配置同步更新

4.4 CI/CD 與自動化流水線 (Pipeline)

  • CICD 流水線測試:部署測試通過,可推播至全球叢集
  • 部署腳本確認:Migration & 初始化腳本確認具等冪性

4.5 品質保證與驗收 (QA & Testing)

  • Staging 壓力測試:模擬 120,000 次 API Call 並通過效能指標
  • QA 驗收通過:功能、回歸及多國語系檢查完成
  • 監控 & 日誌啟動:Grafana/Prometheus 與 ELK/Loki 已連線

4.6 資料保護與救援 (Backup & Recovery)

  • 資料庫備份:正式上線前完成全量備份
  • 維運文件更新:系統手冊、API 文件及 DR Plan 已更新
  • 容器映像備份:所有 ACR 映像已備份至 tar 檔案
  • 配置備份:credentials.json、env.json、K8s YAML 已納入版控

5. 人員配置表

5.1 核心團隊角色與職責

本次上線專案需要跨職能團隊協作,以下為建議的人員配置與職責分工:

專案管理層

角色人數職責關鍵交付物
產品負責人 (PO)1統籌專案進度、需求確認、UAT 驗收、業務優先級決策專案計畫、週報、驗收標準、測試案例清單

技術團隊

角色姓名職責關鍵技能需求
Tech LeaderNealAzure 架構設計、容量規劃、技術決策Azure AKS, Istio, 微服務架構
DevOps 工程師(待補充)K8s 部署、CI/CD 建置、監控設定Kubernetes, Helm, Azure CLI, GitLab CI
後端工程師Kevin, Ken, 又升, Peter微服務配置、資料遷移腳本、API 測試、資料庫管理Spring Boot, .NET Core, MySQL
前端工程師EvenReact 前端部署、環境變數配置React, Nginx, 環境配置

業務與訓練團隊

角色人數職責
各國種子成員8-16接受培訓、協助本地測試、回報問題
培訓講師2準備教材、執行線上/線下培訓
技術支援1-2上線期間 24 小時待命、處理緊急問題

5.2 上線前責任分配矩陣 (RACI)

任務POTech LeaderDevOps後端前端
Azure 資源建立ARCII
K8s 叢集部署ARRCC
微服務配置ACRRC
前端部署ACCCR
資料庫遷移與管理ACIRI
SSL 憑證設定ARRII
監控與告警ARRCI
UAT 測試執行A/RICCC
教育訓練A/RIIII
Go-Live 決策ARRCC

RACI 圖例

  • R = Responsible (執行者):實際執行該任務的人
  • A = Accountable (負責者):對任務結果負最終責任的人,每個任務只能有一個 A
  • C = Consulted (諮詢者):在決策前需要諮詢意見的人,雙向溝通
  • I = Informed (知會者):需要被告知進度或結果的人,單向溝通

5.3 上線期間值班表建議

第一週 (上線關鍵期)

yaml
1T+0 (上線日): 2 - 全體技術團隊現場或線上待命 3 - 技術支援 24 小時輪班 (3 班制) 4 5T+1 到 T+3: 6 - DevOps + DBA 核心值班 7 - 其他團隊 on-call 支援 8 9T+4 到 T+7: 10 - 技術支援正常值班 11 - 監控告警自動化

6. 雲端資源架構與相互依賴說明

6.1 整體架構概覽

CaseBridge 生產環境採用 Azure 雲端平台,部署於 Japan East 區域。

核心架構圖 (Mermaid)

Loading diagram...

6.2 資源清單與依賴關係

Azure 基礎資源

資源名稱資源類型SKU/規格用途依賴
rg-prod-casebridge-japaneastResource Group-所有資源的邏輯容器-
pip-prod-casebridge-japaneastStatic Public IPStandardAKS Ingress 入口-
aks-prod-casebridge-japaneastAKS ClusterStandard_D2as_v5 × 2 nodesKubernetes 運行環境Public IP
acrprodcasebridgejpContainer RegistryStandardDocker 映像儲存-
mysql-prod-casebridge-japaneastAzure MySQLFlexible Server業務資料庫AKS 網路白名單
stprodcasebridgejpStorage AccountStandard_LRS報表與檔案儲存-
eh-prod-casebridge-japaneastEvent Hubs NamespaceStandardKafka 訊息佇列 (可選)-

微服務資源依賴矩陣

服務名稱MySQLBlobRedisSSOLogstashACR 映像
api-gatewaycasebridge/api-gateway
authn-servicecasebridge/authn-service
authp-servicecasebridge/authp-service
authz-servicecasebridge/authz-service
blacklist-servicecasebridge/blacklist-service
mail-servicecasebridge/mail-service
territory-servicecasebridge/territory-service
vital-bizform-servicecasebridge/bizform-service
genogram-servicecasebridge/genogram-service
reporting-servicecasebridge/reporting-service
pettycash-servicecasebridge/pettycash-service
todo-servicecasebridge/todo-service
tenant-servicecasebridge/tenant-service
vital-casebridge-webcasebridge/vital-casebridge-web

資源依賴圖例

  • = 需要 (Required):該服務必須連接此資源才能正常運作
  • = 不需要 (Not Required):該服務不依賴此資源

6.3 關鍵配置項目

MySQL 連線配置

yaml
1主機: mysql-prod-casebridge-japaneast.mysql.database.azure.com 2埠號: 3306 3用戶: mysqluatcb 4資料庫: vitalcasebridge 5SSL: 必須啟用 6防火牆: 需將 AKS 節點 IP 加入白名單

使用此資源的服務:authp, territory, bizform, genogram, reporting, pettycash, todo, tenant

Azure Blob Storage 配置

yaml
1帳號名稱: stprodcasebridgejp 2容器名稱: casereport 3端點: https://stprodcasebridgejp.blob.core.windows.net/ 4認證方式: SAS Token 或 Connection String 5SAS 有效期: 2035-12-23

使用此資源的服務:reporting, pettycash, bizform, genogram

Redis 配置

yaml
1類型: K8s StatefulSet (非 Azure Cache) 2服務名稱: auth-redis.casebridge.svc.cluster.local 3埠號: 6379 4持久化: 使用 PVC 5密碼: 存於 K8s Secret (CB_PLT_REDIS_SECRET)

使用此資源的服務:api-gateway, authn, authp, authz, blacklist

Logstash 日誌收集

yaml
1Namespace: observability 2服務名稱: logstash.observability.svc.cluster.local 3埠號: 5044 4用途: 集中式日誌收集

使用此資源的服務:所有微服務 (除 Frontend)

6.4 外部服務依賴

SSO 帳號中心

yaml
1SSO URL: https://member.gsscloud.com 2依賴服務: authn-service, vital-casebridge-web 3用途: 單一登入認證 4網路需求: AKS 需要能存取外網

Let's Encrypt 憑證

yaml
1發證機構: Let's Encrypt (透過 cert-manager) 2Issuer: letsencrypt-prod 3憑證類型: TLS/SSL (HTTPS) 4自動更新: cert-manager 管理 5網路需求: AKS 需要能存取 Let's Encrypt ACME API

6.5 啟動順序依賴

為確保服務正常啟動,建議依照以下順序:

Loading diagram...

7. 上線後測試計畫

7.1 測試階段規劃

Loading diagram...

7.2 煙霧測試 (Smoke Test) - T+0 立即執行

目的

確認所有關鍵服務已成功啟動並可正常回應。

測試步驟

Step 1: 檢查 Pod 狀態

bash
1# 所有 Pod 應為 Running 狀態 2kubectl get pods -n casebridge 3 4# 預期結果:所有 Pod STATUS = Running,READY = 1/1 或 2/2

Step 2: 檢查服務端點

bash
1# 檢查 Istio Gateway 是否取得 External IP 2kubectl get svc -n casebridge istio-ingressgateway 3 4# 預期結果:EXTERNAL-IP 欄位顯示 4.189.160.191

Step 3: 測試 API Gateway 健康檢查

bash
1curl -k https://cbuat.vitalcb.com/api/actuator/health 2 3# 預期回應:{"status":"UP"}

Step 4: 測試前端頁面

bash
1# 在瀏覽器開啟 2https://cbuat.vitalcb.com 3 4# 預期結果:正常顯示登入畫面,無 SSL 憑證錯誤

Step 5: 測試登入功能

1. 使用測試帳號登入 2. 確認可成功導向至 Dashboard 3. 檢查 JWT Token 是否正確核發

驗收標準

  • ✅ 所有 Pod 處於 Running 狀態
  • ✅ API Gateway 回應 HTTP 200
  • ✅ 前端頁面可正常載入
  • ✅ 登入功能正常運作

7.3 健康檢查 (Health Check) - T+0

Spring Boot Actuator 端點檢查

bash
1# 定義服務列表 2SERVICES=("api-gateway" "authn-service" "authp-service" "authz-service" \ 3 "blacklist-service" "mail-service" "territory-service") 4 5# 檢查每個服務的健康狀態 6for svc in "${SERVICES[@]}"; do 7 echo "Checking $svc..." 8 kubectl exec -n casebridge deploy/$svc -- \ 9 curl -s http://localhost:8080/actuator/health | jq '.status' 10done 11 12# 預期結果:所有服務回應 "UP"

資料庫連線檢查

bash
1# 從任一需要 MySQL 的 Pod 測試連線 2kubectl exec -it -n casebridge deploy/authp-service -- bash 3 4# 在 Pod 內執行 5mysql -h mysql-prod-casebridge-japaneast.mysql.database.azure.com \ 6 -u mysqluatcb -p \ 7 -e "SELECT 1;" 8 9# 預期結果:成功連線並返回結果

Blob Storage 連線檢查

bash
1# 檢查 reporting-service 的 Blob 連線 2kubectl logs -n casebridge deploy/reporting-service --tail=50 | grep -i blob 3 4# 預期結果:無連線錯誤或認證失敗訊息

7.4 核心功能測試 - T+0 到 T+1

測試案例清單

編號測試項目測試方法負責人預期結果
TC-001使用者註冊手動測試QA可成功建立新帳號
TC-002使用者登入 (本地帳號)手動測試QA可成功登入並取得 Token
TC-003SSO 登入手動測試QA可導向 SSO 並回登
TC-004個案建立手動測試種子成員可建立新個案
TC-005長期濟助申請手動測試種子成員可填寫並送出表單
TC-006臨時濟助申請手動測試種子成員可填寫並送出表單
TC-007訪視記錄手動測試種子成員可新增訪視記錄
TC-008報表產生手動測試QA可產生並下載 PDF
TC-009家系圖繪製手動測試QA可正常繪製家系圖
TC-010郵件發送API 測試DevOpsMail Service 正常運作
TC-011權限控制手動測試QA不同角色有正確權限
TC-012多語系切換手動測試QA繁中/英文/西文正常

API 自動化測試 (Postman Collection)

bash
1# 執行 Postman Collection (假設已準備) 2newman run CaseBridge_Production_Tests.postman_collection.json \ 3 --environment Production.postman_environment.json \ 4 --reporters cli,json \ 5 --reporter-json-export test-results.json 6 7# 預期結果:所有測試案例 PASS

7.5 效能與壓力測試 - T+1

API 壓力測試

使用 K6 進行負載測試:

javascript
1// load-test.js 2import http from 'k6/http'; 3import { check, sleep } from 'k6'; 4 5export let options = { 6 stages: [ 7 { duration: '2m', target: 50 }, // 模擬 50 併發用戶 8 { duration: '5m', target: 50 }, // 維持 5 分鐘 9 { duration: '2m', target: 100 }, // 提升到 100 用戶 10 { duration: '3m', target: 100 }, // 維持 3 分鐘 11 { duration: '2m', target: 0 }, // 下降到 0 12 ], 13 thresholds: { 14 http_req_duration: ['p(95)<2000'], // 95% 請求 < 2 秒 15 http_req_failed: ['rate<0.01'], // 錯誤率 < 1% 16 }, 17}; 18 19export default function () { 20 let res = http.get('https://cbuat.vitalcb.com/api/actuator/health'); 21 check(res, { 22 'status is 200': (r) => r.status === 200, 23 }); 24 sleep(1); 25}

執行測試:

bash
1k6 run load-test.js 2 3# 驗收標準: 4# - P95 回應時間 < 2 秒 5# - 錯誤率 < 1% 6# - 無記憶體洩漏或 CPU 過載

資料遷移效能測試

bash
1# 模擬 10,000 筆個案資料匯入 2# (實際腳本由後端團隊提供) 3python3 data_migration_test.py \ 4 --records 10000 \ 5 --batch-size 100 \ 6 --api-endpoint https://cbuat.vitalcb.com/api 7 8# 監控指標: 9watch -n 5 'kubectl top pods -n casebridge' 10 11# 預期結果: 12# - 匯入速率 > 100 筆/分鐘 13# - Pod CPU < 80% 14# - Pod Memory < 85%

7.6 各國 UAT 驗收 - T+1 到 T+7

驗收流程

Loading diagram...

各國驗收清單

國家種子成員測試環境狀態簽核日期
菲律賓2 人Production⬜ 待測試
馬來西亞2 人Production⬜ 待測試
尼泊爾2 人Production⬜ 待測試
印度2 人Production⬜ 待測試
美國2 人Production⬜ 待測試
墨西哥2 人Production⬜ 待測試
南非2 人Production⬜ 待測試
莫三比克2 人Production⬜ 待測試

7.7 監控與告警驗證 - T+2

測試 Prometheus 告警

bash
1# 故意觸發高 CPU 告警 2kubectl exec -it -n casebridge deploy/api-gateway -- \ 3 stress --cpu 4 --timeout 60s 4 5# 確認告警是否觸發 6# 檢查 Azure Monitor 或 Prometheus Alertmanager 7 8# 預期結果:在 2 分鐘內收到告警通知

測試日誌收集

bash
1# 產生測試錯誤日誌 2kubectl exec -n casebridge deploy/mail-service -- \ 3 curl -X POST http://localhost:8098/test/error 4 5# 檢查 Logstash 是否收到 6kubectl logs -n observability deploy/logstash --tail=100 | grep ERROR 7 8# 預期結果:可在 Logstash 看到錯誤日誌

7.8 災難復原演練 - T+5 (選擇性)

模擬 Pod 故障

bash
1# 刪除 authn-service Pod 2kubectl delete pod -n casebridge -l app=authn-service 3 4# 觀察自動重啟 5watch kubectl get pods -n casebridge 6 7# 預期結果: 8# - Pod 在 30 秒內自動重建 9# - 服務持續可用 (因有多個副本)

模擬資料庫連線中斷

bash
1# 暫時封鎖 MySQL 連線 (修改 NSG 或防火牆規則) 2az mysql flexible-server firewall-rule delete \ 3 --resource-group rg-prod-casebridge-japaneast \ 4 --name mysql-prod-casebridge-japaneast \ 5 --rule-name AllowAKS 6 7# 觀察服務行為 8kubectl logs -f -n casebridge deploy/authp-service 9 10# 恢復連線 11az mysql flexible-server firewall-rule create \ 12 --resource-group rg-prod-casebridge-japaneast \ 13 --name mysql-prod-casebridge-japaneast \ 14 --rule-name AllowAKS \ 15 --start-ip-address <AKS_NODE_IP> \ 16 --end-ip-address <AKS_NODE_IP> 17 18# 預期結果: 19# - 服務自動重連 20# - 錯誤日誌正確記錄

7.9 測試完成標準

Go-Live 檢核表

  • 煙霧測試:100% 通過
  • 健康檢查:所有服務回應 UP
  • 核心功能測試:TC-001 到 TC-012 全部 PASS
  • 效能測試:P95 < 2 秒,錯誤率 < 1%
  • 各國 UAT:至少 6/8 國家完成驗收
  • 監控告警:告警機制運作正常
  • 文件交付:運維手冊、API 文件已更新
  • 備份驗證:資料庫備份與還原測試成功

問題嚴重度分級

等級定義範例處理時限
P0 - 致命系統完全無法使用無法登入、資料庫損毀立即處理
P1 - 嚴重核心功能失效無法建立個案、報表產生失敗4 小時內
P2 - 一般非核心功能異常UI 顯示錯誤、效能緩慢24 小時內
P3 - 輕微可接受的小問題文字錯誤、樣式調整下個版本

問題嚴重度圖例

  • P0 = Priority 0 (致命):系統完全無法使用,必須立即處理
  • P1 = Priority 1 (嚴重):核心功能失效,4 小時內必須修復
  • P2 = Priority 2 (一般):非核心功能異常,24 小時內修復
  • P3 = Priority 3 (輕微):可接受的小問題,可排入下個版本處理

8. 關鍵里程碑與上線決策

8.1 里程碑評估說明

專案成熟度需透過里程碑衡量,作為 Go/No-Go 上線決策依據。

8.2 上線前里程碑

Loading diagram...

8.3 核心里程碑與驗收標準

里程碑驗收標準負責人預計完成
M1: Azure 資源就緒AKS, ACR, MySQL, Blob 全部建立;網路白名單設定完成系統架構師T-4 週
M2: 基礎設施部署cert-manager, Istio 安裝;ClusterIssuer 運作正常DevOpsT-3 週
M3: 微服務部署完成所有 23 個 Pod Running;健康檢查全部 UPDevOpsT-2 週
M4: 整合測試通過API 自動化測試通過;核心功能測試完成QAT-10 天
M5: 效能測試達標P95 < 2 秒;併發 100 用戶無錯誤QA + DevOpsT-7 天
M6: UAT 驗收至少 6/8 國家完成驗收;P0/P1 問題清零PO + 種子成員T-3 天
M7: 資料遷移測試測試環境遷移成功;回滾機制驗證DBA + 後端T-2 天
M8: Go-Live 決策技術檢核表 100% 完成;風險可控PM + 架構師T-1 天

8.4 Go / No-Go 決策機制

Go-Live 決策會議 (T-3 天)

參與人員

  • 產品負責人 (PO) - 主持
  • Tech Leader (Neal)
  • DevOps Lead
  • 後端工程師代表
  • 前端工程師 (Even)

決策依據

評估項目Go 條件當前狀態評分 (1-5)
技術就緒度所有技術檢核項 > 95% 完成
功能完整性核心功能測試 100% PASS
效能達標壓力測試符合 SLA
UAT 驗收> 75% 國家完成驗收
P0/P1 問題零 P0,P1 < 3 個
團隊準備度24 小時值班機制建立
備份機制資料庫與配置備份完成
回滾計畫回滾腳本測試通過

決策規則

  • 總分 ≥ 35/40 且無 P0 問題 → GO
  • 總分 30-34 → 條件式 GO (需緩解計畫)
  • 總分 < 30 或有 P0 問題 → NO-GO (延期)

緊急回滾機制

yaml
1觸發條件: 2 - P0 問題持續 > 2 小時無法解決 3 - 錯誤率 > 10% 4 - 資料完整性受損 5 6回滾步驟: 7 1. 通知所有利害關係人 8 2. 停止所有新流量導入 9 3. 回滾 K8s Deployment 到前一版本 10 4. 恢復資料庫備份 (如需要) 11 5. 驗證回滾成功 12 13回滾時限: < 30 分鐘

8.5 上線後持續改進

每日站立會議 (T+0 到 T+7)

yaml
1時間: 每日 09:00 與 17:00 (兩次) 2參與: PO、Tech Leader (Neal)、DevOps、後端團隊 (Kevin, Ken, 又升, Peter)、前端 (Even) 3議程: 4 - 過去 12 小時系統狀況 5 - 問題追蹤與解決進度 6 - 今日重點工作 7 - 風險與升級事項 8持續時間: 15 分鐘

第一週運營檢討 (T+7)

檢討重點

  • 實際 vs 預期效能對比
  • 使用者回饋彙整
  • 問題根因分析
  • 成本分析
  • 下階段優化計畫

8.6 結語

本計畫書從系統架構師角度,完整涵蓋了全球個案管理系統 (GCMS) 八國同步上線的所有關鍵要素:

技術基礎:詳細的系統查檢表與 K8s 配置清單
人員組織:明確的角色職責與 RACI 矩陣
架構透明:雲端資源架構圖與服務依賴關系
品質保證:完整的上線後測試計畫與驗收標準
風險管理:Go/No-Go 決策機制與回滾計畫

透過此框架,確保 GCMS 上線過程可控、可測、可追溯,為八國慈濟志工提供穩定可靠的數位化服務平台。


9. 各職位上線查檢表

9.0 查檢表使用說明

本章節為每個職位提供專屬的上線前查檢表,每個查檢表都基於:

  • RACI 矩陣 (第 5.2 節) 的責任分配
  • 技術檢核清單 (第 4 章) 的技術項目
  • 測試計畫 (第 7 章) 的驗證標準

📌 使用建議

  1. 各職位應於 T-7 日開始執行查檢
  2. 每日站立會議中同步進度
  3. T-3 日前完成所有項目
  4. 在 Go/No-Go 決策會議中報告完成狀況

9.1 產品負責人 (PO) 上線查檢表

專案管理與決策

  • 確認上線時程與里程碑 (T-14)
  • 完成風險評估與登記簿 (T-10)
  • 確認 Go/No-Go 決策標準 (T-7)
  • 準備 Go/No-Go 決策會議資料 (T-3)
  • 主持 Go/No-Go 決策會議 (T-3)

UAT 與驗收管理

  • 定義 UAT 驗收標準 (T-14)
  • 準備測試案例清單 (TC-001 到 TC-012) (T-10)
  • 確認各國種子成員名單 (T-10)
  • 追蹤各國 UAT 執行進度 (T+1 to T+7)
  • 審核 UAT 問題報告與優先級 (T+1 to T+7)
  • 簽核各國驗收報告 (T+7)

溝通與利害關係人管理

  • 完成上線溝通計畫 (T-14)
  • 通知各國種子成員上線時程 (T-10)
  • 確認 24 小時支援聯絡管道 (T-7)
  • 準備上線公告與使用者通知 (T-3)
  • 發布上線公告 (T+0)

教育訓練管理

  • 確認培訓教材完成度 (T-14)
  • 審核種子成員培訓成果 (T-7)
  • 確認全員培訓認證狀態 (T-3)

上線後持續改進

  • 主持每日站立會議 (T+0 to T+7)
  • 追蹤問題解決進度 (T+0 to T+7)
  • 主持第一週運營檢討會議 (T+7)

9.2 Tech Leader (Neal) 上線查檢表

架構與設計審核

  • 審核 Azure 資源架構設計 (M1) (T-28)
  • 確認容量規劃與資源評估 (T-21)
  • 審核微服務依賴矩陣 (第 6.2 節) (T-14)
  • 確認啟動順序依賴 (第 6.5 節) (T-14)
  • 驗證系統架構圖正確性 (T-10)

技術風險與安全

  • 執行技術風險評估 (T-14)
  • 審核安全性與合規檢查 (T-10)
    • 網路安全策略 (Network Policies)
    • Istio mTLS 配置
    • Secret 管理機制
  • 確認 SSL/TLS 憑證管理機制 (T-7)
  • 審核災難復原計畫 (DR Plan) (T-7)

技術文件審核

  • 審核 K8s 部署文件 (InstallationGuide.md) (T-10)
  • 審核 API 文件完整性 (T-7)
  • 審核系統手冊與運維文件 (T-7)
  • 確認技術文件版本一致性 (T-3)

效能與容量驗證

  • 審核效能測試結果 (P95 < 2s) (M5) (T-7)
  • 確認資源使用率在合理範圍 (60-80%) (T-7)
  • 審核資料遷移效能測試 (T-7)

Go/No-Go 決策參與

  • 準備技術就緒度報告 (T-3)
  • 參與 Go/No-Go 決策會議 (T-3)
  • 提供技術風險評估意見 (T-3)

上線支援

  • 上線當日現場支援 (T+0)
  • 參與每日站立會議 (T+0 to T+7)
  • 提供技術問題解決方案 (T+0 to T+7)

9.3 DevOps 工程師上線查檢表

K8s 叢集準備 (M2-M3)

  • AKS 叢集健康檢查 (T-14)
    bash
    1kubectl get nodes 2kubectl get pods --all-namespaces 3kubectl top nodes
  • 確認 Node 規格與數量 (2 × Standard_D2as_v5) (T-14)
  • 驗證 Node Autoscaler 配置 (Min=2, Max=6) (T-14)

基礎設施部署

  • 安裝 cert-manager (v1.13.2) - 01-install-crds.sh (T-21)
  • 安裝 Istio Service Mesh - 01-install-crds.sh (T-21)
  • 部署 ClusterIssuer (Let's Encrypt) - 04-setup-certs.sh (T-14)
  • 驗證 Istio Gateway 配置 (T-14)
  • 確認 External IP 繫定 (4.189.160.191) (T-14)

Secrets 與 ConfigMaps

  • 準備 credentials.json (T-14)
  • 準備 env.json (T-14)
  • 執行 02-setup-secrets.sh validate (T-10)
  • 執行 02-setup-secrets.sh create-secrets (T-10)
  • 執行 03-generate-configs.sh render (T-10)
  • 驗證所有 Secrets 已建立:
    bash
    1kubectl get secret -n casebridge casebridge-core-secrets 2kubectl get secret -n casebridge casebridge-authn-keypair

微服務部署 (M3)

  • 執行 05-deploy-apps.sh (T-10)
  • 確認所有 23 個 Pod 處於 Running 狀態 (T-7)
    bash
    1kubectl get pods -n casebridge | grep -v Running
  • 驗證 Pod Readiness Probe (T-7)
  • 確認 PodDisruptionBudget 設定 (T-7)

監控與告警

  • 部署 Logstash 日誌收集 (observability namespace) (T-14)
  • 驗證日誌收集機制 (T-10)
    bash
    1kubectl logs -n observability deploy/logstash --tail=100
  • 設定 Azure Monitor 或 Prometheus (T-10)
  • 配置告警規則:
    • Pod CrashLoopBackOff
    • Node CPU > 80%
    • Memory > 85%
  • 測試告警通知機制 (T-7)

CI/CD Pipeline

  • 驗證 GitLab CI/CD Pipeline (T-14)
  • 測試 ACR 推送機制 (T-10)
  • 確認部署腳本具等归性 (T-10)
  • 測試滾動更新 (Rolling Update) (T-7)

備份與災難復原

  • 設定 ETCD 備份機制 (T-10)
  • 備份所有 K8s YAML 配置 (T-7)
  • 備份 credentials.jsonenv.json (T-7)
  • 測試回滾程序 (T-7)
  • 準備災難復原 Runbook (T-3)

上線支援

  • 上線當日現場支援 (T+0)
  • 執行煙霧測試 (T+0)
  • 監控 Pod 狀態 (T+0 to T+7)
  • 處理部署相關緊急問題 (T+0 to T+7)

9.4 後端工程師團隊 (Kevin, Ken, 又升, Peter) 上線查檢表

微服務配置審核

  • 審核所有微服務 application.yml 配置 (T-14)
  • 確認環境變數正確映射 (T-14)
    • CB_PLT_MYSQL_*
    • CB_PLT_REDIS_*
    • CB_OBS_LOGSTASH_*
    • CB_AUTH_JWT_*
  • 驗證 Spring Boot Profiles (prod) (T-10)

資料庫管理 (M7)

  • Azure MySQL 防火牆白名單設定 (T-14)
    bash
    1az mysql flexible-server firewall-rule create \ 2 --resource-group rg-prod-casebridge-japaneast \ 3 --name mysql-prod-casebridge-japaneast \ 4 --rule-name AllowAKS \ 5 --start-ip-address <AKS_NODE_IP>
  • 測試資料庫連線 (T-10)
    bash
    1mysql -h mysql-prod-casebridge-japaneast.mysql.database.azure.com \ 2 -u mysqluatcb -p -e "SELECT 1;"
  • 確認 SSL 連線啟用 (T-10)
  • 審核資料庫 Schema 版本 (T-10)
  • 執行資料庫備份 (T-3)

Blob Storage 配置

  • 驗證 Blob Storage 連線 (T-10)
    • 帳號: stprodcasebridgejp
    • 容器: casereport
  • 確認 SAS Token 或 Connection String 有效 (T-10)
  • 測試檔案上傳/下載 (T-7)
  • 驗證 reporting-service Blob 連線 (T-7)
  • 驗證 pettycash-service Blob 連線 (T-7)

API 測試與驗證

  • 執行 Spring Boot Actuator 健康檢查 (T-7)
    bash
    1for svc in api-gateway authn-service authp-service; do 2 kubectl exec -n casebridge deploy/$svc -- \ 3 curl -s http://localhost:8080/actuator/health 4done
  • 測試核心 API 端點 (T-7)
  • 執行 Postman Collection 自動化測試 (T-5)
  • 驗證 JWT Token 簽發與驗證 (T-5)

資料遷移準備

  • 準備資料遷移腳本 (T-14)
  • 驗證資料遷移腳本 (測試環境) (M7) (T-10)
  • 確認所有使用者帳號已建立 (T-5)
  • 準備 10,000 筆個案測試資料 (T-5)
  • 執行資料遷移效能測試 (T-5)
  • 準備回滾腳本 (T-3)
  • 執行正式資料遷移 (T-1)

效能測試 (M5)

  • 執行 API 壓力測試 (K6) (T-7)
  • 驗證 P95 回應時間 < 2s (T-7)
  • 驗證錯誤率 < 1% (T-7)
  • 監控 Pod 資源使用 (CPU/Memory) (T-7)

上線支援

  • 執行資料庫連線檢查 (T+0)
  • 監控微服務日誌 (T+0 to T+7)
  • [ ]處理 API 相關問題 (T+0 to T+7)
  • 處理資料庫相關問題 (T+0 to T+7)

9.5 前端工程師 (Even) 上線查檢表

React 應用建置

  • 確認 Production 建置成功 (T-10)
    bash
    1npm run build
  • 驗證建置產物大小合理 (T-10)
  • 測試應用啟動時間 (T-7)

環境變數配置

  • 確認 FRONTEND_NODE_ENV=production (T-10)
  • 確認 FRONTEND_API_BASE_URL=https://cbuat.vitalcb.com/api (T-10)
  • 確認 FRONTEND_BIZFORM_URL (T-10)
  • 確認 FRONTEND_SSO_URL=https://member.gsscloud.com (T-10)
  • 確認 FRONTEND_CLIENT_ID (T-10)
  • 確認 FRONTEND_TRUSTED_ORIGINS (T-10)

SSO 整合測試

  • 測試 SSO 登入流程 (T-7)
  • 驗證 SSO 回登 (Callback) (T-7)
  • 測試 SSO 登出功能 (T-7)
  • 驗證 Token Refresh 機制 (T-7)

功能測試

  • 測試多語系切換 (繁中/英文/西文) (T-7)
  • 測試核心功能頁面:
    • Dashboard
    • 個案建立
    • 表單填寫
    • 報表查看
  • 驗證權限控制顯示 (T-7)

瀏覽器相容性

  • Chrome 測試 (T-7)
  • Firefox 測試 (T-7)
  • Safari 測試 (T-7)
  • Edge 測試 (T-7)
  • 移動端響應式測試 (T-7)

效能優化驗證

  • Lighthouse 效能評分 > 80 (T-7)
  • 首次內容繪製 (FCP) < 2s (T-7)
  • 最大內容繪製 (LCP) < 2.5s (T-7)
  • 縯積布局偏移 (CLS) < 0.1 (T-7)

上線支援

  • 測試前端頁面載入 (T+0)
  • 監控瀏覽器 Console 錯誤 (T+0 to T+7)
  • 處理 UI 相關問題 (T+0 to T+7)

9.6 各國種子成員上線查檢表

系統培訓

  • 完成課程 0-1: Kickoff 與導入訪談 (T-60)
  • 完成課程 2-3.1: 系統設定與培訓 (T-45)
  • 完成課程 3.2: 資料盤點與遷移 (T-30)
  • 完成課程 4-5: 全面推廣與報表應用 (T-14)
  • 通過培訓認證 (T-10)

測試環境準備

  • 取得測試帳號 (T-14)
  • 確認可登入系統 (T-14)
  • 熟悉系統界面 (T-10)
  • 學習基本操作流程 (T-10)

UAT 測試執行 (M6)

  • 測試使用者註冊 (TC-001) (T+1)
  • 測試登入功能 (TC-002, TC-003) (T+1)
  • 測試個案建立 (TC-004) (T+2)
  • 測試長期濟助申請 (TC-005) (T+2)
  • 測試臨時濟助申請 (TC-006) (T+3)
  • 測試訪視記錄 (TC-007) (T+3)
  • 測試報表產生 (TC-008) (T+4)
  • 測試多語系切換 (TC-012) (T+4)

本地化測試

  • 測試語系顯示正確 (T+2)
  • 測試時區設定 (T+2)
  • 測試日期格式 (T+2)
  • 測試貨幣格式 (如適用) (T+2)

問題回報

  • 了解問題回報管道 (T-7)
  • 了解問題嚴重度分級 (P0-P3) (T-7)
  • 執行問題回報 (T+1 to T+7)
  • 追蹤問題解決進度 (T+1 to T+7)

驗收簽核

  • 完成 UAT 驗收測試 (T+7)
  • 提交驗收報告 (T+7)
  • 簽核驗收通過 (T+7)

上線後支援

  • 確認 24 小時支援聯絡方式 (T-3)
  • 參與上線後問題處理 (T+0 to T+7)
  • 協助本地使用者培訓 (T+7 onwards)

附錄 A:快速參考

A.1 重要聯絡資訊

角色姓名聯絡方式備註
產品負責人 (PO)[待填]專案總協調、需求與驗收
Tech LeaderNeal技術決策與架構
DevOps Lead[待填]K8s 部署
後端工程師Kevin, Ken, 又升, Peter微服務開發與資料庫
前端工程師EvenReact 前端開發
24 小時值班專線[待填]緊急支援

A.2 重要連結

資源URL / 路徑
Production URLhttps://cbuat.vitalcb.com
Azure Portalhttps://portal.azure.com
GitLab Repository[待填]
監控 Dashboard[待填]
文件庫K8s-Production/

A.3 緊急應變程序

Loading diagram...

文檔版本:v2.2
最後更新:2025-12-30
下次審核:上線完成後 7 天
文件擁有者:Tech Leader (Neal)
審核者:產品負責人 (PO)、DevOps Lead、後端工程師團隊

分享這個影片
訂閱 YouTube 頻道