Spaces:
Sleeping
Sleeping
| # app.py | |
| # 主程式檔案 - 整合所有模組並啟動應用 | |
| # 此檔案負責初始化系統、載入模組和啟動服務 | |
| import os | |
| from fastapi.middleware.cors import CORSMiddleware | |
| # 載入配置和工具 | |
| from config import SERVER_CONFIG | |
| from utils import setup_chinese_font, suppress_warnings | |
| from models import load_models_and_data | |
| from api import api_app | |
| from ui import create_demo, custom_css | |
| # 初始化系統 | |
| setup_chinese_font() | |
| suppress_warnings() | |
| load_models_and_data() | |
| # 設定 CORS | |
| api_app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| allow_credentials=False, # 避免與 allow_origins=["*"] 衝突 | |
| ) | |
| if __name__ == "__main__": | |
| # 取得環境變數,HF 預設 PORT 通常是 7860,HOST 務必用 0.0.0.0 | |
| host = SERVER_CONFIG["host"] | |
| port = SERVER_CONFIG["port"] | |
| try: | |
| import uvicorn | |
| import gradio as gr | |
| # 創建 Gradio 應用 | |
| demo = create_demo() | |
| # 將 Gradio 掛載到 FastAPI (api_app) | |
| # 這樣兩者會「合體」在同一個 Port 執行 | |
| app = gr.mount_gradio_app(api_app, demo, path="/") | |
| print(f"🚀 數位保鏢系統啟動中:http://{host}:{port}") | |
| # 唯一啟動點:交給 uvicorn 負責 | |
| # 不要再 except 裡面放 demo.launch(),避免自動跳埠到 7861 | |
| uvicorn.run( | |
| api_app, # 執行掛載後的 FastAPI 主程式 | |
| host=host, | |
| port=port, | |
| proxy_headers=True, # 必須!讓 Gradio 知道它在 HF 的代理之後 | |
| forwarded_allow_ips="*", # 必須!允許 HF 轉發 IP 資訊 | |
| timeout_keep_alive=30, # 增加保持連線時間 | |
| log_level="info" | |
| ) | |
| except Exception as e: | |
| print(f"❌ 伺服器啟動嚴重錯誤: {e}") |