Files
Document_translator_1panel/DEPLOYMENT_VERIFICATION.md
beabigegg 6599716481 1panel
2025-10-03 08:19:40 +08:00

5.4 KiB
Raw Blame History

🔍 1Panel 部署架構驗證報告

已修正的問題

1. 靜態文件路徑Docker → 本地)

修正前Docker 容器路徑)

# app.py
send_from_directory('/app/static', 'index.html')  # ❌

# app/root.py
send_from_directory('/app/static', 'index.html')  # ❌

修正後(相對路徑)

# app.py
static_dir = Path(__file__).parent / 'frontend' / 'dist'  # ✅
send_from_directory(str(static_dir), 'index.html')

# app/root.py
project_root = Path(__file__).parent.parent
static_dir = project_root / 'frontend' / 'dist'  # ✅
send_from_directory(str(static_dir), 'index.html')

影響:前端頁面現在可以正確載入


2. Gunicorn 啟動配置wsgi.py → app.py

修正前

# start.py
'wsgi:app'  # ❌ wsgi.py 已刪除

修正後

# start.py
'app:app'  # ✅ 直接使用 app.py

影響:生產環境 Gunicorn 可以正確啟動


架構驗證結果

1. 網路架構

用戶瀏覽器 (http://server-ip:12010)
    ↓
Gunicorn (4 Workers) + Flask (PORT=12010)
    ↓
Redis (localhost:6379) ← Celery Worker/Beat
    ↓
MySQL (mysql.theaken.com:33306)
  • 無 Nginx已完全移除
  • 無 Docker 容器(直接在 1Panel 環境運行)
  • Gunicorn 直接對外提供服務

2. 端口配置一致性

服務 配置位置 端口 狀態
Flask Web .envPORT 12010 一致
Flask Web app.py 12010 (預設) 一致
Flask Web start.py 12010 (預設) 一致
Redis .envREDIS_URL 6379 一致
Redis config.py 6379 (預設) 一致
MySQL .envDATABASE_URL 33306 一致

3. 環境變數引用

關鍵環境變數檢查

PORT=12010              # Web 服務端口HOST=0.0.0.0           # 綁定所有網路介面REDIS_URL=redis://localhost:6379/0
✅ CELERY_BROKER_URL=redis://localhost:6379/0
✅ DATABASE_URL=mysql+pymysql://A060:...
✅ SECRET_KEY=production-secret-key-change-this-in-deployment
✅ JWT_SECRET_KEY=production-jwt-secret-change-this-in-deployment

所有環境變數在 .envconfig.pyapp.pystart.py 中引用一致


4. 路徑配置檢查

上傳目錄

# config.py
UPLOAD_FOLDER = Path('uploads').absolute()  # ✅ 相對路徑

日誌目錄

# config.py
LOG_FILE = Path('logs/app.log').absolute()  # ✅ 相對路徑

API 配置檔案

# config.py
api_file = Path('api.txt')  # ✅ 相對路徑

所有路徑都使用相對路徑,無 Docker 容器絕對路徑


5. Celery 配置

# .env
CELERY_BROKER_URL=redis://localhost:6379/0         # ✅
CELERY_RESULT_BACKEND=redis://localhost:6379/0     # ✅
CELERY_WORKER_CONCURRENCY=4                         # ✅

# config.py
CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL',
    'redis://localhost:6379/0')                     # ✅

Celery 配置正確指向本地 Redis無容器主機名


6. 前端靜態文件

frontend/dist/
├── index.html          # ✅ 存在
├── css/               # ✅ 存在
├── js/                # ✅ 存在
└── panjit-logo.png    # ✅ 存在

前端已編譯,檔案完整


啟動流程驗證

start.py 邏輯

1. 檢查環境 (Python 版本必要檔案)           # ✅
2. 讀取 PORT, HOST 環境變數                  # ✅
3. 根據 FLASK_ENV 選擇啟動方式
   - production: gunicorn app:app            # ✅
   - development: python3 app.py             # ✅
4. 啟動 Celery Worker (redis://localhost)   # ✅
5. 啟動 Celery Beat                          # ✅
6. 監控所有進程                               # ✅

⚠️ 剩餘注意事項

1. 環境準備

# IT 人員必須執行
sudo apt install redis-server        # Redis 未預裝
sudo systemctl start redis
redis-cli ping                        # 確認返回 PONG

2. 環境變數修改

# 必須修改(安全性)
SECRET_KEY=<隨機生成>
JWT_SECRET_KEY=<隨機生成>

# 可選修改(端口)
PORT=12010  # 建議範圍 12010-12019

3. 端口可用性

# 確認端口未被佔用
netstat -tuln | grep 12010

部署檢查清單

  • 刪除所有 Docker 相關檔案
  • 修正靜態文件路徑(/app/static → 相對路徑)
  • 修正 Gunicorn 啟動配置wsgi:app → app:app
  • Redis URL 使用 localhost非容器主機名
  • 所有路徑使用相對路徑
  • 環境變數配置一致
  • 端口配置文檔化
  • 前端靜態文件完整
  • Celery 配置正確
  • 啟動腳本邏輯完整

📋 最終架構確認

無 Docker 架構

  • 直接在 1Panel 虛擬環境運行
  • Gunicorn 處理 HTTP 請求(無 Nginx
  • Redis 本地運行(端口 6379
  • MySQL 外部服務mysql.theaken.com:33306

服務通訊

  • 所有服務使用 localhost 互相通訊
  • 對外僅暴露端口 12010可配置
  • 無容器網路,簡化架構

🎯 結論

所有已知的 Docker/Nginx 遺留問題已修正

系統現在完全適配 1Panel 部署環境:

  • 無容器依賴
  • 路徑正確
  • 配置一致
  • 架構簡化

可以安全部署到 1Panel 環境!