docker-compose 的 Keycloak 密钥库和信任库设置

Keycloak Keystore and Truststore setup for docker-compose

我正在为生产服务器开发 keycloak,旧版 keycloak 似乎不需要这个,但最新的 keycloak 需要启用 KEYCLOAK_PRODUCTION=true 并且我们启用系统要求我们启用此变量 KEYCLOAK_ENABLE_TLS=true 然后我们还需要定义到信任库和密钥库的路径。 这是我的 docker 撰写文件

     version: "3.9" 
     services: 
       postgres: 
         container_name: postgres_blog 
         image: "postgres" 
         env_file: 
           - ./database.dev.env 
         networks: 
           - backend 
         volumes: 
           - ./db-data:/var/lib/postgresql/data/ 
           - ./sql:/docker-entrypoint-initdb.d/:ro 
         ports: 
           - "127.0.0.1:5432:5432" 
       keycloak: 
         container_name: keycloak_blog 
         image: "bitnami/keycloak:latest"
         # command: bash ./x509.sh
         depends_on: 
           - "postgres" 
         env_file: 
           - ./keycloak.dev.env 
         ports: 
           - "127.0.0.1:8180:8080" 
           - "127.0.0.1:8787:8787" # debug port 
         networks: 
           - backend 
         volumes:                                                  
           -./keycloak/keystore:/opt/bitnami/keycloak/certs/keycloak.keystore.jks
           - ./keycloak/truststore:/opt/bitnami/keycloak/certs/keycloak.truststore.jks
     networks: 
       backend: 
         name: backend 
         driver: bridge

这是我的keycloak.dev.env

    KEYCLOAK_CREATE_ADMIN_USER=false
    KEYCLOAK_ADMIN=admin
    KEYCLOAK_ADMIN_PASSWORD=password
    KEYCLOAK_USER= user 
    KEYCLOAK_PASSWORD= password 
    KEYCLOAK_PRODUCTION=true  
    KEYCLOAK_ENABLE_TLS=true
    KEYCLOAK_TLS_TRUSTSTORE_FILE=opt/bitnami/keycloak/certs/keycloak.truststore.jks
    KEYCLOAK_TLS_KEYSTORE_FILE=opt/bitnami/keycloak/certs/keycloak.keystore.jks
    KEYCLOAK_TLS_TRUSTSTORE_PASSWORD=changeit
    KEYCLOAK_TLS_KEYSTORE_PASSWORD=changeit
    KEYCLOAK_TLS_CREATE_KEYSTORE=true
    DEBUG=true 
    DEBUG_PORT='*:8787' 
    DB_VENDOR=POSTGRES 
    DB_ADDR=postgres 
    DB_PORT=5432 
    DB_DATABASE=keycloak 
    DB_USER=dev 
    DB_PASSWORD=pwd 
    TZ=Asia/Kathmandu

这是我的 database.dev.env

    POSTGRES_USER="dev" 
    POSTGRES_PASSWORD="pwd" 
    POSTGRES_DB="keycloak"

当我 运行 docker-compose up 命令时,这个错误消息在最后弹出,keycloak 容器退出。

    keycloak_blog | 2022-06-01 14:39:13,319 INFO  [org.infinispan.CLUSTER] (main) ISPN000080: Disconnecting JGroups channel `ISPN`        
    keycloak_blog | 2022-06-01 14:39:13,494 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode
    keycloak_blog | 2022-06-01 14:39:13,495 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Is a directory
    keycloak_blog | 2022-06-01 14:39:13,495 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.
    keycloak_blog exited with code 1

注意:我在 windows 系统中使用 docker 容器。

我已经实现了所有这些,但当我尝试 运行 服务器时,错误消息被记录下来。真的坚持这个任何帮助将不胜感激!提前致谢。

我在你的配置中偶然发现了一些东西:

  1. keycloak.dev.env 中:KEYCLOAK_TLS_TRUSTSTORE_FILEKEYCLOAK_TLS_KEYSTORE_FILE 在它们的路径中缺少根 /
  2. 在您的 docker-compose.yml 中:我对您尝试将相对路径映射到您的 keystore/truststore 感到惊讶(您可能会发现此讨论有帮助
  3. 最后,我只能根据错误消息 Is a directory 猜测,您可能想要 double-check 您的卷装载点。

希望,这有帮助。