3.0 KiB
3.0 KiB
RAG Server 数据库连接修复方案
问题诊断
当前错误
ERROR: cannot parse `admin_password`: failed to parse as keyword/value (invalid keyword/value)
WARN: postgres cache disabled; no database connection
根本原因
DATABASE_URL环境变量指向 Secret Manager 引用admin_password,而不是实际的数据库连接字符串- RAG 服务器无法连接到 PostgreSQL 数据库
- 导致
/api/rag/query返回 404
架构说明
Cloud Run (RAG Server)
↓
Stunnel (127.0.0.1:5432)
↓ TLS Tunnel
↓
postgresql.onwalk.net:443
↓
PostgreSQL Database
修复步骤
方案 1: 使用 Stunnel (推荐)
1. 更新 Cloud Run 环境变量
gcloud run services update rag-server-svc-plus \
--region asia-northeast1 \
--project xzerolab-480008 \
--set-env-vars="
DB_TLS_HOST=postgresql.onwalk.net,
DB_TLS_PORT=443,
POSTGRES_USER=postgres,
POSTGRES_PASSWORD=otdcRLTJamszk3AE,
POSTGRES_DB=knowledge_db,
NVIDIA_API_KEY=NVAPI_KEY_PLACEHOLDER"
说明:
DB_TLS_HOST和DB_TLS_PORT会触发 entrypoint.sh 启动 Stunnel- Stunnel 会在
127.0.0.1:5432监听 config/rag-server.yaml中的pgurl会自动使用127.0.0.1:5432
2. 验证配置
部署后检查日志:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=rag-server-svc-plus" \
--limit 20 --project xzerolab-480008
应该看到:
Starting Stunnel...
Stunnel is up!
方案 2: 直接数据库连接 (不推荐,需要公网 IP)
如果 PostgreSQL 有公网 IP,可以直接连接:
# 更新 Secret Manager
echo "postgres://postgres:otdcRLTJamszk3AE@<PUBLIC_IP>:5432/knowledge_db?sslmode=require" | \
gcloud secrets versions add DATABASE_URL --data-file=- --project xzerolab-480008
当前状态
工作的功能
- ✅
/api/askai- 直接 AI 回答(不依赖数据库) - ✅ CORS 配置
- ✅ NVIDIA API 集成
待修复的功能
- ❌
/api/rag/query- RAG 检索(需要数据库连接) - ❌ 向量搜索
- ❌ 知识库同步
前端行为
前端已经实现了优雅降级:
- 首先尝试
/api/rag/query(RAG 检索) - 如果失败,回退到
/api/askai(直接 AI) - 用户仍然可以获得答案,只是没有知识库上下文
建议
立即执行方案 1,因为:
- 安全性更好(TLS 加密)
- 不需要暴露数据库公网 IP
- 符合现有架构设计
- entrypoint.sh 已经支持 Stunnel
部署命令
# 完整部署命令
gcloud run services update rag-server-svc-plus \
--region asia-northeast1 \
--project xzerolab-480008 \
--update-env-vars="
DB_TLS_HOST=postgresql.onwalk.net,
DB_TLS_PORT=443,
POSTGRES_USER=postgres,
POSTGRES_PASSWORD=otdcRLTJamszk3AE,
POSTGRES_DB=knowledge_db,
NVIDIA_API_KEY=NVAPI_KEY_PLACEHOLDER" \
--clear-env-vars=DATABASE_URL
注意:
- 使用
--update-env-vars添加新变量 - 使用
--clear-env-vars移除错误的DATABASE_URL