繁体   English   中英

使用 Docker Image 时如何为 Keycloak 设置 PostgreSQL 模式?

[英]How to set PostgreSQL schema for Keycloak when using the Docker Image?

我正在尝试将 Docker Image 用于 Keycloak,但我似乎无法为在 PostgreSQL 中创建的表设置架构。

目前所有表都在公共架构中。 有没有一种方法可以指示 Keycloak 在模式中创建表?

您应该能够为数据源指定POSTGRES_DATABASE环境变量:

docker... -e POSTGRES_DATABASE=<your_database_name>...

默认情况下,它应该使用数据库名称'keycloak' ,所以很奇怪你看不到:

/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://${env.POSTGRES_ADDR:postgres}:${env.POSTGRES_PORT:5432}/${env.POSTGRES_DATABASE:keycloak}, driver-name=postgresql)

源代码: https ://github.com/jboss-dockerfiles/keycloak/blob/cd866b905d026eb69dab5176b352064252d92aff/server/cli/databases/postgres/change-database.cli#L2

更新

对不起,我明白你的意思了。 在这种情况下,我认为您必须在数据库中手动创建架构,然后更新standalone.xml以使用您的架构:

<spi name="connectionsJpa">
  <provider name="default" enabled="true">
    <properties>
      <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
      <property name="initializeEmpty" value="true"/>
      <property name="migrationStrategy" value="update"/>
      <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
      <property name="schema" value="your_schema"/>
    </properties>
  </provider>
</spi>

看起来他们不支持自动模式创建,因此您可能必须提交功能请求。

长话短说

在运行 keycloak 之前,使用DB_SCHEMA env 变量负责创建模式。

更多细节

keycloak的docker镜像支持DB_SCHEMA环境变量。 但是,必须在运行 keycloak 之前创建架构。

这是一个 docker compose 的示例,它首先在 postgres 容器中创建模式,然后运行 keycloak。

version: "3.8"
services:
  db:
    image: postgres:12
    restart: always 
    ports:
      - 5432:5432
    volumes:
      - /c/db:/var/lib/postgresql/data
      # This will bind the files inside the pgscripts to docker-entrypoint-initdb.d
      # The scripts will be run on startup
      - $PWD/postgres:/docker-entrypoint-initdb.d
    environment:
      # This is required otherwise the container will fail to start
      POSTGRES_PASSWORD: password
  keycloak:
    image: jboss/keycloak
    ports:
      - 8080:8080
    depends_on:
      - db
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
      DB_VENDOR: postgres
      DB_ADDR: db
      DB_PORT: 5432
      DB_SCHEMA: keycloak_schema
      DB_DATABASE: postgres
      DB_USER: keycloak_user
      DB_PASSWORD: keycloak_password

请注意,我正在使用卷绑定将主机postgres目录下的文件绑定到 docker-entrypoint-initdb.d(更多信息在这里: How to create User/Database in script for Docker Postgres

这是 init.sql 脚本

CREATE USER keycloak_user WITH PASSWORD 'keycloak_password';
CREATE SCHEMA IF NOT EXISTS keycloak_schema AUTHORIZATION keycloak_user;

在以下位置找到所有可能的配置参数
https://www.keycloak.org/server/all-config

直接链接到数据库连接
https://www.keycloak.org/server/all-config#_database

例如,当前模式参数

  • CLI:--数据库架构
  • 环境:KC_DB_SCHEMA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM