Files
live-hub-py/start_web.sh
T
yml2213 453a637480 refactor: 修复9项中等架构问题
安全修复:
- WebSocket 端点添加认证(cookie/token),防止未授权窃听日志
- SPA serve_spa 添加路径遍历防护(resolve + relative_to 检查)
- Token 改用 httpOnly Cookie 存储,移除前端 localStorage token(防 XSS 窃取)
- 添加安全响应头中间件(X-Content-Type-Options/X-Frame-Options/Referrer-Policy)
- HTTP 请求日志脱敏请求体中的 password/secret/token 等敏感字段
- 权限检查统一使用 user_has_permission(考虑自定义权限,修复 has_permission 忽略 custom_permissions 的缺陷)

性能与稳定性:
- cookies.py 列表接口修复 N+1 查询(改为批量查询 Account)
- login_service.py run() 结束时关闭 DB Session(防止连接泄漏)
- _active_batches/_active_tests 全局字典添加 threading.Lock(防止并发竞态)

配置优化:
- CORS 源支持环境变量 CORS_ORIGINS 配置
- Uvicorn reload 支持环境变量 UVICORN_RELOAD 控制(生产环境默认关闭)
- Cookie 安全标志支持环境变量 COOKIE_SECURE 配置(HTTPS 部署时启用)
- logs.py 权限不足返回 HTTP 403(原来返回 200 + message)
2026-06-23 06:51:01 +08:00

67 lines
1.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -e
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"
PYTHON="$ROOT_DIR/.venv/bin/python"
FRONTEND_DIR="$ROOT_DIR/web/frontend"
BACKEND_PORT=8000
FRONTEND_PORT=5173
# 检查 Python 虚拟环境
if [ ! -f "$PYTHON" ]; then
echo "❌ 未找到 .venv,正在创建..."
uv venv .venv
uv pip install -e .
fi
# 检查前端依赖
if [ ! -d "$FRONTEND_DIR/node_modules" ]; then
echo "❌ 前端依赖未安装,正在安装..."
cd "$FRONTEND_DIR" && npm install && cd "$ROOT_DIR"
fi
echo ""
echo "=============================="
echo " 斗鱼批量登录 - Web 后台"
echo "=============================="
echo " 后端: http://localhost:$BACKEND_PORT"
echo " 前端: http://localhost:$FRONTEND_PORT"
echo " 默认账号见环境变量 ADMIN_USERNAME/ADMIN_PASSWORD(未设置则为 admin/admin123"
echo " 按 Ctrl+C 停止所有服务"
echo "=============================="
echo ""
# 清理子进程
cleanup() {
echo ""
echo "正在停止服务..."
kill $BACKEND_PID $FRONTEND_PID 2>/dev/null
wait $BACKEND_PID $FRONTEND_PID 2>/dev/null
echo "已停止"
}
trap cleanup EXIT INT TERM
# 启动后端
echo "启动后端 (FastAPI :$BACKEND_PORT)..."
RELOAD_FLAG=""
if [ "${UVICORN_RELOAD:-true}" = "true" ]; then
RELOAD_FLAG="--reload"
fi
"$PYTHON" -m uvicorn web.backend.main:app --host 0.0.0.0 --port $BACKEND_PORT $RELOAD_FLAG &
BACKEND_PID=$!
# 等后端就绪
sleep 2
# 启动前端
echo "启动前端 (Vite :$FRONTEND_PORT)..."
cd "$FRONTEND_DIR"
npm run dev -- --port $FRONTEND_PORT --host 0.0.0.0 &
FRONTEND_PID=$!
cd "$ROOT_DIR"
# 等待子进程
wait