docker部署keycloak

发布于 2022-05-23  941 次阅读


搞半天,identity provider不支持oauth2.0,只能oidc,不能用mastodon。

keycloak主页
github页面

keycloak是一个开源的IAM解决方案,可以用来提供SSO、创建Social Login等。

部署主要参考官方文档的Getting started以及Running Keycloak in a container部分。

个人习惯用mariadb,就选择mariadb作为数据库了。

首先是写dockerfile,keycloak如果不自己写,每次运行都需要build,非常影响性能。相关可以参见这个issue

我的Dockerfile,修改自Running Keycloak in a container的Building your optimized Keycloak docker image部分。

FROM quay.io/keycloak/keycloak:latest as builder

ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
ENV KC_FEATURES=token-exchange
ENV KC_DB=mariadb
ENV KC_DB_URL_HOST=keycloak-db
ENV KC_DB_URL_PORT=3306
ENV KC_DB_URL_DATABASE=keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=xxxxxxxxxxxx
ENV KC_HOSTNAME=keycloak.stsecurity.moe
ENV KC_HTTP_ENABLED=true

# Install custom providers
RUN curl -sL https://github.com/aerogear/keycloak-metrics-spi/releases/download/2.5.3/keycloak-metrics-spi-2.5.3.jar -o /opt/keycloak/providers/keycloak-metrics-spi-2.5.3.jar
RUN /opt/keycloak/bin/kc.sh build

WORKDIR /opt/keycloak

ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start"]

这里可以通过环境变量设置好数据库相关。

docker-compose.yml,修改自官方example:

version: '3'

volumes:
  mysql_data:
      driver: local

services:
  keycloak-db:
      image: mariadb
      container_name: keycloak-db
      volumes:
        - ./mysql_data:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: xxxxxxxxxxxx
        MYSQL_DATABASE: keycloak
        MYSQL_USER: keycloak
        MYSQL_PASSWORD: xxxxxxxxxxxx
      # Copy-pasted from https://github.com/docker-library/mariadb/issues/94
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "--silent"]
  keycloak:
      build: .
      container_name: keycloak
      ports:
        - '127.0.0.1:3000:8080'
      environment:
        KC_PROXY: edge
        KEYCLOAK_ADMIN: adminname
        KEYCLOAK_ADMIN_PASSWORD: xxxxxxxxxxxx
      depends_on:
        - keycloak-db

接下来配置反代,反代需要以下header,nginx相关配置如下:

    proxy_set_header X-Forwarded-For $proxy_protocol_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $host;

其他反代配置可以参考官方文档的Using a reverse proxy部分。

全都配置完成后可以运行服务,访问https://example.com/health, https://example.com/health/ready, https://example.com/health/live 可以查看服务运行情况,https://example.com/metrics 是metrics。

服务正常运行后跟着Getting started配置即可。


Sup