#!/bin/bash # ERP AI Assistant - 一键启动脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 项目根目录 PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BACKEND_DIR="$PROJECT_ROOT/backend" FRONTEND_DIR="$PROJECT_ROOT/frontend" LOGS_DIR="$PROJECT_ROOT/logs" # 创建日志目录 mkdir -p "$LOGS_DIR" # 日志文件 BACKEND_LOG="$LOGS_DIR/backend.log" FRONTEND_LOG="$LOGS_DIR/frontend.log" PID_FILE="$LOGS_DIR/pids.txt" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} ERP AI Assistant - 启动中...${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查虚拟环境 if [ ! -d "$BACKEND_DIR/venv" ]; then echo -e "${RED}✗ 后端虚拟环境不存在${NC}" echo -e "${YELLOW} 请先运行: cd backend && python3 -m venv venv && pip install -r requirements.txt${NC}" exit 1 fi # 检查 node_modules if [ ! -d "$FRONTEND_DIR/node_modules" ]; then echo -e "${RED}✗ 前端依赖未安装${NC}" echo -e "${YELLOW} 请先运行: cd frontend && npm install${NC}" exit 1 fi # 检查 .env 文件 if [ ! -f "$BACKEND_DIR/.env" ]; then echo -e "${YELLOW}⚠ .env 文件不存在,使用 .env.example${NC}" cp "$BACKEND_DIR/.env.example" "$BACKEND_DIR/.env" fi # 清理旧进程 if [ -f "$PID_FILE" ]; then echo -e "${YELLOW}停止旧进程...${NC}" while read pid; do if kill -0 "$pid" 2>/dev/null; then kill "$pid" 2>/dev/null || true fi done < "$PID_FILE" rm -f "$PID_FILE" sleep 2 fi # 清空日志 > "$BACKEND_LOG" > "$FRONTEND_LOG" echo -e "${GREEN}启动后端服务...${NC}" cd "$BACKEND_DIR" source venv/bin/activate nohup python -m app.main >> "$BACKEND_LOG" 2>&1 & BACKEND_PID=$! echo "$BACKEND_PID" >> "$PID_FILE" echo -e " PID: $BACKEND_PID" echo -e " 日志: $BACKEND_LOG" echo -e " 地址: ${GREEN}http://localhost:8000${NC}" # 等待后端启动 echo -e "\n${YELLOW}等待后端启动...${NC}" sleep 3 # 检查后端是否成功启动 if curl -s http://localhost:8000/health > /dev/null 2>&1; then echo -e "${GREEN}✓ 后端启动成功${NC}" else echo -e "${YELLOW}⚠ 后端可能还在启动中,请稍后检查日志${NC}" fi echo -e "\n${GREEN}启动前端服务...${NC}" cd "$FRONTEND_DIR" nohup npm run dev >> "$FRONTEND_LOG" 2>&1 & FRONTEND_PID=$! echo "$FRONTEND_PID" >> "$PID_FILE" echo -e " PID: $FRONTEND_PID" echo -e " 日志: $FRONTEND_LOG" echo -e " 地址: ${GREEN}http://localhost:5173${NC}" # 等待前端启动 echo -e "\n${YELLOW}等待前端启动...${NC}" sleep 5 # 检查前端是否成功启动 if curl -s http://localhost:5173 > /dev/null 2>&1; then echo -e "${GREEN}✓ 前端启动成功${NC}" else echo -e "${YELLOW}⚠ 前端可能还在启动中,请稍后检查日志${NC}" fi echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} ✅ 启动完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "📍 访问地址:" echo -e " 前端: ${BLUE}http://localhost:5173${NC}" echo -e " 后端: ${BLUE}http://localhost:8000${NC}" echo -e " API文档: ${BLUE}http://localhost:8000/docs${NC}" echo "" echo -e "📋 管理命令:" echo -e " 查看日志: ${YELLOW}tail -f logs/backend.log${NC} 或 ${YELLOW}tail -f logs/frontend.log${NC}" echo -e " 停止服务: ${YELLOW}./stop.sh${NC}" echo -e " 重启服务: ${YELLOW}./restart.sh${NC}" echo "" echo -e "💡 提示:" echo -e " - 后端日志: $BACKEND_LOG" echo -e " - 前端日志: $FRONTEND_LOG" echo -e " - 进程 PID 已保存到: $PID_FILE" echo ""