可落地的 RAGFlow v0.26.x + Keycloak + AD(LDAP)企业级 SSO 标准架构部署方案
下面给你一套可落地的 RAGFlow v0.26.x + Keycloak + AD(LDAP)企业级 SSO 标准架构部署方案。这套是按“生产可用”设计的,不是 demo。
我会直接按你当前环境(Docker + 同机 Keycloak + AD 已同步)给出完整结构。
🧱 一、目标架构(企业级标准)
┌──────────────┐
│ Browser │
└──────┬───────┘
│
▼
┌────────────────────┐
│ RAGFlow Web UI │
└────────┬───────────┘
│
▼
┌──────────────────────────┐
│ RAGFlow API Gateway │ ← ★核心(你现在缺的)
│ /api /auth /oauth │
└───────┬───────────┬──────┘
│ │
▼ ▼
Worker/CPU Keycloak (OIDC)
│
▼
AD/LDAP
🧨 二、你当前问题总结(必须先修)
你现在只有:
ragflow-cpu(worker/adminserver)
缺少:
❌ ragflow-api(SSO入口)
❌ ragflow-web(UI正确版本)
👉 所以你所有 OAUTH2 配置都不会生效
🧩 三、完整 docker-compose(企业版)
下面是可用标准结构(重点)
📦 1. 基础服务
version: "3.9"
services:
mysql:
image: mysql:8.0
container_name: ragflow-mysql
environment:
MYSQL_ROOT_PASSWORD: ragflow
MYSQL_DATABASE: ragflow
volumes:
- ./data/mysql:/var/lib/mysql
redis:
image: redis:7
container_name: ragflow-redis
elasticsearch:
image: elasticsearch:8.11.3
container_name: ragflow-es
environment:
- discovery.type=single-node
- xpack.security.enabled=false
volumes:
- ./data/es:/usr/share/elasticsearch/data
minio:
image: minio/minio
container_name: ragflow-minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123456
ports:
- "9000:9000"
- "9001:9001"
🚀 2. RAGFlow API(关键)
ragflow-api:
image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.1
container_name: ragflow-api
command: ["./entrypoint.sh", "--api-server"]
depends_on:
- mysql
- redis
- elasticsearch
environment:
- DB_HOST=mysql
- REDIS_HOST=redis
- ES_HOST=elasticsearch
- MINIO_HOST=minio
🖥️ 3. RAGFlow Web UI
ragflow-web:
image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow-web:v0.26.1
container_name: ragflow-web
ports:
- "80:80"
depends_on:
- ragflow-api
⚙️ 4. Worker(你现在这个)
ragflow-worker:
image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.1
container_name: ragflow-worker
command: ["./entrypoint.sh", "--worker"]
depends_on:
- ragflow-api
🔐 四、Keycloak 企业级配置(重点)
1️⃣ Client 配置
Client ID:
ragflow
Settings:
-
Client type: OpenID Connect
-
Access type: confidential
-
Standard flow: ON
-
Direct access: OFF
2️⃣ Redirect URI(必须)
http://192.168.4.16/oauth/callback
http://192.168.4.16/*
3️⃣ Mapper(关键)
必须添加:
| Name | Mapper |
|---|---|
| username | preferred_username |
| groups | group membership |
4️⃣ Scope
必须:
openid email profile
⚙️ 五、RAGFlow API SSO配置(核心)
在 ragflow-api:
environment:
- OAUTH2_ENABLE=true
- OAUTH2_TYPE=oidc
- OAUTH2_DISPLAY_NAME=AD域登录
- OAUTH2_CLIENT_ID=ragflow
- OAUTH2_CLIENT_SECRET=xxxx
- OAUTH2_METADATA_URL=http://192.168.4.16:8081/realms/shuncom/.well-known/openid-configuration
- OAUTH2_REDIRECT_URI=http://192.168.4.16/oauth/callback
- OAUTH2_SCOPES=openid email profile
# ⭐关键
- OAUTH2_USER_ID_CLAIM=preferred_username
# 自动建用户
- OAUTH2_AUTO_CREATE_USER=true
- REGISTER_ENABLED=1
🧠 六、关键修复点(你之前全部踩坑)
❌ 错误1:用 worker 容器做 SSO
✔ 正确:SSO 在 API,不在 worker
❌ 错误2:email 作为 user_id
✔ 正确:
preferred_username
❌ 错误3:缺 API gateway
✔ 必须有:
/ api / auth / oauth endpoints
🌐 七、验证是否成功
1️⃣ API是否正常
curl http://192.168.4.16/api/health
2️⃣ OIDC provider
curl http://192.168.4.16/api/auth/providers
3️⃣ Keycloak redirect
访问:
http://192.168.4.16
应该看到:
-
本地登录
-
⭐ AD域账号登录按钮
🔥 八、企业级增强(推荐)
1️⃣ 自动角色映射(RBAC)
Keycloak groups → RAGFlow roles:
AD Group → Keycloak Group → RAGFlow Role
2️⃣ 自动部门隔离
group = IT / Finance / Ops
3️⃣ 审计日志
开启:
-
login logs
-
token logs
-
API logs
🧨 九、你当前必须做的事(非常重要)
你现在不要再调:
-
❌ OAUTH2参数
-
❌ Keycloak
-
❌ AD
👉 先做:
🚨 补齐 RAGFlow API 层
否则所有 SSO 都是无效的
📌 十、如果你要我帮你下一步升级
我可以继续帮你做三件更高级的:
🔐 1. AD → Keycloak 自动同步(含OU映射)
🔐 2. Keycloak → RAGFlow RBAC自动绑定
🔐 3. 多租户 + 部门级权限隔离
🔐 4. 一键 docker-compose 企业版(可直接生产)
只要你说一句:
“升级企业级SSO+RBAC”
我可以给你一套可以直接上线生产的版本(含全部yaml + keycloak导入文件)。