# -*- coding: utf-8 -*- """FastAPI 服务入口(uvicorn)。 运行(生产/开发一致): python web/main.py 迁移期(strangler):默认开启 Flask 兜底——未迁移的路由由遗留 Flask 应用处理, 已迁移的 /api/v1 路由走 FastAPI。全部迁移完成后把 FASTAPI_FLASK_FALLBACK 默认值 改为 0 即可完全脱离 Flask(届时删除 setdefault 行为)。 """ import os import sys import uvicorn # 直接以 `python web/main.py` 运行时,sys.path[0] 是 web/ 而非项目根—— # 补上项目根,保证 `import core` / `import music_api` / `import web.app` 可用。 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from web.app import create_app HOST = os.environ.get('HOST', '0.0.0.0') PORT = int(os.environ.get('PORT', '5000')) # 运行模式(默认保持迁移期形态,切换为显式操作): # WEB_MODE=dual(默认)已迁移路由挂 /api/v1 + Flask 兜底其余路由(前端仍走根路径→Flask) # WEB_MODE=fastapi 已迁移路由直接挂根路径,完全由 FastAPI 服务(不再需要 Flask) WEB_MODE = os.environ.get('WEB_MODE', 'dual').strip().lower() if WEB_MODE == 'fastapi': app = create_app(serve_flask_fallback=False, api_prefix='') else: app = create_app(serve_flask_fallback=True, api_prefix='/api/v1') if __name__ == '__main__': uvicorn.run( app, host=HOST, port=PORT, log_level=os.environ.get('LOG_LEVEL', 'info').lower(), # 反向代理(Caddy 本机回环)下按 XFF 取真实 IP,与既有口径一致 proxy_headers=True, forwarded_allow_ips='127.0.0.1', server_header=False, # 不暴露服务器版本指纹 date_header=True, )