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
以下是命令解析的简要说明:
- 运行容器
-d
:后台运行容器。--name keycloak
:容器命名为keycloak
。--restart=unless-stopped
:异常退出自动重启,手动停止后不重启。
- 环境变量
- 环境变量
KC_BOOTSTRAP_ADMIN_USERNAME
、KC_BOOTSTRAP_ADMIN_PASSWORD
用于设置临时管理员账号密码 KC_DB
/KC_DB_URL
/KC_DB_USERNAME
/KC_DB_PASSWORD
:配置 MySQL 数据库连接信息。TZ='Asia/Shanghai'
:设置时区为上海。
- 环境变量
- 端口映射
-p 36000:8080
:将宿主机的36000
端口映射到容器的8080
端口。
- 镜像与启动
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 的容器名字
访问
临时管理员的账号和密码
如果是 公网 IP 部署,会提示需要 SSL。
修改数据库中的表 REALM
的 NAME
等于 master
的记录,字段 SSL_REQUIRED
的值修改为 NONE
。
update `REALM` set `SSL_REQUIRED`='NONE' where NAME = 'master';
配置
设置简体中文
- 点击菜单中的 Realm Settings(领域设置)。
- 点击 Localization(本地化)选项卡。
- 启用 Internationalization(国际化)。
- 选择你要支持的语言:简体中文,然后刷新一下。
- 如果新建了领域,同样需要设置。
新建管理员
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
名:比如:三
姓:比如:张
创建后设置密码
去掉临时,表示不是临时密码。