Files
erp-ass/start.sh
dazhuang f68edf2696 fix: use uvicorn directly without reload mode for backend startup
- Fix backend process dying immediately after startup
- Change from 'python -m app.main' to 'uvicorn app.main:app'
- Remove reload mode for stable background operation
- Resolve 'connect ECONNREFUSED 127.0.0.1:8000' error

Problem:
- Backend used reload=settings.DEBUG mode
- reload mode conflicts with nohup background running
- Process management became unstable
- Backend service stopped immediately after startup

Solution:
- Use uvicorn command directly without reload
- Single process mode, stable background operation
- Suitable for production environment

Files:
- start.sh: updated backend startup command
- docs/BACKEND_FIX.md: fix documentation
2026-03-22 03:14:54 +00:00

128 lines
3.7 KiB
Bash
Executable File

#!/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 uvicorn app.main:app --host 0.0.0.0 --port 8000 >> "$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 ""