This commit is contained in:
179
scripts/start.sh
179
scripts/start.sh
@@ -88,11 +88,22 @@ check_config() {
|
||||
check_warn "VLLM_LOCAL_KEY 未配置(如不使用本地模型可忽略)"
|
||||
fi
|
||||
|
||||
# 检查 DB_URI
|
||||
if grep -q "^DB_URI=" "$PROJECT_DIR/.env" 2>/dev/null; then
|
||||
check_pass "DB_URI 已配置"
|
||||
# 检查 DB_URI (远程服务器)
|
||||
if grep -q "^DB_URI=.*115.190.121.151" "$PROJECT_DIR/.env" 2>/dev/null; then
|
||||
check_pass "DB_URI 已配置(远程服务器)"
|
||||
elif grep -q "^DB_URI=" "$PROJECT_DIR/.env" 2>/dev/null; then
|
||||
check_warn "DB_URI 已配置(非远程服务器地址)"
|
||||
else
|
||||
check_warn "DB_URI 未配置(将使用默认值)"
|
||||
check_fail "DB_URI 未配置"
|
||||
fi
|
||||
|
||||
# 检查 QDRANT_URL (远程服务器)
|
||||
if grep -q "^QDRANT_URL=.*115.190.121.151" "$PROJECT_DIR/.env" 2>/dev/null; then
|
||||
check_pass "QDRANT_URL 已配置(远程服务器)"
|
||||
elif grep -q "^QDRANT_URL=" "$PROJECT_DIR/.env" 2>/dev/null; then
|
||||
check_warn "QDRANT_URL 已配置(非远程服务器地址)"
|
||||
else
|
||||
check_fail "QDRANT_URL 未配置"
|
||||
fi
|
||||
|
||||
# 3. 检查 Docker 环境
|
||||
@@ -130,6 +141,31 @@ check_config() {
|
||||
fi
|
||||
done
|
||||
|
||||
# 5. 检查远程服务连接
|
||||
echo ""
|
||||
echo "🌐 检查远程服务连接..."
|
||||
|
||||
# 测试 PostgreSQL 连接
|
||||
if command -v psql &> /dev/null; then
|
||||
# 注意:这里假设密码为 mysecretpassword,如果不同需调整或从 env 读取
|
||||
if PGPASSWORD=mysecretpassword psql -h 115.190.121.151 -U postgres -d langgraph_db -c "SELECT 1;" &> /dev/null; then
|
||||
check_pass "PostgreSQL 远程连接正常 (115.190.121.151:5432)"
|
||||
else
|
||||
check_fail "PostgreSQL 远程连接失败"
|
||||
echo " 提示: 检查网络连接和防火墙设置"
|
||||
fi
|
||||
else
|
||||
check_warn "psql 客户端未安装,跳过 PostgreSQL 连接测试"
|
||||
fi
|
||||
|
||||
# 测试 Qdrant 连接
|
||||
if curl -s http://115.190.121.151:6333/collections &> /dev/null; then
|
||||
check_pass "Qdrant 远程连接正常 (115.190.121.151:6333)"
|
||||
else
|
||||
check_fail "Qdrant 远程连接失败"
|
||||
echo " 提示: 检查网络连接和防火墙设置"
|
||||
fi
|
||||
|
||||
# 总结
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
@@ -150,90 +186,101 @@ check_config() {
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Docker 容器检查函数
|
||||
# Docker 容器检查函数(仅检查 llama.cpp 服务)
|
||||
# =============================================================================
|
||||
check_vllm() {
|
||||
echo -e "${BLUE}🔍 检查 vLLM 容器...${NC}"
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^gemma4-server$"; then
|
||||
echo -e "${YELLOW}⚠️ vLLM 容器未运行${NC}"
|
||||
check_llamacpp() {
|
||||
echo -e "${BLUE}🔍 检查 llama.cpp LLM 容器...${NC}"
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^gemma4-llamacpp-server$"; then
|
||||
echo -e "${YELLOW}⚠️ llama.cpp LLM 容器未运行${NC}"
|
||||
return 1
|
||||
else
|
||||
echo -e "${GREEN}✓ vLLM 容器正在运行 (gemma4-server)${NC}"
|
||||
echo -e "${GREEN}✓ llama.cpp LLM 容器正在运行 (gemma4-llamacpp-server)${NC}"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
check_postgres() {
|
||||
echo -e "${BLUE}🔍 检查 PostgreSQL 容器...${NC}"
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^postgres-langgraph$"; then
|
||||
echo -e "${YELLOW}⚠️ PostgreSQL 容器未运行${NC}"
|
||||
check_embedding() {
|
||||
echo -e "${BLUE}🔍 检查 llama.cpp Embedding 容器...${NC}"
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^embedding-server$"; then
|
||||
echo -e "${YELLOW}⚠️ llama.cpp Embedding 容器未运行${NC}"
|
||||
return 1
|
||||
else
|
||||
echo -e "${GREEN}✓ PostgreSQL 容器正在运行 (postgres-langgraph)${NC}"
|
||||
echo -e "${GREEN}✓ llama.cpp Embedding 容器正在运行 (embedding-server)${NC}"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# 启动 Docker 依赖服务
|
||||
# 启动 Docker 依赖服务(llama.cpp)
|
||||
# =============================================================================
|
||||
start_vllm() {
|
||||
echo -e "${BLUE}🚀 启动 vLLM 容器...${NC}"
|
||||
start_llamacpp() {
|
||||
echo -e "${BLUE}🚀 启动 llama.cpp LLM 容器...${NC}"
|
||||
|
||||
# 检查模型文件
|
||||
if [ ! -d "/home/huang/Study/AIModel/gemma-4-E2B-it" ]; then
|
||||
echo -e "${RED}✗ 错误:模型目录不存在: /home/huang/Study/AIModel/gemma-4-E2B-it${NC}"
|
||||
if [ ! -f "/home/huang/Study/AIModel/GGUF/Gemma-4-E2B-Uncensored-HauhauCS-Aggressive-Q6_K_P.gguf" ]; then
|
||||
echo -e "${RED}✗ 错误:LLM 模型文件不存在${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "/home/huang/Study/AIModel/GGUF/mmproj-Gemma-4-E2B-Uncensored-HauhauCS-Aggressive-f16.gguf" ]; then
|
||||
echo -e "${RED}✗ 错误:多模态投影文件不存在${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker run -d \
|
||||
--name gemma4-server \
|
||||
--name gemma4-llamacpp-server \
|
||||
--restart=unless-stopped \
|
||||
--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
|
||||
-v /home/huang/Study/AIModel/GGUF:/models \
|
||||
-p 8081:8080 \
|
||||
ghcr.io/ggml-org/llama.cpp:server-rocm \
|
||||
-m /models/Gemma-4-E2B-Uncensored-HauhauCS-Aggressive-Q6_K_P.gguf \
|
||||
--mmproj /models/mmproj-Gemma-4-E2B-Uncensored-HauhauCS-Aggressive-f16.gguf \
|
||||
--host 0.0.0.0 \
|
||||
--port 8080 \
|
||||
-ngl 99
|
||||
|
||||
echo -e "${GREEN}✓ vLLM 容器已启动${NC}"
|
||||
echo -e "${GREEN}✓ llama.cpp LLM 容器已启动 (端口 8081)${NC}"
|
||||
echo -e "${YELLOW}⏳ 等待模型加载(可能需要几分钟)...${NC}"
|
||||
sleep 10
|
||||
sleep 15
|
||||
}
|
||||
|
||||
start_postgres() {
|
||||
echo -e "${BLUE}🚀 启动 PostgreSQL 容器...${NC}"
|
||||
start_embedding() {
|
||||
echo -e "${BLUE}🚀 启动 llama.cpp Embedding 容器...${NC}"
|
||||
|
||||
# 检查模型文件
|
||||
if [ ! -f "/home/huang/Study/AIModel/GGUF/embeddinggemma-300M-Q8_0.gguf" ]; then
|
||||
echo -e "${RED}✗ 错误:Embedding 模型文件不存在${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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
|
||||
--name embedding-server \
|
||||
--restart=unless-stopped \
|
||||
--group-add=video \
|
||||
--device=/dev/kfd \
|
||||
--device=/dev/dri \
|
||||
-v /home/huang/Study/AIModel/GGUF:/models \
|
||||
-p 8082:8080 \
|
||||
ghcr.io/ggml-org/llama.cpp:server-rocm \
|
||||
-m /models/embeddinggemma-300M-Q8_0.gguf \
|
||||
--host 0.0.0.0 \
|
||||
--port 8080 \
|
||||
-ngl 99 \
|
||||
--embeddings \
|
||||
-c 512
|
||||
|
||||
echo -e "${GREEN}✓ PostgreSQL 容器已启动${NC}"
|
||||
sleep 3
|
||||
echo -e "${GREEN}✓ llama.cpp Embedding 容器已启动 (端口 8082)${NC}"
|
||||
sleep 5
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# 启动 Python 服务
|
||||
# =============================================================================
|
||||
start_backend() {
|
||||
echo -e "\n${BLUE}🚀 启动后端服务 (端口 8001)...${NC}"
|
||||
echo -e "\n${BLUE}🚀 启动后端服务 (端口 8003)...${NC}"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# 加载 .env 文件中的环境变量
|
||||
@@ -242,6 +289,7 @@ start_backend() {
|
||||
set +a
|
||||
|
||||
export PYTHONPATH="$PROJECT_DIR"
|
||||
export BACKEND_PORT=8003
|
||||
python app/backend.py &
|
||||
BACKEND_PID=$!
|
||||
echo -e "${GREEN}✓ 后端服务已启动 (PID: $BACKEND_PID)${NC}"
|
||||
@@ -263,7 +311,6 @@ start_frontend() {
|
||||
echo -e "${GREEN}✓ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
|
||||
echo -e "${GREEN}✓ 访问地址:${NC}"
|
||||
echo -e " 本地开发: http://localhost:8501"
|
||||
echo -e " Nginx代理: http://your-domain.com"
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
@@ -271,30 +318,28 @@ start_frontend() {
|
||||
# =============================================================================
|
||||
docker_up() {
|
||||
echo -e "${BLUE}🐳 使用 Docker Compose 启动所有服务...${NC}"
|
||||
cd "$PROJECT_DIR"
|
||||
cd "$PROJECT_DIR/docker"
|
||||
|
||||
# 检查 .env 文件
|
||||
if [ ! -f ".env" ]; then
|
||||
if [ ! -f "../.env" ]; then
|
||||
echo -e "${RED}✗ 错误:.env 文件不存在${NC}"
|
||||
echo " 请先复制配置文件:"
|
||||
echo " cp .env.docker .env # 服务器部署"
|
||||
echo " 或"
|
||||
echo " cp .env.local .env # 本地开发"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker compose -f docker/docker-compose.yml up -d --build
|
||||
docker compose up -d --build
|
||||
|
||||
echo -e "\n${GREEN}✓ Docker Compose 服务已启动${NC}"
|
||||
echo -e "${BLUE}📊 查看服务状态:${NC} docker compose -f docker/docker-compose.yml ps"
|
||||
echo -e "${BLUE}📝 查看日志:${NC} docker compose -f docker/docker-compose.yml logs -f"
|
||||
echo -e "${BLUE}📊 查看服务状态:${NC} docker compose ps"
|
||||
echo -e "${BLUE}📝 查看日志:${NC} docker compose logs -f"
|
||||
echo -e "${BLUE}🌐 访问应用:${NC} http://localhost:8501"
|
||||
}
|
||||
|
||||
docker_down() {
|
||||
echo -e "${BLUE}🛑 停止 Docker Compose 服务...${NC}"
|
||||
cd "$PROJECT_DIR"
|
||||
docker compose -f docker/docker-compose.yml down
|
||||
cd "$PROJECT_DIR/docker"
|
||||
docker compose down
|
||||
echo -e "${GREEN}✓ 服务已停止${NC}"
|
||||
}
|
||||
|
||||
@@ -312,8 +357,8 @@ cleanup() {
|
||||
echo -e "${GREEN}✓ 前端服务已停止${NC}"
|
||||
fi
|
||||
echo -e "${YELLOW}💡 提示:Docker 容器需要手动停止${NC}"
|
||||
echo -e " 停止 vLLM: docker stop gemma4-server"
|
||||
echo -e " 停止 PostgreSQL: docker stop postgres-langgraph"
|
||||
echo -e " 停止 llama.cpp LLM: docker stop gemma4-llamacpp-server"
|
||||
echo -e " 停止 llama.cpp Embedding: docker stop embedding-server"
|
||||
echo -e " 或使用: $0 docker-down"
|
||||
exit 0
|
||||
}
|
||||
@@ -331,8 +376,8 @@ case "${1:-help}" in
|
||||
|
||||
backend)
|
||||
check_config || exit 1
|
||||
check_vllm || start_vllm
|
||||
check_postgres || start_postgres
|
||||
check_llamacpp || start_llamacpp
|
||||
check_embedding || start_embedding
|
||||
start_backend
|
||||
echo -e "\n${GREEN}后端服务正在运行,按 Ctrl+C 停止${NC}"
|
||||
wait $BACKEND_PID
|
||||
@@ -347,8 +392,8 @@ case "${1:-help}" in
|
||||
|
||||
both)
|
||||
check_config || exit 1
|
||||
check_vllm || start_vllm
|
||||
check_postgres || start_postgres
|
||||
check_llamacpp || start_llamacpp
|
||||
check_embedding || start_embedding
|
||||
start_backend
|
||||
start_frontend
|
||||
echo -e "\n${GREEN}所有服务正在运行,按 Ctrl+C 停止 Python 服务${NC}"
|
||||
|
||||
Reference in New Issue
Block a user