Docker 启动 Keycloak

启动

创建空数据库用来初始化,或者已经运行过就导入已有的数据库。

比如在 127.0.0.1 上的 MySQL 创建名为 keycloak 的数据库

CREATE DATABASE keycloak
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

拉取镜像

docker pull keycloak/keycloak:26.2.5

如果是第一次启动,需要设置临时管理员的账号密码,也不用导入 SQL,初始化时会自动创建相关数据表。

docker run -d \
  --name keycloak \
  --restart=unless-stopped \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=bootstrap_admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD="临时管理员密码" \
  -e KC_DB=mysql \
  -e KC_DB_URL="jdbc:mysql://127.0.0.1:3306/keycloak" \
  -e KC_DB_USERNAME=root \
  -e KC_DB_PASSWORD='数据库密码' \
  -e TZ='Asia/Shanghai' \
  -p 36000:8080 \
  keycloak/keycloak:26.2.5 start-dev

以下是命令解析的简要说明:

  1. 运行容器
    • -d:后台运行容器。
    • --name keycloak:容器命名为 keycloak
    • --restart=unless-stopped:异常退出自动重启,手动停止后不重启。
  2. 环境变量
    • 环境变量 KC_BOOTSTRAP_ADMIN_USERNAMEKC_BOOTSTRAP_ADMIN_PASSWORD 用于设置临时管理员账号密码
    • KC_DB / KC_DB_URL / KC_DB_USERNAME / KC_DB_PASSWORD:配置 MySQL 数据库连接信息。
    • TZ='Asia/Shanghai':设置时区为上海。
  3. 端口映射
    • -p 36000:8080:将宿主机的 36000 端口映射到容器的 8080 端口。
  4. 镜像与启动
    • keycloak/keycloak:26.2.5:使用 Keycloak 版本 26.2.5 镜像。
    • start-dev:以开发模式启动 Keycloak。

如果 MySQL 和 Keyclaok 在同一个服务器上,需要加入到同一个网络

docker network create my_network
docker network connect my_network mysql

docker run -d \
  --name keycloak \
  --restart=unless-stopped \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=bootstrap_admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD='临时管理员密码' \
  -e KC_DB=mysql \
  -e KC_DB_URL="jdbc:mysql://mysql:3306/keycloak" \
  -e KC_DB_USERNAME=root \
  -e KC_DB_PASSWORD='数据库密码' \
  -e TZ='Asia/Shanghai' \
  --network my_network \
  -p 36000:8080 \
  keycloak/keycloak:26.2.5 start-dev

其中 mysql 是 MySQL 的容器名字

访问

http://127.0.0.1:36000/

临时管理员的账号和密码

如果是 公网 IP 部署,会提示需要 SSL。

修改数据库中的表 REALMNAME 等于 master 的记录,字段 SSL_REQUIRED 的值修改为 NONE

update `REALM` set `SSL_REQUIRED`='NONE' where NAME = 'master';

配置

设置简体中文

  1. 点击菜单中的 Realm Settings(领域设置)。
  2. 点击 Localization(本地化)选项卡。
  3. 启用 Internationalization(国际化)。
  4. 选择你要支持的语言:简体中文,然后刷新一下。
  5. 如果新建了领域,同样需要设置。

新建管理员

master领域 -> 用户管理 -> 添加用户 -> 填写信息 -> 凭证 -> 配置密码 -> 角色映射 -> 分配角色 -> 按领域角色筛选 -> 选中 admin

添加领域

领域名称:英文名称,比如:dev

领域设置

显示名称:中文名称,比如:XXX领域

本地化:设置中文

可以去掉勾选“使用邮箱登录”的选项

添加客户端

客户端 ID:应设置为一个与其他客户端不同的、具有意义的英文标识符,例如:xxx_client_id

客户端类型:默认的 OpenID Connect

名称:为客户端设置一个易于理解的中文描述,以便管理和识别。

客户端认证 :开启

授权:开启

有效的重定向 URI:指定前端应用的访问地址,需包含通配符。

例如:http://127.0.0.1:9000/*,表示允许以该地址为前缀的所有路径作为重定向 URI。

可以添加多个 URL,开发环境的、测试环境的等。

客户端创建完后可以进一步设置

客户端密码:复制出来给后端配置使用

后端配置信息示例

--- #################### keycloak ####################
keycloak:
  client-id: xxx_client_id  # Keycloak 中 Client 的 ID
  client-secret: 'pSgNHGEIZBUzyQiur6Z8UbpvVkJrGJ9x'  # Keycloak 中生成的 Client 客户端密码
  authorization-grant-type: authorization_code
  scope: openid,profile
  redirect-uri: "http://127.0.0.1:9000"
  issuer-uri: "http://127.0.0.1:36000/realms/dev"  # Keycloak 中的 Realm 地址

添加用户

用户名:英文字符,比如:zhangsan

邮箱:比如 zhangsan@123.com

:比如:三

:比如:张

创建后设置密码

去掉临时,表示不是临时密码。

posted @ 2025-06-15 13:58  ioufev  阅读(201)  评论(0)    收藏  举报