#!/bin/bash # Neural Sync 启动器 - 一键启动前后端服务 set -e PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$PROJECT_DIR" echo "🚀 Neural Sync 启动器" echo "====================" # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # 检查虚拟环境 if [ ! -d "venv" ]; then echo -e "${RED}❌ 虚拟环境不存在,请先创建: python -m venv venv${NC}" exit 1 fi # 激活虚拟环境 source venv/bin/activate # 清理端口 echo "🧹 清理端口..." lsof -ti:8000 2>/dev/null | xargs kill -9 2>/dev/null || true lsof -ti:5173 2>/dev/null | xargs kill -9 2>/dev/null || true sleep 1 # 创建日志目录 mkdir -p logs # 启动后端 echo -e "${GREEN}▶️ 启动后端服务...${NC}" cd backend nohup uvicorn app.main:app --reload --port 8000 > ../logs/backend.log 2>&1 & BACKEND_PID=$! cd .. # 等待后端启动 echo "⏳ 等待后端启动..." for i in {1..10}; do if curl -s http://127.0.0.1:8000/docs > /dev/null 2>&1; then echo -e "${GREEN}✅ 后端启动成功 (PID: $BACKEND_PID)${NC}" break fi if [ $i -eq 10 ]; then echo -e "${RED}❌ 后端启动失败,查看日志: logs/backend.log${NC}" exit 1 fi sleep 1 done # 启动前端 echo -e "${GREEN}▶️ 启动前端服务...${NC}" cd frontend nohup npm run dev -- --host > ../logs/frontend.log 2>&1 & FRONTEND_PID=$! cd .. # 等待前端启动 echo "⏳ 等待前端启动..." for i in {1..15}; do if curl -s http://127.0.0.1:5173 > /dev/null 2>&1; then echo -e "${GREEN}✅ 前端启动成功 (PID: $FRONTEND_PID)${NC}" break fi if [ $i -eq 15 ]; then echo -e "${YELLOW}⚠️ 前端可能还在启动中,查看日志: logs/frontend.log${NC}" break fi sleep 1 done # 保存 PID 到文件 echo "$BACKEND_PID" > logs/backend.pid echo "$FRONTEND_PID" > logs/frontend.pid echo "" echo -e "${GREEN}🎉 所有服务启动完成!${NC}" echo "====================" echo -e " 后端: ${YELLOW}http://127.0.0.1:8000${NC}" echo -e " 前端: ${YELLOW}http://127.0.0.1:5173${NC}" echo -e " API 文档: ${YELLOW}http://127.0.0.1:8000/docs${NC}" echo "" echo "📝 日志文件:" echo " 后端: logs/backend.log" echo " 前端: logs/frontend.log" echo "" echo -e "${YELLOW}💡 停止服务: ./stop.sh${NC}" echo -e "${YELLOW}💡 查看日志: tail -f logs/backend.log 或 logs/frontend.log${NC}" echo ""