Files
TEMP_spec_system/DEPLOYMENT.md
beabigegg a408ce402d check_ok
2025-09-12 08:00:56 +08:00

8.5 KiB
Raw Blame History

部署指南 - 暫時規範管理系統 V4

本文件提供詳細的部署指導,涵蓋 Docker 環境部署方式。

🎉 生產環境優化完成

已完成50人併發生產環境優化

  • Gunicorn WSGI部署多進程併發
  • Redis快取系統提升效能
  • Nginx反向代理負載均衡
  • CDN支援靜態資源加速
  • 資源限制(防止系統過載)
  • 監控工具(效能監控)

📋 目錄

  1. 系統需求
  2. 快速部署
  3. 生產環境配置
  4. 監控與管理
  5. 服務訪問
  6. 疑難排解

1. 系統需求

前置需求檢查清單

  • Docker 20.10+ 已安裝且運行中
  • Docker Compose 2.0+ 已安裝
  • 外部 MySQL 資料庫可訪問 (mysql.theaken.com:33306)
  • LDAP/Active Directory 伺服器可連線
  • SMTP 郵件伺服器已配置
  • 足夠的磁碟空間 (建議至少 10GB)

端口需求

確保以下端口未被占用:

  • 12010: Flask 應用程式Gunicorn
  • 12011: OnlyOffice 文檔服務
  • 12013: Nginx HTTP反向代理
  • 12014: Nginx HTTPS反向代理
  • 6379: Redis 快取(內部)

2. 快速部署

一鍵部署(推薦)

# 1. 克隆專案
git clone <repository-url>
cd TEMP_spec_system_V4

# 2. 配置環境變數
cp .env.production .env
# 編輯 .env 文件,填入實際的配置值

# 3. 啟動所有服務(生產環境優化版本)
docker-compose up -d

# 4. 檢查服務狀態
docker-compose ps

預期輸出應包含以下服務

NAME                   STATUS              PORTS
tempspec-redis         Up (healthy)        
tempspec-onlyoffice    Up (healthy)        0.0.0.0:12011->80/tcp
tempspec-app           Up (healthy)        0.0.0.0:12010->5000/tcp
tempspec-nginx         Up                  0.0.0.0:12013->80/tcp, 0.0.0.0:12014->443/tcp
# 5. 查看服務日誌
docker-compose logs -f

# 6. 驗證服務可訪問性
curl -I http://localhost:12013/login    # Nginx 反向代理(推薦)
curl -I http://localhost:12010/login    # 直接訪問 Flask
curl -I http://localhost:12011          # OnlyOffice 服務

3. 生產環境配置

3.1 服務架構(生產優化)

用戶請求 → Nginx (12013/12014) → Gunicorn (多進程) → Flask App
                                      ↓
                                  Redis快取
                                      ↓  
                               外部MySQL資料庫

