#!/bin/bash echo "========================================" echo " 创赢未来评分系统 - 本地启动脚本" echo "========================================" echo "" # 函数:检查端口并释放 check_port() { local port=$1 local pid=$(lsof -ti:$port 2>/dev/null) if [ -n "$pid" ]; then echo "端口 $port 被占用,正在释放..." kill -9 $pid 2>/dev/null || true sleep 1 fi } # 释放端口 check_port 8876 check_port 5173 # 检查环境 echo "✅ 检查环境..." # 检查后端虚拟环境 if [ ! -d "backend/venv" ]; then echo "❌ 后端虚拟环境不存在,正在创建..." cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt cd .. else echo "✅ 后端虚拟环境已存在" fi # 检查前端依赖 if [ ! -d "frontend/node_modules" ]; then echo "❌ 前端依赖不存在,正在安装..." cd frontend npm install cd .. else echo "✅ 前端依赖已存在" fi echo "" echo "========================================" echo " 启动服务" echo "========================================" echo "" # 启动后端 echo "🚀 启动后端服务 (http://localhost:8876)" cd backend source venv/bin/activate python manage.py migrate 2>/dev/null || echo "迁移可能需要手动执行" python manage.py runserver 0.0.0.0:8876 > /tmp/backend.log 2>&1 & BACKEND_PID=$! echo " 后端 PID: $BACKEND_PID" echo " 日志: /tmp/backend.log" cd .. # 等待后端启动 sleep 3 # 启动前端 echo "" echo "🚀 启动前端服务 (http://localhost:5173)" cd frontend npm run dev > /tmp/frontend.log 2>&1 & FRONTEND_PID=$! echo " 前端 PID: $FRONTEND_PID" echo " 日志: /tmp/frontend.log" cd .. echo "" echo "========================================" echo " 服务已启动!" echo "========================================" echo "" echo "📱 前端页面: http://localhost:5173" echo "🔧 后端 API: http://localhost:8876" echo "📚 API文档: http://localhost:8876/api/docs/" echo "⚙️ 后台管理: http://localhost:8876/admin/" echo "" echo "💡 查看日志:" echo " tail -f /tmp/backend.log" echo " tail -f /tmp/frontend.log" echo "" echo "🛑 停止服务: 按 Ctrl+C" echo "" # 保存 PID echo "$BACKEND_PID $FRONTEND_PID" > /tmp/scoring_pids # 捕获终止信号 cleanup() { echo "" echo "========================================" echo " 正在停止服务..." echo "========================================" kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true sleep 1 echo "✅ 服务已停止" rm -f /tmp/scoring_pids exit 0 } trap cleanup INT TERM # 等待 wait