Docker部署Keycloak:企业级身份认证平台搭建
为什么选择 Keycloak?
| 特性 | Keycloak |
|---|---|
| 开箱即用 | OAuth2/OIDC/SAML 全支持 |
| 单点登录 | 原生支持 SSO |
| 社交登录 | 微信/GitHub/Google 等开箱即用 |
| 用户管理 | 完整的管理控制台 |
| 企业认可度 | Red Hat 出品,大量企业使用 |
本文聚焦 Docker 环境下的 Keycloak 部署与日常运维。
一、快速部署
1. 准备数据库
Keycloak支持多种数据库,下面以MySQL数据库举例
1 | -- 1. 创建数据库(指定字符集为 utf8mb4,以支持 Emoji 等特殊字符) |
2. Docker Compose 配置
1 | services: |
3. 启动服务
1 | docker compose up -d |
首次启动后访问 http://服务器IP:8090 即可看到 Keycloak 欢迎页面。
二、服务端配置
1. 反向代理配置
生产环境建议使用 Nginx/Caddy 作为反向代理,启用 HTTPS:
Nginx 配置示例:
1 | server { |
2. 数据库选择
| 数据库 | 适用场景 | 备注 |
|---|---|---|
| PostgreSQL | 生产环境首选 | 性能稳定,官方推荐 |
| MySQL | 已有 MySQL 环境 | 需要额外配置 |
| H2 | 开发测试 | 不推荐生产使用 |
三、常见问题
Q1: 访问管理控制台提示 “HTTPS required”
原因: 生产模式强制要求 HTTPS
解决:
配置反向代理启用 HTTPS或添加环境变量:
1 | KC_HTTP_ENABLED: "true" |
Q2: 登录后跳转失败
原因: 客户端回调地址配置错误
解决:
- 检查 Client 的 Valid redirect URIs
- 确保 Root URL 配置正确
- 检查 Web origins 是否包含应用域名
Q3: 忘记管理员密码
解决: 重置管理员密码
1 | docker exec -it keycloak /opt/keycloak/bin/kc.sh bootstrap-admin-user |
Q4: 社交登录配置失败
原因: 回调地址未在第三方平台配置
解决:
在微信/GitHub 等平台的回调地址中添加:
1 | https://sso.yourdomain.com/realms/{realm}/broker/{provider}/endpoint |
四、安全建议
| 建议 | 说明 |
|---|---|
| 启用 HTTPS | 生产环境必须启用,可使用 Let’s Encrypt 免费证书 |
| 强密码策略 | 在 Realm Settings 中配置密码复杂度要求 |
| 定期更新镜像 | docker pull quay.io/keycloak/keycloak:latest |
| 保护管理员账号 | 使用强密码,启用双因素认证 |
| 限制管理端口 | 仅内网访问管理控制台,或配置 IP 白名单 |
| 定期审计日志 | 检查异常登录尝试 |
| 备份加密 | 备份文件包含敏感数据,传输和存储时加密 |
Keycloak 功能强大,配置相对复杂,但掌握这些基础运维技能,足以应对大多数企业认证场景。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 暮色之狐!







