# TODO管理系統 - 生產環境部署指南 ## 📋 概述 本文件提供TODO管理系統的完整生產環境部署指南,包含所有必要的配置和步驟。 ## 🏗️ 系統架構 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 前端 (Next.js) │ │ 後端 (Flask) │ │ MySQL DB │ │ Port: 12012 │◄───┤ Port: 12011 │◄───┤ theaken.com │ │ Docker容器 │ │ Docker容器 │ │ Port: 33306 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ LDAP/AD │ │ panjit.com.tw │ │ Port: 389 │ └─────────────────┘ ``` ## 🚀 快速部署 ### Windows 環境 ```batch # 1. 克隆專案(如果尚未克隆) git clone cd TODOLIST # 2. 執行部署腳本 deploy.bat ``` ### Linux/Mac 環境 ```bash # 1. 克隆專案(如果尚未克隆) git clone cd TODOLIST # 2. 設置執行權限並執行部署腳本 chmod +x deploy.sh ./deploy.sh ``` ## 📁 部署文件結構 ``` TODOLIST/ ├── backend/ # 後端代碼 │ ├── Dockerfile # 後端Docker構建文件 │ ├── requirements.txt # Python依賴 │ └── ... ├── frontend/ # 前端代碼 │ ├── Dockerfile # 前端Docker構建文件 │ ├── package.json # Node.js依賴 │ └── ... ├── docker-compose.prod.yml # 生產環境Docker Compose配置 ├── .env.production # 生產環境變量配置 ├── deploy.bat # Windows部署腳本 ├── deploy.sh # Linux/Mac部署腳本 └── DEPLOYMENT.md # 部署說明文件 ``` ## 🔧 環境配置 ### 生產環境變量 (`.env.production`) 本系統使用以下生產環境配置: #### 🗄️ 資料庫配置 - **MySQL主機**: `mysql.theaken.com:33306` - **資料庫**: `db_A060` - **用戶**: `A060` #### 🔐 LDAP認證配置 - **LDAP服務器**: `panjit.com.tw:389` - **搜索基礎**: `OU=PANJIT,DC=panjit,DC=com,DC=tw` - **認證方式**: Active Directory集成 #### 📧 郵件服務配置 - **SMTP服務器**: `mail.panjit.com.tw:25` - **發送者**: `todo-system@panjit.com.tw` #### 🌐 服務端口 - **前端**: `12012` - **後端API**: `12011` ## 🐳 Docker配置 ### 服務組成 1. **todo-backend-prod**: Flask後端容器 - 端口映射: `12011:12011` - 健康檢查: `/api/health` - 自動重啟: `unless-stopped` 2. **todo-frontend-prod**: Next.js前端容器 - 端口映射: `12012:12012` - 健康檢查: 根路徑檢查 - 自動重啟: `unless-stopped` ### 網路配置 - 使用自定義橋接網路 `todolist-network` - 容器間可通過服務名稱通信 - 外部訪問通過端口映射 ## 🔍 手動部署步驟 如果需要手動部署,請按以下步驟執行: ### 1. 停止現有服務 ```bash # 停止並移除現有容器 docker stop todo-backend-prod todo-frontend-prod docker rm todo-backend-prod todo-frontend-prod ``` ### 2. 建置Docker鏡像 ```bash # 建置後端鏡像 docker build -t todolist-backend:latest ./backend # 建置前端鏡像 docker build -t todo-frontend:latest \ --build-arg NEXT_PUBLIC_API_URL=http://localhost:12011 \ ./frontend ``` ### 3. 啟動服務 ```bash # 使用Docker Compose啟動 docker-compose -f docker-compose.prod.yml up -d ``` ### 4. 驗證部署 ```bash # 檢查容器狀態 docker ps # 檢查服務健康 curl http://localhost:12011/api/health curl http://localhost:12012 ``` ## 🧪 測試與驗證 ### API測試 ```bash # 健康檢查 curl http://localhost:12011/api/health # CORS測試 curl -H "Origin: http://localhost:12012" \ -H "Access-Control-Request-Method: POST" \ -H "Access-Control-Request-Headers: Content-Type,Authorization" \ -X OPTIONS http://localhost:12011/api/auth/login ``` ## 🛠️ 維護指令 ### 日誌查看 ```bash # 查看所有服務日誌 docker-compose -f docker-compose.prod.yml logs -f # 查看特定服務日誌 docker logs todo-backend-prod -f docker logs todo-frontend-prod -f ``` ### 服務管理 ```bash # 重啟服務 docker-compose -f docker-compose.prod.yml restart # 停止服務 docker-compose -f docker-compose.prod.yml down # 更新並重啟 docker-compose -f docker-compose.prod.yml down docker-compose -f docker-compose.prod.yml up -d --build ``` ### 資源監控 ```bash # 查看容器狀態 docker ps # 查看資源使用 docker stats # 查看容器詳情 docker inspect todo-backend-prod docker inspect todo-frontend-prod ``` ## 🚨 故障排除 ### 常見問題 #### 1. 容器無法啟動 ```bash # 檢查日誌 docker logs todo-backend-prod docker logs todo-frontend-prod # 檢查端口占用 netstat -ano | findstr :12011 netstat -ano | findstr :12012 ``` #### 2. 資料庫連接失敗 - 確認網路連通性到 `mysql.theaken.com:33306` - 驗證資料庫憑證 - 檢查防火牆設置 #### 3. LDAP認證失敗 - 確認網路連通性到 `panjit.com.tw:389` - 驗證LDAP服務帳號憑證 - 檢查搜索基礎設置 #### 4. CORS錯誤 - 確認前後端URL配置 - 檢查 `CORS_ORIGINS` 環境變量 - 驗證前端請求標頭 ### 健康檢查端點 - **後端健康檢查**: `GET http://localhost:12011/api/health` - **前端健康檢查**: `GET http://localhost:12012` ## 🔒 安全考量 ### 生產環境安全設置 1. **更改默認密鑰**: - 修改 `SECRET_KEY` 和 `JWT_SECRET_KEY` - 使用強密碼策略 2. **網路安全**: - 考慮使用反向代理(Nginx) - 配置HTTPS證書 - 限制外部訪問 3. **監控與日誌**: - 設置日誌輪轉 - 監控系統資源 - 設置告警機制 ## 📞 支援聯繫 - **系統管理員**: `ymirliu@panjit.com.tw` - **技術支援**: 參考專案文檔或聯繫開發團隊 ## 📝 版本資訊 - **系統版本**: 1.0.0 - **Docker映像**: - Backend: `todolist-backend:latest` - Frontend: `todo-frontend:latest` - **部署日期**: 自動生成 --- **注意**: 本文件包含敏感配置資訊,請妥善保管,僅限授權人員查看。