我一直在try 将Keyloak设置为生产,但没有成功.

我的键盘斗篷对接器--包含:

  • SSL
  • 波斯格雷斯

我的版本不包含反向代理.

这是我的 docker 作文:

version: "3.7"

services:
  keycloak:
    container_name: keycloak_app
    image: quay.io/keycloak/keycloak:latest
    restart: always
    ports:
      - "8443:8443"
    volumes:
      - "/etc/ssl/keycloak/:/etc/x509/https" # map certificates to container
    environment:
      KC_USER: admin
      KC_PASSWORD: 123
      KC_HOSTNAME: mydomain.net
      KC_DB_VENDOR: postgres
      KC_DB_URL: postgres
      KC_DB: keycloak
      KC_DB_USER: admin
      KC_DB_PASSWORD: 123
      KC_HTTPS_CERTIFICATE_FILE: /etc/x509/https/tls.crt
      KC_HTTPS_CERTIFICATE_KEY_FILE: /etc/x509/https/tls.key
      KC_DEBUG: true
    depends_on:
      - postgres
    command: [start]

  postgres:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: 123
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

这是我收到的一个错误.我不明白它的意思,也找不到任何与它相关的东西:

keycloak_app                                   | 
keycloak_app                                   | ERROR: Failed to run 'build' command.
keycloak_app                                   | ERROR: No value present
keycloak_app                                   | 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_app exited with code 1

PD:旧版本Keyloak的答案将不再起作用.

sibling 们,姑娘们,谢谢你们的提前帮助.

推荐答案

对于localhost development,以下docker-compose文件对我有效:

version: "3.7"

services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest 
    entrypoint: /opt/keycloak/bin/kc.sh start
    container_name: keycloak_app
    restart: unless-stopped
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=password
      - KC_HOSTNAME_STRICT=false
      - KC_HOSTNAME_STRICT_HTTPS=false
      - KC_HTTP_ENABLED=true
      - KC_DB=postgres
      - KC_DB_URL=jdbc:postgresql://keycloak-postgres:5432/keycloak
      - KC_DB_USERNAME=keycloak
      - KC_DB_PASSWORD=password
    ports:
      - 127.0.0.1:8080:8080
    depends_on:
      keycloak-postgres:
        condition: service_healthy
    networks:
      - keycloak-network
  keycloak-postgres:
    container_name: keycloak_postgres
    image: postgres:latest
    restart: unless-stopped
    environment:
      - POSTGRES_DB=keycloak
      - POSTGRES_USER=keycloak
      - POSTGRES_PASSWORD=password
      - POSTGRES_PORT=5432
    healthcheck:
      test: ["CMD-SHELL", "sh -c 'pg_isready -U keycloak -d keycloak'"] # User, Database
      interval: 5s
      timeout: 30s
      retries: 3
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - keycloak-network

networks:
  keycloak-network:
    name: keycloak-network
    driver: bridge

volumes:
  postgres_data:

要使其适应您的需要(配置TLS),它可能应该是这样的(未测试):

version: "3.7"

services:
  keycloak:
    container_name: keycloak_app
    image: quay.io/keycloak/keycloak:latest 
    entrypoint: /opt/keycloak/bin/kc.sh start
    ports:
      - 127.0.0.1:8443:8443
    volumes:
      - "/etc/ssl/keycloak/:/etc/x509/https" # map certificates to container
    restart: always
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=password
      - KC_HOSTNAME=mydomain.net
      - KC_HOSTNAME_STRICT=true
      - KC_HOSTNAME_STRICT_HTTPS=true
      - KC_HTTPS_CERTIFICATE_FILE=/etc/x509/https/tls.crt
      - KC_HTTPS_CERTIFICATE_KEY_FILE=/etc/x509/https/tls.key
      - KC_DB=postgres
      - KC_DB_URL=jdbc:postgresql://keycloak-postgres:5432/keycloak
      - KC_DB_USERNAME=keycloak
      - KC_DB_PASSWORD=password
    depends_on:
      keycloak-postgres:
        condition: service_healthy
    networks:
      - keycloak-network
  keycloak-postgres:
    container_name: keycloak_postgres
    image: postgres:latest
    restart: always
    environment:
      - POSTGRES_DB=keycloak
      - POSTGRES_USER=keycloak
      - POSTGRES_PASSWORD=password
      - POSTGRES_PORT=5432
    healthcheck:
      test: ["CMD-SHELL", "sh -c 'pg_isready -U keycloak -d keycloak'"]
      interval: 5s
      timeout: 30s
      retries: 3
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - keycloak-network

networks:
  keycloak-network:
    name: keycloak-network
    driver: bridge

volumes:
  postgres_data:

Explanation

因为您没有定义网络,所以您的密匙斗篷容器不能到达您的数据库(除了使用默认的扩展坞网桥,这被认为是遗留的,不建议用于生产),使用创建一个网桥网络

networks:
  keycloak-network:
    name: keycloak-network
    driver: bridge

然后将这两个容器添加到网络中,以便它们可以使用自己的名称或别名相互联系

networks:
  - keycloak-network

现在可以像这样使用环境变量了,请注意,keycloak-postgres是postgres容器的名称

KC_DB=postgres # Vendor
KC_DB_URL=jdbc:postgresql://keycloak-postgres:5432/keycloak # Url
KC_DB_USERNAME=keycloak
KC_DB_PASSWORD=password

我还向postgres容器添加了一个运行状况判断,因为默认的运行状况判断不一定要等到数据库启动并运行,这可能不是必需的.

此外,绑定到特定地址(例如127.0.0.1:8443:8443)可能是个好主意,因为8443:8443可以转换为0.0.0.0:8443:8443.

Postgresql相关问答推荐

可以向判断枚举值的SQL列添加约束吗?

GORM Golang SQL查询执行不区分大小写的搜索不起作用

PostgreSQL无效语法

Postgres:这是对OVERLAPS谓词的等效重写吗?

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

仅使用 ssl 连接到 Postgresql 数据库

Gorm 创建表单数据文件上传错误

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

如何查找具有包含花括号内值且遵循模式的属性的顶点?

无法从外部连接到在 AWS EC2 实例上运行的 Postgres

对 Postgres 进行身份验证时如何使用自定义密码哈希算法?

替代在 PostgreSQL 函数中嵌套正则表达式替换?

postgresql 更新错误ERROR: invalid input syntax for type boolean:

INSERT RETURNING 是否保证以 right的顺序返回?

如何让 Rails 使用 SSL 连接到 PostgreSQL?

从 PostgreSQL 中的数字获取月份名称

plpgsql:使用 2 个 OUT 参数调用函数

我如何知道我的 PostgreSQL 服务器是否使用C语言环境?

如何使用 postgresql 中的存储过程将数据插入表中

判断materialized视图的上次刷新时间