portal/Runbook/RAG_DB_FIX.md
Haitao Pan 82c0cae4e2 feat: update homepage tagline and tech stack
- Update tagline to emphasize cloud-native, vendor-neutral architecture
  - 🇨🇳 Chinese: 云原生 · 去平台绑定 · 可自由迁移
  - 🇺🇸 English: Cloud-native · Vendor-neutral · Freely portable
- Replace tech stack logos: Next.js, Go, Vercel, Cloud Run, PostgreSQL
- Remove outdated stack references (Vue, Svelte, Node, Django, Laravel)
2026-01-26 15:49:56 +08:00

124 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RAG Server 数据库连接修复方案
## 问题诊断
### 当前错误
```
ERROR: cannot parse `admin_password`: failed to parse as keyword/value (invalid keyword/value)
WARN: postgres cache disabled; no database connection
```
### 根本原因
1. `DATABASE_URL` 环境变量指向 Secret Manager 引用 `admin_password`,而不是实际的数据库连接字符串
2. RAG 服务器无法连接到 PostgreSQL 数据库
3. 导致 `/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 环境变量
```bash
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. 验证配置
部署后检查日志:
```bash
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可以直接连接
```bash
# 更新 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 检索(需要数据库连接)
- ❌ 向量搜索
- ❌ 知识库同步
## 前端行为
前端已经实现了优雅降级:
1. 首先尝试 `/api/rag/query` (RAG 检索)
2. 如果失败,回退到 `/api/askai` (直接 AI)
3. 用户仍然可以获得答案,只是没有知识库上下文
## 建议
**立即执行方案 1**,因为:
1. 安全性更好TLS 加密)
2. 不需要暴露数据库公网 IP
3. 符合现有架构设计
4. entrypoint.sh 已经支持 Stunnel
## 部署命令
```bash
# 完整部署命令
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`