Files
TODOLIST/DEPLOYMENT.md
beabigegg 5ad4035e02 checkok
2025-09-12 08:54:21 +08:00

129 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TODO 管理系統 - 生產環境部署指南(最新架構)
## 概述
本文件說明最新部署架構:以 Nginx 為對外入口Port 12011反向代理至後端 Gunicorn容器內 12011前端由 Flask 靜態目錄提供。此架構提升穩定度與擴充性,支援約 200 位同時使用者。
## 架構總覽
- 對外入口Nginx容器 `nginx`),監聽並對外開放 `12011`
- 應用服務Flask + Gunicorn容器 `todolist-app`),僅容器網路內提供 `12011`
- 前端Next.js 靜態輸出隨應用容器打包Flask 靜態目錄 `frontend/out`
- CORS允許 `http://localhost:12011``http://127.0.0.1:12011`
## 專案結構(摘要)
```
TODOLIST/
├─ backend/ # 後端程式Flask
│ ├─ app.py # Flask 應用(含 SPA 靜態路由)
│ └─ requirements.txt # Python 依賴
├─ frontend/ # 前端Next.js 靜態輸出)
├─ nginx/
│ └─ nginx.conf # Nginx 反向代理設定listen 12011
├─ Dockerfile # 應用容器建置檔(含 Gunicorn 啟動)
├─ docker-compose.yml # Composenginx + todolist-app
└─ .env.production # 生產環境變數
```
## 主要環境變數(.env.production
- Database`MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE`
- LDAP/AD`LDAP_SERVER, LDAP_PORT, LDAP_USE_SSL, LDAP_SEARCH_BASE, LDAP_BIND_USER_DN, LDAP_BIND_USER_PASSWORD, LDAP_USER_LOGIN_ATTR`
- SMTP`SMTP_SERVER, SMTP_PORT, SMTP_USE_TLS, SMTP_USE_SSL, SMTP_AUTH_REQUIRED, SMTP_SENDER_EMAIL, SMTP_SENDER_PASSWORD`
- Flask/JWT`SECRET_KEY, JWT_SECRET_KEY`
- CORS`CORS_ORIGINS=http://localhost:12011,http://127.0.0.1:12011`
## Docker 服務(最新)
- `todolist-app`(應用容器)
- 對外不開放 Port內部提供 `12011`
- 健康檢查:`GET /api/health/`
- 重啟策略:`unless-stopped`
- `nginx`(反向代理)
- 對外 Port`12011:12011`
- 代理規則:`/api/*` 與其餘路由 → `todolist-app:12011`
- 設定檔:`nginx/nginx.conf`
## Gunicorn 生產設定(現行)
Dockerfile 已內建以下啟動參數:
```bash
--bind 0.0.0.0:12011
--worker-class gthread
--workers 4
--threads 8
--timeout 120
--keep-alive 10
--max-requests 2000
--max-requests-jitter 200
--forwarded-allow-ips *
```
並發估算4 workers × 8 threads ≈ 32 併發(可依 CPU 核心數調整)。
## 部署步驟
Windows
```batch
git clone <repository-url>
cd TODOLIST
deploy.bat
```
Linux/Mac
```bash
git clone <repository-url>
cd TODOLIST
chmod +x deploy.sh
./deploy.sh
```
或直接使用 Compose
```bash
docker-compose up --build -d
```
## 驗證與測試
```bash
curl http://localhost:12011 # 前端首頁
curl http://localhost:12011/api/health # 健康檢查
```
## 維運常用指令
```bash
docker-compose ps
docker-compose logs -f
docker-compose restart
docker-compose down
docker-compose up -d --build
docker stats
docker inspect todolist-nginx
docker inspect todolist-single-prod
```
## 疑難排解(重點)
- 端口占用:`netstat -ano | findstr :12011`
- SPA 404由 Flask 回傳 `index.html` 已處理;若異常請重建鏡像
- 後端 URL 與重導:已加 `ProxyFix` 並信任代理標頭
- 大量連線:由 Nginx 保持連線與緩衝Gunicorn gthread 提升併發
## 安全建議
- 更換強度足夠的 `SECRET_KEY``JWT_SECRET_KEY`
- 若需 TLS/443可在 `nginx/nginx.conf` 新增對應 server 與憑證設定
- 適度設定 `client_max_body_size`、基本安全標頭與 Rate Limit視需求
## 版本資訊(摘要)
- 架構Nginx 反向代理 + Gunicorn 應用容器(對外 Port 12011
- 應用服務器Gunicorn 21.2.0
- 併發能力:預設約 32可依硬體調整
- 訪問端點:`http://localhost:12011`