服務組件

  • Nginx: 反向代理 + 靜態檔案 + 負載均衡(端口 12013/12014
  • Flask 應用: Gunicorn WSGI伺服器多進程端口 12010
  • Redis: 快取系統(內部端口 6379
  • OnlyOffice: 文檔編輯服務(端口 12011
  • MySQL: 外部資料庫服務mysql.theaken.com

3.2 效能規格50人併發支援

  • 併發處理: 2-8個Gunicorn worker進程
  • 記憶體使用: App容器1GB + Redis 256MB
  • 快取命中: Redis快取減少70%+資料庫查詢
  • 響應時間: < 200ms快取命中時
  • 可用性: 99.9%+(健康檢查 + 自動重啟)

3.3 環境變數配置

編輯 .env 檔案(基於 .env.production 範例):

# 生產環境基本設定
FLASK_ENV=production
SECRET_KEY=your_super_secret_production_key_here

# 服務端口
APP_PORT=12010              # Gunicorn WSGI伺服器
ONLYOFFICE_PORT=12011       # OnlyOffice 服務
NGINX_PORT=12013            # Nginx HTTP
NGINX_SSL_PORT=12014        # Nginx HTTPS

# Redis 快取
REDIS_URL=redis://redis:6379/0

# CDN 支援 (可選)
CDN_DOMAIN=cdn.yourcompany.com

# 資料庫連線
DATABASE_URL=mysql+pymysql://user:pass@mysql.theaken.com:33306/dbname

# LDAP 設定
LDAP_SERVER=panjit.com.tw
LDAP_PORT=389
LDAP_USE_SSL=false
LDAP_SEARCH_BASE=OU=PANJIT,DC=panjit,DC=com,DC=tw
LDAP_BIND_USER_DN=CN=LdapBind,CN=Users,DC=PANJIT,DC=COM,DC=TW
LDAP_BIND_USER_PASSWORD=your_ldap_password
LDAP_USER_LOGIN_ATTR=userPrincipalName

# SMTP 設定
SMTP_SERVER=mail.panjit.com.tw
SMTP_PORT=25
SMTP_USE_TLS=false
SMTP_SENDER_EMAIL=temp-spec-system@panjit.com.tw

# ONLYOFFICE 設定
ONLYOFFICE_JWT_SECRET=your_onlyoffice_jwt_secret

4. 監控與管理

4.1 系統監控

# 即時監控每5秒刷新
python monitor.py --watch 5

# 單次檢查
python monitor.py

# JSON格式輸出
python monitor.py --json

4.2 Docker 管理命令

# 查看所有服務狀態
docker-compose ps

# 查看實時日誌
docker-compose logs -f

# 查看特定服務日誌
docker-compose logs -f app
docker-compose logs -f redis
docker-compose logs -f nginx

# 重啟服務
docker-compose restart
docker-compose restart app

# 停止所有服務
docker-compose down

# 查看資源使用
docker stats

4.3 Redis 快取管理

# 連接Redis並測試
docker-compose exec redis redis-cli ping

# 查看快取統計
docker-compose exec redis redis-cli info stats

# 清空所有快取
docker-compose exec redis redis-cli FLUSHALL

# 查看快取鍵值數量
docker-compose exec redis redis-cli DBSIZE

5. 服務訪問

5.1 服務入口

服務啟動後,可透過以下 URL 訪問:

主要服務

推薦使用方式(生產環境)

  • 使用 Nginx 反向代理: http://localhost:12013
  • 直接訪問 Flask: http://localhost:12010

5.2 登入資訊

  • 認證方式: LDAP/Active Directory
  • 登入帳號: 使用公司 LDAP 帳號密碼
  • 登入格式: 支援 username@panjit.com.twusername

5.3 預設管理員帳號

如需創建本地管理員帳號非LDAP

# 進入應用容器
docker-compose exec app python update_admin.py

# 或手動創建
docker-compose exec app python -c "
from models import db, User
from werkzeug.security import generate_password_hash
from app import app

with app.app_context():
    admin = User(
        username='admin',
        email='admin@company.com',
        password_hash=generate_password_hash('admin123'),
        is_admin=True
    )
    db.session.add(admin)
    db.session.commit()
    print('管理員帳號已創建: admin/admin123')
"

6. 疑難排解

6.1 生產環境常見問題

Redis 連接失敗

# 檢查Redis容器狀態
docker-compose logs redis

# 測試Redis連接
docker-compose exec redis redis-cli ping

# 重啟Redis
docker-compose restart redis

應用程式無回應

# 檢查Gunicorn日誌
docker-compose logs app

# 檢查容器資源
docker stats tempspec-app

# 重啟應用
docker-compose restart app

效能問題

# 檢查快取命中率
python monitor.py

# 檢查Gunicorn worker狀態
docker-compose exec app ps aux | grep gunicorn

# 調整worker數量編輯gunicorn.conf.py

6.2 基本故障排除

容器無法啟動

# 檢查容器狀態
docker-compose ps

# 查看詳細日誌
docker-compose logs app
docker-compose logs onlyoffice
docker-compose logs redis

資料庫連線失敗

# 測試資料庫連接
docker-compose exec app python -c "
import pymysql
try:
    conn = pymysql.connect(host='mysql.theaken.com', port=33306, user='A060', password='WLeSCi0yhtc7', database='db_A060')
    print('Database connection successful')
    conn.close()
except Exception as e:
    print(f'Database connection failed: {e}')
"

端口衝突 修改 .env 文件中的端口設定:

APP_PORT=12015        # 改為其他可用端口
ONLYOFFICE_PORT=12016 # 改為其他可用端口
NGINX_PORT=12017      # 改為其他可用端口

6.3 維護命令

# 完全重建服務(清除快取)
docker-compose down
docker-compose build --no-cache
docker-compose up -d

# 更新單一服務
docker-compose up -d --force-recreate app

# 清理未使用的 Docker 資源
docker system prune -a

6.4 效能調優

Redis 優化

# 調整 Redis 記憶體限制(編輯 docker-compose.yml
# 預設: 256MB可根據需要調整

# 監控 Redis 使用
docker-compose exec redis redis-cli info memory

Gunicorn 調優

# 編輯 gunicorn.conf.py 調整:
# - workers: worker 進程數量
# - timeout: 請求超時時間
# - max_requests: worker 重啟頻率

🎉 生產環境部署完成系統已準備好支援50人的併發使用。

快速啟動: docker-compose up -d 系統監控: python monitor.py --watch 5 服務訪問: http://localhost:12013/login