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配置即可。
Comments NOTHING