File size: 1,846 Bytes
7d67a69
 
 
a088502
7d67a69
5b7fa18
a088502
7d67a69
 
 
 
 
 
3092ad6
7d67a69
 
 
 
d41d526
7d67a69
5b7fa18
 
 
 
 
fb04509
5b7fa18
 
f799e1d
7d67a69
 
598b017
4139bc4
a088502
 
7d67a69
 
 
 
 
 
4139bc4
5b7fa18
7d67a69
4139bc4
7d67a69
 
4139bc4
5b7fa18
598b017
7d67a69
 
598b017
 
 
ad4a621
5b7fa18
4139bc4
a088502
598b017
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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}")