| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/bin/bash
- # 生产环境启动脚本
- # 使用 .env.lyrria 作为环境配置文件
- set -e # 遇到错误立即退出
- # 获取脚本所在目录(backend 目录)
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
- cd "$SCRIPT_DIR"
- # 颜色输出
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- RED='\033[0;31m'
- NC='\033[0m' # No Color
- echo -e "${GREEN}🚀 启动 Lyrria 生产环境服务...${NC}"
- # 检查 .env.lyrria 文件是否存在
- ENV_FILE="$SCRIPT_DIR/.env.lyrria"
- if [ ! -f "$ENV_FILE" ]; then
- echo -e "${RED}❌ 错误: 未找到环境配置文件 $ENV_FILE${NC}"
- echo -e "${YELLOW}提示: 请确保 .env.lyrria 文件存在于 backend 目录${NC}"
- exit 1
- fi
- echo -e "${GREEN}✅ 找到环境配置文件: $ENV_FILE${NC}"
- # 检查 Python 环境
- if ! command -v python3 &> /dev/null; then
- echo -e "${RED}❌ 错误: 未找到 python3 命令${NC}"
- exit 1
- fi
- # 检查虚拟环境(可选,如果使用虚拟环境)
- if [ -d "venv" ] || [ -d ".venv" ]; then
- VENV_DIR=""
- if [ -d "venv" ]; then
- VENV_DIR="venv"
- else
- VENV_DIR=".venv"
- fi
-
- echo -e "${GREEN}✅ 激活虚拟环境: $VENV_DIR${NC}"
- source "$VENV_DIR/bin/activate"
- fi
- # 检查依赖是否已安装
- if ! python3 -c "import fastapi" &> /dev/null; then
- echo -e "${YELLOW}⚠️ 警告: 未检测到 FastAPI,正在安装依赖...${NC}"
- pip install -r requirements.txt
- fi
- # 设置环境变量,指定使用 .env.lyrria
- export ENV_FILE=".env.lyrria"
- # 设置生产环境标志
- export DEBUG="false"
- # 检查服务是否已在运行
- PID_FILE="$SCRIPT_DIR/backend.pid"
- if [ -f "$PID_FILE" ]; then
- OLD_PID=$(cat "$PID_FILE")
- if ps -p "$OLD_PID" > /dev/null 2>&1; then
- echo -e "${YELLOW}⚠️ 服务已在运行 (PID: $OLD_PID)${NC}"
- echo -e "${YELLOW}如需重启,请先执行: ./stop_prod.sh${NC}"
- exit 1
- else
- # PID 文件存在但进程不存在,清理旧文件
- rm -f "$PID_FILE"
- fi
- fi
- # 启动服务(后台运行)
- echo -e "${GREEN}✅ 启动 FastAPI 服务(后台模式)...${NC}"
- echo -e "${YELLOW}环境文件: $ENV_FILE${NC}"
- echo -e "${YELLOW}工作目录: $SCRIPT_DIR${NC}"
- echo ""
- # 使用 uvicorn 启动(生产环境建议使用 gunicorn + uvicorn workers)
- # 如果已安装 gunicorn,可以使用以下命令:
- # nohup gunicorn main:app --worker-class uvicorn.workers.UvicornWorker --workers 4 --bind 0.0.0.0:8766 > backend_nohup.log 2>&1 &
- # 直接使用 uvicorn 启动(适合单进程或小规模部署)
- nohup python3 -m uvicorn main:app \
- --host 0.0.0.0 \
- --port 8766 \
- --workers 1 \
- --no-access-log \
- --log-level info \
- > backend_nohup.log 2>&1 &
- BACKEND_PID=$!
- echo $BACKEND_PID > "$PID_FILE"
- echo -e "${GREEN}✅ 服务已启动,PID: $BACKEND_PID${NC}"
- echo -e "${YELLOW}后台日志: backend_nohup.log${NC}"
- echo -e "${YELLOW}查看状态: ./status_prod.sh${NC}"
- echo -e "${YELLOW}停止服务: ./stop_prod.sh${NC}"
- echo ""
- echo -e "${GREEN}🚀 服务启动完成!${NC}"
|