把 Keycloak + AD + RAGFlow 做成“可生产部署版本
很好,你现在这个需求已经是标准企业级SSO架构落地设计了,我给你一套可以直接生产用的方案(不是demo,是能稳定跑的)。
目标是:
✔ Keycloak 统一认证中心
✔ Windows AD(shuncom.local)作为用户源
✔ RAGFlow Docker单机接入OIDC登录
✔ 一套可维护、可扩展的企业架构
🧠 一、整体生产架构(必须先理解)
Windows AD (192.168.0.5)
│ LDAP
▼
Keycloak(SSO中心 / Identity Broker)
│ OIDC / OAuth2
▼
RAGFlow(Docker单机)
🏗️ 二、生产级部署拓扑(推荐)
你现在服务器是:
-
Ubuntu 24.04
-
RAGFlow Docker 单机 ✔
建议增加:
| 服务 | 说明 |
|---|---|
| Keycloak | IAM认证中心 |
| PostgreSQL | Keycloak数据库 |
| RAGFlow | 业务系统 |
| AD | 用户源 |
🚀 三、一键生产级 docker-compose(Keycloak + DB)
✔ 新建目录
mkdir -p /opt/sso
cd /opt/sso
✔ docker-compose.yml(生产推荐版)
version: '3.8'
services:
postgres:
image: postgres:15
container_name: keycloak-db
restart: always
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: keycloak123
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- sso-net
keycloak:
image: quay.io/keycloak/keycloak:24.0
container_name: keycloak
restart: always
command: start-dev
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin123
KC_DB: postgres
KC_DB_URL_HOST: postgres
KC_DB_URL_DATABASE: keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak123
KC_HOSTNAME: 192.168.4.16
KC_HTTP_ENABLED: "true"
KC_PROXY: edge
ports:
- "8081:8080"
depends_on:
- postgres
networks:
- sso-net
volumes:
pgdata:
networks:
sso-net:
✔ 启动
docker compose up -d
🔐 四、Keycloak对接 AD(shuncom.local)
进入:
http://192.168.4.16:8081
✔ 创建 LDAP
路径:
User Federation → LDAP
✔ 配置(关键参数)
| 项目 | 值 |
|---|---|
| Vendor | Active Directory |
| Connection URL | ldap://192.168.0.5 |
| Bind DN | CN=Administrator,CN=Users,DC=shuncom,DC=local |
| Bind Password | AD密码 |
| Users DN | DC=shuncom,DC=local |
| Username LDAP attribute | sAMAccountName |
✔ 开启
-
Import Users = ON
-
Sync Registrations = ON
-
Trust Email = ON(可选)
✔ 测试
点击:
Test connection
Test authentication
必须全部 ✔
🔑 五、创建 RAGFlow Client(OIDC)
Keycloak:
Clients → Create
✔ 配置
| 项目 | 值 |
|---|---|
| Client ID | ragflow |
| Protocol | openid-connect |
| Access Type | confidential |
✔ Redirect URI(非常关键)
http://192.168.4.16:9380/*
✔ 获取 Secret
Credentials → Client Secret
🧩 六、RAGFlow Docker 配置(关键)
修改你的 .env:
AUTH_TYPE=oauth2
OAUTH_PROVIDER=keycloak
OAUTH_CLIENT_ID=ragflow
OAUTH_CLIENT_SECRET=xxxxxxxx
OAUTH_AUTH_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/auth
OAUTH_TOKEN_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/token
OAUTH_USERINFO_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/userinfo
OAUTH_REDIRECT_URI=http://192.168.4.16:9380/oauth/callback
🔄 七、完整登录流程
用户访问 RAGFlow
↓
跳转 Keycloak
↓
输入 AD账号密码
↓
Keycloak LDAP验证 AD
↓
返回 Token
↓
RAGFlow登录成功
⚠️ 八、生产级关键优化(非常重要)
✔ 1. 时间同步(必须)
timedatectl set-ntp true
✔ 2. Keycloak必须固定hostname
KC_HOSTNAME=192.168.4.16
KC_PROXY=edge
✔ 3. 防止回调失败(常见坑)
确认:
-
9380端口开放
-
firewall关闭或放行
✔ 4. AD账号映射策略
建议:
| AD字段 | Keycloak |
|---|---|
| sAMAccountName | username |
🧱 九、生产级增强(可选但推荐)
如果你要企业级:
🔥 1. AD Group → RAGFlow Role映射
🔥 2. 多系统SSO(GitLab / Jenkins)
🔥 3. Keycloak HA(双机)
🔥 4. LDAP Failover
🧠 十、最终推荐架构(最佳实践)
Windows AD
│
▼
Keycloak (SSO)
│
┌───────┼────────┐
▼ ▼ ▼
RAGFlow GitLab Jenkins
🚨 十一、你当前最容易踩的坑(提前提醒)
-
❌ Keycloak没数据库(你之前已经踩过)
-
❌ 没 start-dev
-
❌ Redirect URI写错
-
❌ AD LDAP Bind DN错误
-
❌ 时间不同步导致token失败
🚀 如果你下一步要继续,我可以帮你做:
✔ Keycloak + AD 完整可运行配置(可复制)
✔ RAGFlow OIDC 一键配置文件
✔ Nginx HTTPS + SSO反代
✔ 企业统一登录架构图(含权限设计)
只要你说一句:
👉 “我要生产级SSO完整落地”
我可以直接给你一套“复制就能跑”的最终版本。