使用 docker 和 docker compose 运行 Keycloak 时如何保持 Keycloak 中的领域、用户和角色持久化

问题描述 投票:0回答:1

我有一个 Spring boot java 应用程序,它使用 Keycloak 进行身份验证和授权。 我已经创建了我的领域及其用户和角色。我想使用 docker compose 对应用程序进行 dockerize。所以我创建了我的 java 应用程序的 docker 映像。 但是当我想创建一个 Keycloak 实例(从 dockerhub 拉取 Keyckloak 镜像)时,我将丢失之前创建的持久化领域、用户和角色,因为它会从拉取的 docker 镜像创建一个新的 Keycloak。每次使用 docker compose 运行应用程序时,如何保留这些数据? 实际上,每当我运行 docker compose 时,我都需要自动初始化 Keycloak 数据(领域、用户和角色)。

更新:

让我把问题说得更清楚。

我想将代码放在 Github 上,当有人获取并运行它时(彻底的 docker compose);通过预定义的keycloak用户和密码,使用该应用程序。问题是,当有人每次通过 docker compose 运行代码时,没有领域、用户和角色,因为 Keycloak 镜像被拉取并运行时没有任何数据(领域、用户等)。实际上我不希望运行应用程序的用户定义Keycloak数据(领域、用户等)。我希望这些数据已经存在于每个运行的应用程序中,以便用户可以登录到我的应用程序并使用它。

application.yml:

spring:
  application:
    name: my-client
  security:
    oauth2:
      client:
        registration:
          myclientapp:
            client-id: my-client-app
            client-secret: secrectKey12345
            scope: openid, profile, roles
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8085/login/oauth2/code/myclientapp
        provider:
          myclientapp:
            authorization-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/auth
            token-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/token
            jwk-set-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/certs
            user-info-uri: http://localhost:8080/realms/myclientapp/protocol/openid-connect/userinfo
            user-name-attribute: preferred_username

pox.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.my-client</groupId>
    <artifactId>client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>client</name>
    <description>Demo project for Spring Client</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

非常感谢。

java spring-boot docker spring-security keycloak
1个回答
0
投票

导出您的 Keycloak 领域和用户并将其添加到容器导入文件夹中。

配置领域客户端和用户后,在 Docker 桌面中:

  • 转到您的 Keycloak 容器
    Exec
    选项卡
  • cd /opt/keycloak/bin/
  • sh ./kc.sh --dir /tmp/keycloak/
    --用户领域_文件`
  • 转到
    Files
    选项卡并获取要恢复的领域的导出文件
  • 编辑您的撰写文件以添加
    volume
    来挂载您放置导出文件的目录
    /opt/keycloak/data/import/
    。就我而言:
    volumes:
      - ./keycloak/import/:/opt/keycloak/data/import/

那里有完整项目示例

© www.soinside.com 2019 - 2024. All rights reserved.