Skip to main content

可落地的 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
email email
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导入文件)