Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 1m17s
docs(quickstart): 更新快速开始文档以支持Nginx反向代理配置 - 修改环境变量配置方式,从直接创建.env文件改为复制模板文件 - 添加必需和可选配置项的详细说明 - 更新Docker Compose启动命令以使用正确的路径 - 增加Nginx反向代理访问方式的说明 - 为本地开发模式添加额外的数据库配置说明 fix(readme): 修正部署说明中的环境变量配置方法 - 将硬编码的环境变量配置改为使用模板文件复制方式 - 更新Docker Compose启动命令路径 - 补充Nginx反向代理访问说明 - 修正数据库配置注意事项 feat(backend): 支持从环境变量读取数据库连接配置 - 添加os模块导入 - 修改DB_URI配置逻辑,优先从环境变量读取 - 适配Docker和本地开发环境的不同数据库连接地址 refactor(docker): 优化Docker Compose配置支持Nginx代理 - 限制后端端口仅本机访问 - 修改前端API URL为相对路径,通过Nginx代理访问 - 限制前端端口仅本机访问 refactor(frontend): 适配Nginx反向代理后端API调用 - 将硬编码的后端API地址改为相对路径 - 支持通过Nginx代理转发请求到后端服务 chore(scripts): 更新启动脚本中的访问地址提示信息 - 修改前端启动成功后的访问地址提示 - 添加Nginx代理访问方式的说明 ```
150 lines
4.7 KiB
Bash
Executable File
150 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# AI Agent 启动脚本
|
||
# 用法: ./start.sh [backend|frontend|both]
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
GREEN='\033[0;32m'
|
||
BLUE='\033[0;34m'
|
||
RED='\033[0;31m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
echo -e "${BLUE}========================================${NC}"
|
||
echo -e "${BLUE} AI Agent - 个人生活助手启动脚本${NC}"
|
||
echo -e "${BLUE}========================================${NC}"
|
||
echo ""
|
||
|
||
# 检查 vLLM 容器是否运行
|
||
check_vllm() {
|
||
if ! docker ps --format '{{.Names}}' | grep -q "^gemma4-server$"; then
|
||
echo -e "${YELLOW}⚠️ vLLM 容器未运行!${NC}"
|
||
echo "正在启动 vLLM 容器(Gemma-4 模型)..."
|
||
|
||
# 检查模型文件是否存在
|
||
if [ ! -d "/home/huang/Study/AIModel/gemma-4-E2B-it" ]; then
|
||
echo -e "${RED}✗ 错误:模型目录不存在: /home/huang/Study/AIModel/gemma-4-E2B-it${NC}"
|
||
echo "请先下载模型或修改模型路径"
|
||
exit 1
|
||
fi
|
||
|
||
docker run -d \
|
||
--name gemma4-server \
|
||
--group-add=video \
|
||
--cap-add=SYS_PTRACE \
|
||
--security-opt seccomp=unconfined \
|
||
--device=/dev/kfd \
|
||
--device=/dev/dri \
|
||
-v /home/huang/Study/AIModel/gemma-4-E2B-it:/models/gemma-4-E2B-it \
|
||
-e VLLM_ROCM_USE_AITER=0 \
|
||
-e HF_TOKEN="${HF_TOKEN}" \
|
||
-p 8000:8000 \
|
||
--ipc=host \
|
||
--entrypoint vllm \
|
||
my-vllm-gemma4:working \
|
||
serve /models/gemma-4-E2B-it \
|
||
--served-model-name gemma-4-E2B-it \
|
||
--dtype auto \
|
||
--api-key token-abc123 \
|
||
--trust-remote-code \
|
||
--port 8000 \
|
||
--gpu-memory-utilization 0.85 \
|
||
--max-model-len 8192
|
||
|
||
echo -e "${GREEN}✓ vLLM 容器已启动${NC}"
|
||
echo -e "${YELLOW}⏳ 等待模型加载(可能需要几分钟)...${NC}"
|
||
sleep 10
|
||
else
|
||
echo -e "${GREEN}✓ vLLM 容器正在运行${NC}"
|
||
fi
|
||
}
|
||
|
||
# 检查 PostgreSQL 容器是否运行
|
||
check_postgres() {
|
||
if ! docker ps | grep -q postgres-langgraph; then
|
||
echo -e "${YELLOW}⚠️ PostgreSQL 容器未运行!${NC}"
|
||
echo "正在启动 PostgreSQL 容器..."
|
||
docker run -d \
|
||
--name postgres-langgraph \
|
||
-e POSTGRES_PASSWORD=mysecretpassword \
|
||
-e POSTGRES_DB=langgraph_db \
|
||
-p 5432:5432 \
|
||
-v ~/docker_volumes/postgres_data:/var/lib/postgresql/data \
|
||
postgres:16
|
||
|
||
echo -e "${GREEN}✓ PostgreSQL 容器已启动${NC}"
|
||
sleep 3
|
||
else
|
||
echo -e "${GREEN}✓ PostgreSQL 容器正在运行${NC}"
|
||
fi
|
||
}
|
||
|
||
# 启动后端
|
||
start_backend() {
|
||
echo -e "\n${BLUE}🚀 启动后端服务 (端口 8001)...${NC}"
|
||
cd /home/huang/Study/AIProject/Agent1
|
||
export PYTHONPATH=$(pwd)
|
||
python app/backend.py &
|
||
BACKEND_PID=$!
|
||
echo -e "${GREEN}✓ 后端服务已启动 (PID: $BACKEND_PID)${NC}"
|
||
sleep 2
|
||
}
|
||
|
||
# 启动前端
|
||
start_frontend() {
|
||
echo -e "\n${BLUE}🎨 启动前端界面...${NC}"
|
||
cd /home/huang/Study/AIProject/Agent1
|
||
export PYTHONPATH=$(pwd)
|
||
streamlit run frontend/frontend.py &
|
||
FRONTEND_PID=$!
|
||
echo -e "${GREEN}✓ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
|
||
echo -e "${GREEN}✓ 请在浏览器中打开: http://localhost:8501(本地开发)或 http://your-domain.com(Nginx 代理)${NC}"
|
||
}
|
||
|
||
# 清理函数
|
||
cleanup() {
|
||
echo -e "\n${RED}🛑 正在停止所有服务...${NC}"
|
||
if [ ! -z "$BACKEND_PID" ]; then
|
||
kill $BACKEND_PID 2>/dev/null || true
|
||
echo -e "${GREEN}✓ 后端服务已停止${NC}"
|
||
fi
|
||
if [ ! -z "$FRONTEND_PID" ]; then
|
||
kill $FRONTEND_PID 2>/dev/null || true
|
||
echo -e "${GREEN}✓ 前端服务已停止${NC}"
|
||
fi
|
||
echo -e "${YELLOW}💡 提示:Docker 容器需要手动停止${NC}"
|
||
echo -e " 停止 vLLM: docker stop gemma4-server"
|
||
echo -e " 停止 PostgreSQL: docker stop postgres-langgraph"
|
||
exit 0
|
||
}
|
||
|
||
# 捕获 Ctrl+C
|
||
trap cleanup SIGINT SIGTERM
|
||
|
||
# 主逻辑
|
||
case "${1:-both}" in
|
||
backend)
|
||
check_vllm
|
||
check_postgres
|
||
start_backend
|
||
echo -e "\n${GREEN}后端服务正在运行,按 Ctrl+C 停止${NC}"
|
||
wait $BACKEND_PID
|
||
;;
|
||
frontend)
|
||
start_frontend
|
||
echo -e "\n${GREEN}前端服务正在运行,按 Ctrl+C 停止${NC}"
|
||
wait $FRONTEND_PID
|
||
;;
|
||
both|*)
|
||
check_vllm
|
||
check_postgres
|
||
start_backend
|
||
start_frontend
|
||
echo -e "\n${GREEN}所有服务正在运行,按 Ctrl+C 停止 Python 服务${NC}"
|
||
echo -e "${YELLOW}注意:Docker 容器会在后台继续运行${NC}"
|
||
wait
|
||
;;
|
||
esac
|