#!/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