This commit is contained in:
2026-05-14 15:07:34 +08:00
parent c2a398930d
commit 10d04c4083
179 changed files with 24073 additions and 1243 deletions

217
start_all.sh Normal file
View File

@@ -0,0 +1,217 @@
#!/bin/bash
# start_all.sh - 整合启动脚本API + 前端)
# 前端使用 Vite 开发模式 (npm run dev)
set -e
VENV_DIR=".venv"
LOG_DIR="logs"
PID_FILE_API="$LOG_DIR/api.pid"
PID_FILE_FRONTEND="$LOG_DIR/frontend.pid"
LOG_FILE_API="$LOG_DIR/api.log"
# 创建日志目录
mkdir -p $LOG_DIR
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} AI+合规智能中枢 - 服务启动${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
# ===== 环境检查 =====
# 检查虚拟环境
if [ ! -d "$VENV_DIR" ]; then
echo -e "${RED}错误: 虚拟环境不存在${NC}"
echo "请先运行: ./quick_start.sh"
exit 1
fi
# 激活虚拟环境
source $VENV_DIR/bin/activate
echo -e "${GREEN}✓ 虚拟环境已激活: $VENV_DIR${NC}"
# 检查.env文件
if [ ! -f ".env" ]; then
echo -e "${YELLOW}警告: .env文件不存在使用默认配置${NC}"
else
echo -e "${GREEN}✓ 配置文件已加载: .env${NC}"
fi
# 加载环境变量
export $(grep -v '^#' .env | xargs 2>/dev/null || true)
# 启动参数
API_HOST=${API_HOST:-0.0.0.0}
API_PORT=${API_PORT:-8000}
FRONTEND_PORT=${FRONTEND_PORT:-3000}
echo ""
# ===== 启动API服务 =====
echo -e "${YELLOW}[1/2] 启动API服务...${NC}"
# 检查是否已运行
if [ -f "$PID_FILE_API" ]; then
OLD_PID=$(cat $PID_FILE_API)
if ps -p $OLD_PID > /dev/null 2>&1; then
echo -e "${YELLOW}API服务已在运行 (PID: $OLD_PID)${NC}"
else
rm -f $PID_FILE_API
fi
fi
# 启动API后台模式
if [ ! -f "$PID_FILE_API" ]; then
nohup $VENV_DIR/bin/python -m uvicorn src.api.main:app \
--host $API_HOST --port $API_PORT \
> $LOG_FILE_API 2>&1 &
API_PID=$!
echo $API_PID > $PID_FILE_API
sleep 2
if ps -p $API_PID > /dev/null 2>&1; then
echo -e "${GREEN}✓ API服务启动成功 (PID: $API_PID)${NC}"
else
echo -e "${RED}✗ API服务启动失败${NC}"
echo "请查看日志: $LOG_FILE_API"
exit 1
fi
fi
echo ""
# ===== 启动前端服务 =====
echo -e "${YELLOW}[2/2] 启动前端服务...${NC}"
# 检查前端目录
FRONTEND_DIR="frontend"
if [ ! -d "$FRONTEND_DIR" ]; then
echo -e "${RED}错误: 前端目录不存在${NC}"
exit 1
fi
# 检查是否已运行
if [ -f "$PID_FILE_FRONTEND" ]; then
OLD_PID=$(cat $PID_FILE_FRONTEND)
if ps -p $OLD_PID > /dev/null 2>&1; then
echo -e "${YELLOW}前端服务已在运行 (PID: $OLD_PID)${NC}"
else
rm -f $PID_FILE_FRONTEND
fi
fi
# 启动前端(后台模式)
if [ ! -f "$PID_FILE_FRONTEND" ]; then
cd $FRONTEND_DIR
# 检查Node版本
NODE_VERSION=$(node -v 2>/dev/null || echo "v0")
echo -e "${CYAN}Node版本: $NODE_VERSION${NC}"
# 检查node_modules是否存在
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}首次启动,安装前端依赖...${NC}"
npm install
if [ $? -ne 0 ]; then
echo -e "${RED}✗ 前端依赖安装失败${NC}"
echo "请手动安装: cd frontend && npm install"
exit 1
fi
echo -e "${GREEN}✓ 前端依赖安装完成${NC}"
else
echo -e "${GREEN}✓ 前端依赖已存在${NC}"
# 检查vite是否已安装
if [ ! -d "node_modules/vite" ]; then
echo -e "${YELLOW}vite未安装重新安装依赖...${NC}"
npm install
if [ $? -ne 0 ]; then
echo -e "${RED}✗ 前端依赖安装失败${NC}"
exit 1
fi
fi
fi
# 使用 npx vite 启动(确保能找到 vite 命令)
echo -e "${CYAN}使用 Vite 开发模式 (端口: $FRONTEND_PORT)${NC}"
nohup npx vite --host 0.0.0.0 --port $FRONTEND_PORT > ../$LOG_DIR/frontend.log 2>&1 &
FRONTEND_PID=$!
cd ..
echo $FRONTEND_PID > $PID_FILE_FRONTEND
sleep 3
# 检查进程
if ps -p $FRONTEND_PID > /dev/null 2>&1; then
echo -e "${GREEN}✓ 前端服务启动成功 (PID: $FRONTEND_PID)${NC}"
else
# Vite 可能启动较慢,等待更长时间再检查
echo -e "${YELLOW}等待 Vite 启动完成...${NC}"
sleep 5
# 检查是否有 vite 进程
VITE_PID=$(pgrep -f "vite" 2>/dev/null || true)
if [ -n "$VITE_PID" ]; then
echo $VITE_PID > $PID_FILE_FRONTEND
echo -e "${GREEN}✓ Vite 已启动 (PID: $VITE_PID)${NC}"
else
echo -e "${RED}✗ 前端服务启动失败${NC}"
echo "请查看日志: $LOG_DIR/frontend.log"
echo ""
echo "常见问题排查:"
echo " 1. Node版本过低: 需要 Node 20+"
echo " 当前版本: $NODE_VERSION"
echo " 升级命令: curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - && sudo yum install -y nodejs"
echo ""
echo " 2. 查看详细错误:"
echo " cat $LOG_DIR/frontend.log"
exit 1
fi
fi
fi
echo ""
# ===== 输出访问地址 =====
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} 服务已启动${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
echo -e "${GREEN}API服务:${NC}"
echo " 地址: http://localhost:$API_PORT"
echo " 文档: http://localhost:$API_PORT/docs"
echo " 健康检查: http://localhost:$API_PORT/health"
echo ""
echo -e "${GREEN}前端测试页面:${NC}"
echo " 地址: http://localhost:$FRONTEND_PORT"
echo " 模式: Vite 开发模式"
echo ""
echo -e "${GREEN}日志文件:${NC}"
echo " API: $LOG_FILE_API"
echo " 前端: $LOG_DIR/frontend.log"
echo ""
echo -e "${YELLOW}管理命令:${NC}"
echo " 查看状态: ./status.sh"
echo " 查看日志: tail -f $LOG_DIR/frontend.log"
echo " 停止服务: ./stop_all.sh"
echo " 重启服务: ./restart_all.sh"
echo ""