keycloak - 开发环境的配置持久化

news/2025/2/26 5:02:00

keycloak - 开发环境的配置持久化

前情提要: Keycloak - docker 运行 & 前端集成

本来是想顺便试一下 Okta 集成的,但是发现 Okta 没有本地的 docker 镜像,他们毕竟是做 Identity as a service……算了……

更新后的 docker compose 如下:

version: "3.8"
services:
  keycloak:
    container_name: keycloak
    image: quay.io/keycloak/keycloak:21.1.1
    command: start-dev --import-realm
    volumes:
      - ./realm-config/export:/opt/keycloak/data/import
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=pass
      - DB_VENDOR=h2
    ports:
      - 9090:8080

主要的区别就是添加了一些指令、镜像源换成官方镜像,随后更新了一下 volume 和环境名,其他和前文基本都一样

持久过程

其实主要就是跑两个 docker 指令,一个是执行 /opt/keycloak/bin/kc.sh 的脚本去导出当前有的配置,另一个就是使用 docker cp 将 docker 中的配置保存到本地:

docker exec -it keycloak /opt/keycloak/bin/kc.sh export --dir /opt/keycloak/data/export
2025-02-22 23:26:32,032 INFO  [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: <request>, Strict HTTPS: false, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: -1, Proxied: false
2025-02-22 23:26:33,181 WARN  [io.quarkus.agroal.runtime.DataSources] (main) Datasource <default> enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly
2025-02-22 23:26:33,747 INFO  [org.infinispan.SERVER] (keycloak-cache-init) ISPN005054: Native IOUring transport not available, using NIO instead: io.netty.incubator.channel.uring.IOUring
2025-02-22 23:26:33,772 WARN  [org.infinispan.PERSISTENCE] (keycloak-cache-init) ISPN000554: jboss-marshalling is deprecated and planned for removal
2025-02-22 23:26:33,891 WARN  [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
2025-02-22 23:26:33,922 INFO  [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
2025-02-22 23:26:34,428 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_276608, Site name: null
2025-02-22 23:26:34,667 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2025-02-22 23:26:35,273 INFO  [org.keycloak.services] (main) KC-SERVICES0033: Full model export requested
2025-02-22 23:26:35,886 INFO  [org.keycloak.exportimport.dir.DirExportProvider] (main) Exporting into directory /opt/keycloak/data/export
2025-02-22 23:26:35,953 INFO  [org.keycloak.exportimport.dir.DirExportProvider] (main) Realm 'master' - data exported
2025-02-22 23:26:36,154 INFO  [org.keycloak.exportimport.dir.DirExportProvider] (main) Users 0-0 exported
2025-02-22 23:26:36,479 INFO  [org.keycloak.exportimport.dir.DirExportProvider] (main) Realm 'okta' - data exported
2025-02-22 23:26:36,490 INFO  [org.keycloak.services] (main) KC-SERVICES0035: Export finished successfully
2025-02-22 23:26:36,530 INFO  [io.quarkus] (main) Keycloak 21.1.1 on JVM (powered by Quarkus 2.13.7.Final) started in 5.605s.
2025-02-22 23:26:36,531 INFO  [io.quarkus] (main) Profile import_export activated.
2025-02-22 23:26:36,531 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, jdbc-mariadb, jdbc-mssql, jdbc-mysql, jdbc-oracle, jdbc-postgresql, keycloak, logging-gelf, micrometer, narayana-jta, reactive-routes, resteasy, resteasy-jackson, smallrye-context-propagation, smallrye-health, vertx]
2025-02-22 23:26:36,739 INFO  [io.quarkus] (main) Keycloak stopped in 0.203s

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug keycloak
    Learn more at https://docs.docker.com/go/debug-cli/
❯ docker cp keycloak:/opt/keycloak/data/export ./realm-config
Successfully copied 145kB to /Users/luhan/study/docker/keycloak/realm-config
❯ tree .
.
├── docker-compose.yaml
└── realm-config
    └── export
        ├── master-realm.json
        ├── master-users-0.json
        └── okta-realm.json

3 directories, 4 files

因为有 --import-realm 这个指令,所以 docker 之后会完成导入指定文件夹下的配置。这样每次做完了修改,跑一下上面的指令,就可以导出到本地了


http://www.niftyadmin.cn/n/5867989.html

相关文章

zookeeper从入门到精通

一、入门基础 1.1 什么是 ZooKeeper ZooKeeper 是一个开源的分布式协调服务&#xff0c;由雅虎创建&#xff0c;后成为 Apache 的顶级项目。它为分布式应用提供了高效、可靠的协调服务&#xff0c;例如统一命名服务、配置管理、分布式锁、集群管理等。ZooKeeper 的数据模型类…

网络安全实入门| 剖析HTTP慢速攻击(Slowloris)与Nginx防护配置

一、HTTP慢速攻击的核心原理 HTTP慢速攻击&#xff08;如Slowloris&#xff09;是一种应用层拒绝服务攻击&#xff08;DoS&#xff09;&#xff0c;其核心在于合法但缓慢地占用服务器资源&#xff0c;导致正常请求无法被处理。攻击者通过以下方式实现目标&#xff1a; 协议漏洞…

计算机视觉算法实战——文档扫描与 OCR(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 一、领域简介✨✨ 文档扫描与 OCR&#xff08;Optical Character Recognition&#xff09; 是计算机视觉的核心应用之一&#xff0c;旨在将物…

【行业解决方案篇五】【DeepSeek智慧城市:交通流量预测系统】

一、为什么红绿灯总和你作对? 早高峰的十字路口,左转车道排了200米,直行车道却空荡荡——这不是交管局的阴谋,而是传统交通管理系统就像用"算盘预测股票",根本处理不了21世纪的海量数据。DeepSeek的交通流量预测系统,则像是给城市装上了"预知未来的望远镜…

vue3 Props的使用

Props是什么&#xff1f; 官方地址&#xff1a;Props | Vue.js 在 Vue 中&#xff0c;props 是父组件向子组件传递数据的一种机制。 props 是子组件中定义的自定义属性&#xff0c;父组件通过这些属性向子组件传递数据。 它们是单向数据流的一部分&#xff0c;意味着数据只能…

【NLP 23、预训练语言模型】

人类发明后悔&#xff0c;来证明拥有的珍贵 —— 25.1.15 Bert的优势&#xff1a;① 预训练思想 ② Transformer模型结构 一、传统方法 VS 预训练方式 Pre-train&#xff1a; ① 收集海量无标注文本数据 ② 进行模型预训练&#xff0c;并在任务模型中使用 Fine-tune&#xff1a…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…

BUUCTF--[极客大挑战 2019]RCE ME

目录 URL编码取反绕过 异或绕过 异或的代码 flag 借助蚁剑中的插件进行绕过 利用动态链接库 编写恶意c语言代码 进行编译 然后再写一个php文件 将这两个文件上传到/var/tmp下 运行payload 直接看代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_G…