Files
AIRegulation-DocAnalysis/start_all.sh
2026-05-14 15:07:34 +08:00

217 lines
5.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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