Phase 2: ProxyService reverse proxy (HTTP+WebSocket forwarding)

- New: services/proxy_service.py (path->URL mapping)
- New: services/web_panel/routes/proxy.py (3 REST endpoints)
- New: static/web_panel/pages/proxy.html (WebUI)
- Tests: 28/28 passing
This commit is contained in:
2026-06-10 20:47:17 +08:00
parent 8dbf628dd6
commit c680fea8e0
6 changed files with 238 additions and 9 deletions
+16 -8
View File
@@ -5,6 +5,7 @@ import logging
import asyncio
import sys
import signal
from services.proxy_service import ProxyService
from services.project_engine import ProjectEngine
from services.pyenv_manager import PyEnvManager
from services.web_panel.routes import projects
@@ -181,20 +182,23 @@ class CatFramework:
# 注册框架关闭处理器
shutdown_service.register_shutdown_handler(self._framework_shutdown_handler)
# 11.7 项目引擎
# 11.7 项目引擎 + 反向代理
try:
logger.info("> 初始化 项目引擎 中...")
project_engine = ProjectEngine(self.service_manager)
await project_engine.start()
self.service_manager.register_service("project_engine", project_engine)
pe_mgr = PyEnvManager("data/projects")
self.service_manager.register_service("pyenv", pe_mgr)
# project routes registered by web_panel manager (before router freeze)
logger.info("✅ 项目引擎就绪")
self.service_manager.register_service("pyenv", PyEnvManager("data/projects"))
logger.info("> 初始化 反向代理 中...")
proxy_service = ProxyService(self.service_manager)
await proxy_service.start()
if internet_service and internet_service.http_app:
proxy_service.setup_routes(internet_service.http_app)
self.service_manager.register_service("proxy", proxy_service)
logger.info("✅ 项目引擎+反向代理就绪")
except Exception as e:
logger.warning(f"项目引擎初始化跳过: {e}")
logger.warning(f"引擎/代理初始化跳过: {e}")
logger.info("🎉 SenSu 初始化完成!")
logger.info("🎉 DreamSu 初始化完成!")
self.is_running = True
# 显示欢迎日志
@@ -414,6 +418,10 @@ if __name__ == "__main__":
try:
# 设置更详细的异常处理
import signal
from services.proxy_service import ProxyService
from services.project_engine import ProjectEngine
from services.pyenv_manager import PyEnvManager
from services.web_panel.routes import projects
def signal_handler(signum, frame):
"""信号处理"""