# MOMO Pro System - 技術架構 > 最後更新:2026-01-29 --- ## 🏗️ 整體架構 ```mermaid graph TB subgraph "用戶端" Browser[🌐 瀏覽器] Telegram[📱 Telegram Bot] LINE[📱 LINE Bot] end subgraph "入口層" Nginx[🔒 Nginx
SSL + 反向代理] end subgraph "應用層 (K8s)" Flask[🐍 Flask App] Scheduler[⏰ 排程器] end subgraph "AI 服務" Ollama[🦙 Ollama
llama3:70b] Gemini[✨ Gemini API] end subgraph "資料層" PostgreSQL[(🐘 PostgreSQL)] Redis[(📦 Redis Cache)] end subgraph "外部服務" GDrive[📁 Google Drive] SMTP[📧 SMTP Server] MOMO[🛒 MOMO 電商] end subgraph "監控層" Prometheus[📊 Prometheus] Grafana[📈 Grafana] Alertmanager[🚨 Alertmanager] end Browser --> Nginx Telegram --> Flask LINE --> Flask Nginx --> Flask Flask --> PostgreSQL Flask --> Redis Flask --> Ollama Flask --> Gemini Flask --> GDrive Flask --> SMTP Scheduler --> MOMO Scheduler --> PostgreSQL Flask --> Prometheus Prometheus --> Grafana Prometheus --> Alertmanager ``` --- ## 📚 技術棧總覽 | 層級 | 技術 | 版本 | 用途 | |------|------|------|------| | **後端框架** | Flask | 2.3+ | Web 應用框架 | | **ORM** | SQLAlchemy | 2.0+ | 資料庫物件映射 | | **資料庫** | PostgreSQL | 15 | 主資料庫 (生產環境) | | **資料庫** | SQLite | 3 | 開發/本地環境 | | **快取** | Redis | 7.0 | Session + 資料快取 | | **前端框架** | Bootstrap | 5.3 | UI 元件庫 | | **圖表** | Chart.js | 4.0 | 資料視覺化 | | **模板引擎** | Jinja2 | 3.1 | HTML 模板渲染 | | **容器** | Docker | 24.0 | 容器化部署 | | **編排** | K3s | 1.34 | Kubernetes 輕量版 | | **CI/CD** | GitLab CI | - | 持續整合部署 | | **Registry** | Harbor | 2.10 | 容器映像倉庫 | | **監控** | Prometheus | 2.51 | 指標收集 | | **視覺化** | Grafana | 10.0 | 監控儀表板 | | **日誌** | Loki | 2.9 | 日誌聚合 | | **AI (本地)** | Ollama | 0.1+ | LLM 推理引擎 | | **AI (雲端)** | Gemini | 1.5/2.5 | Google AI API | | **自動化** | n8n | 1.30 | 低代碼工作流 | | **爬蟲** | Selenium | 4.18 | 網頁自動化 | | **爬蟲** | BeautifulSoup | 4.12 | HTML 解析 | --- ## 🐍 後端架構 ### Flask 應用結構 ``` Flask App ├── Blueprints (路由模組) │ ├── dashboard_routes # 商品看板 │ ├── daily_sales_routes # 每日業績 │ ├── ai_routes # AI 文案 │ ├── user_routes # 用戶管理 │ └── ... # 17 個路由模組 │ ├── Services (業務邏輯) │ ├── AI Services # Ollama + Gemini │ ├── Crawler Services # 爬蟲服務 │ ├── Notification # 通知服務 │ └── ... # 27 個服務模組 │ └── Database (資料層) ├── SQLAlchemy Models # ORM 模型 └── Database Manager # 連線管理 ``` ### 關鍵依賴 (requirements.txt) ```txt Flask>=2.3.0 SQLAlchemy>=2.0.0 gunicorn>=21.0.0 psycopg2-binary>=2.9.0 selenium>=4.18.0 beautifulsoup4>=4.12.0 openpyxl>=3.1.0 google-api-python-client>=2.0.0 python-telegram-bot>=20.0 requests>=2.31.0 Pillow>=10.0.0 ``` --- ## 🎨 前端架構 ### 技術選型 | 項目 | 技術 | 說明 | |------|------|------| | **CSS 框架** | Bootstrap 5.3 | 響應式 UI 元件 | | **圖標** | Font Awesome 6 | 圖標庫 | | **圖表** | Chart.js 4.0 | 折線圖、長條圖 | | **表格** | DataTables | 分頁、搜尋表格 | | **日期選擇** | Flatpickr | 日期/時間選擇器 | | **通知** | Toastr | Toast 通知 | | **模態框** | Bootstrap Modal | 彈窗對話框 | ### 頁面載入方式 ``` Server-Side Rendering (SSR) ├── Jinja2 模板渲染 ├── AJAX API 呼叫 (資料更新) └── 無 SPA 框架 ``` --- ## 🗄️ 資料庫架構 ### 雙資料庫策略 | 環境 | 資料庫 | 用途 | |------|--------|------| | 開發 | SQLite | 本地快速開發 | | 生產 | PostgreSQL | UAT + 正式環境 | ### 連線管理 ```python # database/manager.py - 支援 SQLite 和 PostgreSQL 切換 - 連線池管理 - Session 生命週期管理 ``` ### 資料庫備份 - **頻率**: 每日自動備份 - **保留**: 最近 7 天 - **工具**: pg_dump + cron --- ## 🚀 部署架構 ### K3s Kubernetes 環境 ```yaml Namespace: momo ├── Deployment: momo-app (Flask) │ ├── Replicas: 1 │ ├── Resources: 512Mi-4Gi / 200m-2000m │ └── Image: harbor.wooo.work/wooo/momo-pro-system │ ├── Deployment: momo-scheduler (爬蟲) │ ├── Replicas: 1 │ └── Resources: 256Mi-2Gi / 100m-1000m │ ├── StatefulSet: momo-postgres │ ├── Storage: 10Gi PVC │ └── Resources: 256Mi-1Gi / 100m-500m │ └── Services ├── momo-app: ClusterIP └── momo-postgres: ClusterIP ``` ### 流量路徑 ``` 用戶 → mo.wooo.work:443 → VM Nginx (SSL) → K8s ClusterIP 10.43.238.49:80 → momo-app Pod ``` --- ## 🔄 CI/CD 流程 ```mermaid graph LR A[Git Push] --> B[GitLab CI] B --> C{Test} C -->|Pass| D[Build Image] C -->|Fail| E[Auto Repair] D --> F[Push to Harbor] F --> G[K8s Rollout] G --> H[Health Check] E --> C ``` ### Pipeline 階段 | 階段 | 動作 | 自動修復 | |------|------|---------| | test | pytest 單元測試 | 系統診斷 | | build | Docker 映像構建 | Harbor 重啟、磁碟清理 | | deploy | K8s 滾動更新 | Pod 重啟、Secret 重建 | --- ## 🤖 AI 服務架構 ### 雙 AI 提供者 | 提供者 | 模型 | 用途 | 計費 | |--------|------|------|------| | **Ollama** | llama3:70b | 文案生成、推薦 | 免費 (自建) | | **Gemini** | gemini-1.5-flash | 網路搜尋、產品分析 | 按 Token | ### AI 服務切換邏輯 ```python class AIProvider: def generate(self, prompt): if self.provider == 'ollama': return self.ollama_service.generate(prompt) else: return self.gemini_service.generate(prompt) ``` ### Ollama 伺服器 - **位置**: 192.168.0.188:11434 - **模型**: llama3:70b-instruct-q2_K - **監控**: n8n 健康檢查 (每 5 分鐘) --- ## 📊 監控系統 ### 監控堆疊 ``` Prometheus (指標收集) ├── Node Exporter (主機指標) ├── cAdvisor (容器指標) ├── Postgres Exporter (DB 指標) └── Blackbox Exporter (外部探測) │ ▼ Alertmanager (告警路由) │ ▼ Telegram / LINE (通知) │ ▼ Grafana (視覺化儀表板) ``` ### 告警規則 | 規則 | 條件 | 動作 | |------|------|------| | Pod OOMKilled | Pod 記憶體不足 | Telegram 告警 | | 高重啟率 | 5 分鐘內重啟 > 3 次 | Telegram 告警 | | 磁碟空間 | 使用率 > 80% | 自動清理 | | SSL 到期 | 30 天內到期 | 每日提醒 | --- ## 🔒 安全架構 ### 認證與授權 | 項目 | 實作 | |------|------| | 用戶認證 | Flask-Login + Session | | 密碼儲存 | bcrypt 雜湊 | | CSRF 防護 | Flask-WTF Token | | 權限控制 | RBAC (admin/manager/user) | ### 網路安全 | 項目 | 實作 | |------|------| | HTTPS | Let's Encrypt SSL | | 端口限制 | 僅開放 22, 80, 443 | | 內部服務 | 僅綁定 127.0.0.1 | --- ## 📁 外部整合 | 服務 | 用途 | 整合方式 | |------|------|---------| | **Google Drive** | 檔案匯入 | OAuth 2.0 API | | **SMTP** | 郵件發送 | smtplib | | **Telegram** | 通知 + Bot | Bot API | | **LINE** | 通知 | Messaging API | | **MOMO** | 商品爬蟲 | Selenium | | **mybest** | 趨勢爬蟲 | BeautifulSoup | --- ## ⚙️ 環境變數 ```bash # 資料庫 DATABASE_URL=postgresql://user:pass@host:5432/db SQLALCHEMY_DATABASE_URI=... # AI 服務 OLLAMA_HOST=http://192.168.0.188:11434 OLLAMA_MODEL=llama3:70b-instruct-q2_K GEMINI_API_KEY=AIzaSy... # 通知 TELEGRAM_BOT_TOKEN=807564... TELEGRAM_CHAT_ID=561907... # Google GOOGLE_DRIVE_FOLDER_ID=... ```