feat(vmis): 租戶自動開通完整流程 + Admin Portal SSO + NC 行事曆訂閱
Backend: - schedule_tenant: NC 新容器自動 pgsql 安裝 (_nc_db_check 全新容器處理) - schedule_tenant: NC 初始化加入 Redis + APCu memcache 設定 (修正 OIDC invalid_state) - schedule_tenant: 新租戶 KC realm 自動設定 accessCodeLifespan=600s (修正 authentication_expired) - schedule_account: NC Mail 帳號自動設定 (nc_mail_result/nc_mail_done_at) - schedule_account: NC 台灣國定假日行事曆自動訂閱 (CalDAV MKCALENDAR) - nextcloud_client: 新增 subscribe_calendar() CalDAV 訂閱方法 - settings: 新增系統設定 API (site_title/version/timezone/SSO/Keycloak) - models/result: 新增 nc_mail_result, nc_mail_done_at 欄位 - alembic: 遷移 002(system_settings) 003(keycloak_admin) 004(nc_mail_result) Frontend (Admin Portal): - 新增完整管理後台 (index/tenants/accounts/servers/schedules/logs/settings/system-status) - api.js: Keycloak JS Adapter SSO 整合 (PKCE/S256, fallback KC JS 來源, 自動 token 更新) - index.html: Promise.allSettled 取代 Promise.all,防止單一 API 失敗影響整頁 - 所有頁面加入 try/catch + toast 錯誤處理 - 新增品牌 LOGO 與 favicon Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
225
docs/architecture/01-系統架構設計.md
Normal file
225
docs/architecture/01-系統架構設計.md
Normal file
@@ -0,0 +1,225 @@
|
||||
# Virtual MIS - 系統架構設計
|
||||
|
||||
**版本**: v1.0
|
||||
**日期**: 2026-02-27
|
||||
**狀態**: 規劃中
|
||||
|
||||
---
|
||||
|
||||
## 系統架構圖
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 客戶企業 │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ 員工 A │ │ 員工 B │ │ 員工 C │ │ 管理者 │ │
|
||||
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ └─────┬────┘ │
|
||||
└────────┼─────────────┼─────────────┼─────────────┼─────────┘
|
||||
│ │ │ │
|
||||
└─────────────┴─────────────┴─────────────┘
|
||||
│
|
||||
┌─────────▼─────────┐
|
||||
│ Virtual MIS │
|
||||
│ 統一入口 (SSO) │
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
┌─────────────────┼─────────────────┐
|
||||
│ │ │
|
||||
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
||||
│ HR │ │ Service │ │ Billing │
|
||||
│ Portal │ │ Gateway │ │ System │
|
||||
└────┬────┘ └────┬────┘ └─────────┘
|
||||
│ │
|
||||
│ ┌──────────┼──────────┐
|
||||
│ │ │ │
|
||||
┌────▼────▼─┐ ┌────▼────┐ ┌──▼──────┐
|
||||
│ Mail │ │Calendar │ │ Drive │
|
||||
│ Service │ │Service │ │ Service │
|
||||
└───────────┘ └─────────┘ └─────────┘
|
||||
│
|
||||
┌────▼────┐
|
||||
│ Office │
|
||||
│ Service │
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
## 核心模組
|
||||
|
||||
### 1. 租戶開通系統 (Tenant Onboarding)
|
||||
|
||||
**功能**:
|
||||
- 自動建立租戶資料
|
||||
- 網域配置與 DNS 設定
|
||||
- Keycloak Realm 建立
|
||||
- 服務初始化
|
||||
- 管理員帳號建立
|
||||
|
||||
**API 端點**:
|
||||
```
|
||||
POST /api/v1/tenant-onboarding
|
||||
GET /api/v1/tenant-onboarding/{tenant_id}
|
||||
PUT /api/v1/tenant-onboarding/{tenant_id}
|
||||
DELETE /api/v1/tenant-onboarding/{tenant_id}
|
||||
```
|
||||
|
||||
### 2. 服務整合閘道 (Service Integration Gateway)
|
||||
|
||||
**功能**:
|
||||
- Mail System API 整合
|
||||
- Calendar System API 整合
|
||||
- Drive System API 整合
|
||||
- Office System API 整合
|
||||
- 服務健康檢查
|
||||
- 統一錯誤處理
|
||||
|
||||
**API 端點**:
|
||||
```
|
||||
POST /api/v1/services/mail/create-account
|
||||
POST /api/v1/services/calendar/create-calendar
|
||||
POST /api/v1/services/drive/create-storage
|
||||
POST /api/v1/services/office/grant-access
|
||||
GET /api/v1/services/health
|
||||
```
|
||||
|
||||
### 3. 計費管理系統 (Billing System)
|
||||
|
||||
**功能**:
|
||||
- 訂閱方案管理
|
||||
- 使用量追蹤
|
||||
- 帳單生成
|
||||
- 金流整合 (綠界/藍新)
|
||||
- 自動續約/停權
|
||||
|
||||
**API 端點**:
|
||||
```
|
||||
POST /api/v1/billing/subscribe
|
||||
GET /api/v1/billing/invoices
|
||||
POST /api/v1/billing/payment
|
||||
GET /api/v1/billing/usage/{tenant_id}
|
||||
```
|
||||
|
||||
### 4. 管理後台 (Admin Portal)
|
||||
|
||||
**功能**:
|
||||
- 租戶管理
|
||||
- 服務監控儀表板
|
||||
- 使用量報表
|
||||
- 客戶支援工單
|
||||
- 系統配置
|
||||
|
||||
**頁面**:
|
||||
```
|
||||
/admin/dashboard - 總覽儀表板
|
||||
/admin/tenants - 租戶管理
|
||||
/admin/services - 服務狀態
|
||||
/admin/billing - 計費管理
|
||||
/admin/support - 客戶支援
|
||||
```
|
||||
|
||||
### 5. Landing Page (行銷頁面)
|
||||
|
||||
**功能**:
|
||||
- 服務介紹
|
||||
- 定價方案
|
||||
- 免費試用申請
|
||||
- 客戶見證
|
||||
- 聯絡表單
|
||||
|
||||
**頁面**:
|
||||
```
|
||||
/ - 首頁
|
||||
/pricing - 定價方案
|
||||
/features - 功能介紹
|
||||
/trial - 免費試用
|
||||
/contact - 聯絡我們
|
||||
```
|
||||
|
||||
## 資料庫設計
|
||||
|
||||
### 核心表
|
||||
|
||||
1. **tenants** - 租戶資料 (繼承 HR Portal)
|
||||
2. **subscriptions** - 訂閱記錄
|
||||
3. **invoices** - 帳單記錄
|
||||
4. **service_usage** - 服務使用記錄
|
||||
5. **support_tickets** - 客戶支援工單
|
||||
|
||||
## 技術選型
|
||||
|
||||
### 後端
|
||||
- **語言**: Python 3.11+
|
||||
- **框架**: FastAPI 0.115+
|
||||
- **ORM**: SQLAlchemy 2.0+
|
||||
- **驗證**: Pydantic v2
|
||||
- **任務隊列**: Celery + Redis
|
||||
|
||||
### 前端
|
||||
- **框架**: Next.js 15 (App Router)
|
||||
- **UI 庫**: Tailwind CSS + shadcn/ui
|
||||
- **狀態管理**: React Hooks + Context
|
||||
- **表單**: React Hook Form + Zod
|
||||
|
||||
### 基礎設施
|
||||
- **容器化**: Docker + Docker Compose
|
||||
- **反向代理**: Nginx
|
||||
- **SSL**: Let's Encrypt (Certbot)
|
||||
- **監控**: Prometheus + Grafana
|
||||
|
||||
## 部署架構
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
▼
|
||||
┌───────────────┐
|
||||
│ Nginx Proxy │ (SSL Termination)
|
||||
└───────┬───────┘
|
||||
│
|
||||
┌───┴───┬───────┬───────┬───────┐
|
||||
│ │ │ │ │
|
||||
Admin Landing API HR Services
|
||||
Portal Page Gateway Portal (Mail/Cal/Drive)
|
||||
```
|
||||
|
||||
## 擴展性設計
|
||||
|
||||
### 水平擴展
|
||||
- API Gateway 支援多實例
|
||||
- 使用 Redis 作為共享快取
|
||||
- 資料庫讀寫分離
|
||||
|
||||
### 垂直擴展
|
||||
- 服務模組化設計
|
||||
- 微服務架構準備
|
||||
- 容器資源動態調整
|
||||
|
||||
## 安全性設計
|
||||
|
||||
1. **認證授權**:
|
||||
- Keycloak SSO
|
||||
- JWT Token
|
||||
- RBAC 權限控制
|
||||
|
||||
2. **資料安全**:
|
||||
- 資料加密傳輸 (TLS)
|
||||
- 敏感資料加密儲存
|
||||
- 定期備份
|
||||
|
||||
3. **網路安全**:
|
||||
- CORS 配置
|
||||
- Rate Limiting
|
||||
- DDoS 防護
|
||||
|
||||
## 監控與告警
|
||||
|
||||
- **服務健康**: 每分鐘檢查
|
||||
- **使用量追蹤**: 即時記錄
|
||||
- **錯誤日誌**: 集中管理
|
||||
- **性能指標**: CPU/記憶體/網路
|
||||
|
||||
---
|
||||
|
||||
**下一步**:
|
||||
1. 詳細 API 規格設計
|
||||
2. 資料庫 Schema 設計
|
||||
3. 開發環境建置
|
||||
Reference in New Issue
Block a user