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

3.8 KiB
Raw Blame History

TODO 管理系統 - 生產環境部署指南(最新架構)

概述

本文件說明最新部署架構:以 Nginx 為對外入口Port 12011反向代理至後端 Gunicorn容器內 12011前端由 Flask 靜態目錄提供。此架構提升穩定度與擴充性,支援約 200 位同時使用者。

架構總覽

  • 對外入口Nginx容器 nginx),監聽並對外開放 12011
  • 應用服務Flask + Gunicorn容器 todolist-app),僅容器網路內提供 12011
  • 前端Next.js 靜態輸出隨應用容器打包Flask 靜態目錄 frontend/out
  • CORS允許 http://localhost:12011http://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

  • DatabaseMYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE
  • LDAP/ADLDAP_SERVER, LDAP_PORT, LDAP_USE_SSL, LDAP_SEARCH_BASE, LDAP_BIND_USER_DN, LDAP_BIND_USER_PASSWORD, LDAP_USER_LOGIN_ATTR
  • SMTPSMTP_SERVER, SMTP_PORT, SMTP_USE_TLS, SMTP_USE_SSL, SMTP_AUTH_REQUIRED, SMTP_SENDER_EMAIL, SMTP_SENDER_PASSWORD
  • Flask/JWTSECRET_KEY, JWT_SECRET_KEY
  • CORSCORS_ORIGINS=http://localhost:12011,http://127.0.0.1:12011

Docker 服務(最新)

  • todolist-app(應用容器)

    • 對外不開放 Port內部提供 12011
    • 健康檢查:GET /api/health/
    • 重啟策略:unless-stopped
  • nginx(反向代理)

    • 對外 Port12011:12011
    • 代理規則:/api/* 與其餘路由 → todolist-app:12011
    • 設定檔:nginx/nginx.conf

Gunicorn 生產設定(現行)

Dockerfile 已內建以下啟動參數:

--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

git clone <repository-url>
cd TODOLIST
deploy.bat

Linux/Mac

git clone <repository-url>
cd TODOLIST
chmod +x deploy.sh
./deploy.sh

或直接使用 Compose

docker-compose up --build -d

驗證與測試

curl http://localhost:12011            # 前端首頁
curl http://localhost:12011/api/health # 健康檢查

維運常用指令

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_KEYJWT_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