keycloak-config-cli是一个Keycloak实用工具,用于基于JSON/YAML文件确保领域的期望配置状态。JSON/YAML文件格式基于导出的领域格式,可像管理代码一样在Git中存储和处理配置文件,无需重启Keycloak即可应用配置。
配置文件基于Keycloak导出文件格式,可用于重新导入设置。建议保持文件精简,移除所有UUID和Keycloak默认设置的内容。
moped.json是一个完整的示例配置文件,其他示例位于测试资源目录中。
keycloak-config-cli支持配置文件的变量替换功能,可通过import.var-substitution.enabled=true启用(默认禁用)。
Spring Boot公开的变量(通过配置树或外部配置)可通过$(property.name)访问。
此外,字符串替换支持多种前缀用于不同场景:
Base64解码器: $(base64Decoder:SGVsbG9Xb3JsZCE=) Base64编码器: $(base64Encoder:HelloWorld!) Java常量: $(const:java.awt.event.KeyEvent.VK_ESCAPE) 日期: $(date:yyyy-MM-dd) DNS: $(dns:address|apache.org) 环境变量: $(env:USERNAME) 文件内容: $(file:UTF-8:src/test/resources/document.properties) Java信息: $(java:version) 本地主机: $(localhost:canonical-name) 属性文件: $(properties:src/test/resources/document.properties::mykey) 资源包: $(resourceBundle:org.example.testResourceBundleLookup:mykey) 脚本: $(script:javascript:3 + 4) 系统属性: $(sys:user.dir) URL解码器: $(urlDecoder:Hello%20World%21) URL编码器: $(urlEncoder:Hello World!) URL内容(HTTP): $(url:UTF-8:[***] URL内容(HTTPS): $(url:UTF-8:[***] URL内容(文件): $(url:UTF-8:file:///$(sys:user.dir)/src/test/resources/document.properties) XML XPath: $(xml:src/test/resources/document.xml:/root/path/to/node)
用于替换Java系统属性或环境变量的值。如果import.var-substitution.enabled设为true,默认启用递归变量替换,如$(file:UTF-8:$(env:KEYCLOAK_PASSWORD_FILE))。
变量替换在JSON解析器执行前运行,支持JSON结构或复杂值。
有关更多信息和高级用法,请参见Apache Common StringSubstitutor文档。
注意:变量替换是keycloak-config-cli的一部分,在本地完成。这意味着环境变量需要在执行keycloak-config-cli的环境中可用。
如果设置了import.var-substitution.prefix=${和import.var-substitution.suffix=}(keycloak-config-cli 3.x中的默认值),则Keycloak内置变量(如${role_uma_authorization})需要使用$${role_uma_authorization}进行转义。
keycloak-config-cli支持JSON格式日志。要启用,请设置SPRING_PROFILES_ACTIVE=json-log。
| CLI选项 | 环境变量 | 描述 | 默认值 |
|---|---|---|---|
| --logging.level.root | LOGGING_LEVEL_ROOT | 定义根日志级别 | info |
| --logging.level.keycloak-config-cli | LOGGING_LEVEL_KEYCLOAKCONFIGCLI | keycloak-config-cli组件的日志级别 | 继承logging.level.root的值 |
| --logging.level.http | LOGGING_LEVEL_HTTP | keycloak-config-cli与Keycloak之间的HTTP请求日志级别 | 继承logging.level.root的值 |
| --logging.level.realm-config | LOGGING_LEVEL_REALMCONFIG | 如果设为trace,将记录包含敏感信息的领域配置 | 继承logging.level.root的值 |
参见:docs/FEATURES.md
从keycloak-config-cli 4.0开始,将支持Keycloak的最新4个版本(如可能)。存在一些例外情况:
Docker镜像可在DockerHub(docker.io/adorsys/keycloak-config-cli)和quay.io(quay.io/adorsys/keycloak-config-cli)获取。
| 标签 | 描述 |
|---|---|
latest | keycloak-config-cli的最新可用版本,基于最新支持的Keycloak版本构建 |
latest-x.y.z | keycloak-config-cli的最新可用版本,基于Keycloak版本x.y.z构建 |
edge | main分支的最新提交,基于最新支持的Keycloak版本构建 |
a.b.c | keycloak-config-cli版本a.b.c,基于最新支持的Keycloak版本构建 |
a.b.c-x.y.z | keycloak-config-cli版本a.b.c,基于Keycloak版本x.y.z构建 |
maven | 包含源代码,可在运行时编译keycloak-config-cli |
此外,maven标签包含源代码,可在运行时编译keycloak-config-cli。这有助于使用非***支持的Keycloak版本运行keycloak-config-cli,例如:
bashdocker run --rm -ti -v $PWD:/config/ -eKEYCLOAK_VERSION=23.0.1 -eMAVEN_CLI_OPTS="-B -ntp -q" adorsys/keycloak-config-cli:edge-build
对于Docker环境变量,需要将点替换为下划线。
shelldocker run \ -e KEYCLOAK_URL="http://<your keycloak host>:8080/" \ -e KEYCLOAK_USER="<keycloak admin username>" \ -e KEYCLOAK_PASSWORD="<keycloak admin password>" \ -e KEYCLOAK_AVAILABILITYCHECK_ENABLED=true \ -e KEYCLOAK_AVAILABILITYCHECK_TIMEOUT=120s \ -e IMPORT_FILES_LOCATIONS='/config/*' \ -v <your config path>:/config \ adorsys/keycloak-config-cli:latest
您可以通过以下命令构建自己的Docker镜像:
shelldocker build -t keycloak-config-cli .
| CLI选项 | 环境变量 | 描述 | 默认值 | 文档 |
|---|---|---|---|---|
| --keycloak.url | KEYCLOAK_URL | Keycloak URL,包括Web上下文。格式:scheme://hostname:port/web-context | - | |
| --keycloak.user | KEYCLOAK_USER | 登录用户名 | admin | |
| --keycloak.password | KEYCLOAK_PASSWORD | 登录用户密码 | - | |
| --keycloak.client-id | KEYCLOAK_CLIENTID | 登录客户端ID | admin-cli | |
| --keycloak.client-secret | KEYCLOAK_CLIENTSECRET | 登录客户端密钥 | - | |
| --keycloak.grant-type | KEYCLOAK_GRANTTYPE | 登录授权类型 | password | |
| --keycloak.login-realm | KEYCLOAK_LOGINREALM | 登录领域 | master | |
| --keycloak.ssl-verify | KEYCLOAK_SSLVERIFY | 验证到Keycloak的SSL连接 | true | |
| --keycloak.http-proxy | KEYCLOAK_HTTPPROXY | 通过HTTP代理连接到Keycloak。格式:scheme://hostname:port | - | |
| --keycloak.connect-timeout | KEYCLOAK_CONNECTTIMEOUT | 连接超时 | 10s | |
| --keycloak.read-timeout | KEYCLOAK_READTIMEOUT | 读取超时 | 10s | 配置为Java Duration |
| --keycloak.availability-check.enabled | KEYCLOAK_AVAILABILITYCHECK_ENABLED | 等待Keycloak可用 | false | |
| --keycloak.availability-check.timeout | KEYCLOAK_AVAILABILITYCHECK_TIMEOUT | Keycloak可用性检查的等待超时 | 120s |
| CLI选项 | 环境变量 | 描述 | 默认值 | 文档 |
|---|---|---|---|---|
| --import.validate | IMPORT_VALIDATE | 验证配置设置 | false | |
| --import.parallel | IMPORT_PARALLEL | 启用某些资源的并行导入 | false | |
| --import.files.locations | IMPORT_FILES_LOCATIONS | 配置文件位置(URL、文件路径或Ant风格模式) | - | IMPORT.md |
| --import.files.include-hidden-files | IMPORT_FILES_INCLUDE_HIDDEN_FILES | 包含标记为隐藏的文件 | false | |
| --import.files.excludes | IMPORT_FILES_EXCLUDES | 使用Ant风格模式排除文件 | - | |
| --import.cache.enabled | IMPORT_CACHE_ENABLED | 启用导入文件位置的缓存 | true | |
| --import.cache.key | IMPORT_CACHE_KEY | 导入配置的缓存键 | default | |
| --import.remote-state.enabled | IMPORT_REMOTESTATE_ENABLED | 启用远程状态管理。仅清除由keycloak-config-cli管理的资源 | true | MANAGED.md |
| --import.remote-state.encryption-key | IMPORT_REMOTESTATE_ENCRYPTIONKEY | 启用加密格式的远程状态。如果未设置,状态将以明文存储 | - | |
| --import.var-substitution.enabled | IMPORT_VARSUBSTITUTION_ENABLED | 启用配置文件的变量替换 | false | |
| --import.var-substitution.nested | IMPORT_VARSUBSTITUTION_NESTED | 展开变量中的变量 | true | |
| --import.var-substitution.undefined-is-error | IMPORT_VARSUBSTITUTION_UNDEFINEDISTERROR | 如果变量未定义,则引发异常 | true | |
| --import.var-substitution.prefix | IMPORT_VARSUBSTITUTION_PREFIX | 如果import.var-substitution.enabled设为true,配置变量前缀 | $( | |
| --import.var-substitution.suffix | IMPORT_VARSUBSTITUTION_SUFFIX | 如果import.var-substitution.enabled设为true,配置变量后缀 | ) | |
| --import.behaviors.sync-user-federation | IMPORT_BEHAVIORS_SYNC_USER_FEDERATION | 启用用户联合的同步 | false |
启动本地Keycloak(端口8080):
shelldocker-compose down --remove-orphans && docker-compose up keycloak
然后执行以下命令:
shelljava -jar ./target/keycloak-config-cli.jar \ --keycloak.url=http://localhost:8080 \ --keycloak.ssl-verify=true \ --keycloak.user=admin \ --keycloak.password=admin123 \ --import.files.locations=./contrib/example-config/moped.json
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429