Keycloak: Setup(2)
引き続きKeycloakをお試し。DBはpostgreSQLの方があってそうな感じだけど、小規模に利用するので動けばどれでも大丈夫だろう。他でも使っているMariaDBを採用する方針とする。
# vi docker-compose.yml
version: '3'
services:
keycloak:
image: keycloak:17.0.0_jdk17.0.2_03
container_name: 'keycloak'
networks:
nw:
ipv4_address: x.x.x.x
#ports:
# - 8080:8080/tcp
# - 8443:8443/tcp
volumes:
- '/etc/localtime:/etc/localtime:ro'
- './files/keycloak-17.0.0/conf:/app/keycloak/conf'
- './files/keycloak-17.0.0/providers:/app/keycloak/providers'
- './files/keycloak-17.0.0/themes:/app/keycloak/themes'
#- './files/keycloak-17.0.0/data:/app/keycloak/data'
entrypoint: "/app/keycloak/bin/kc.sh"
#command: "start-dev"
command: "start"
#command: "start --auto-build"
env_file: .env
environment:
TZ: Asia/Tokyo
depends_on:
- 'keycloakdbM'
restart: always
keycloakdbM:
image: mariadb:10.7.3-focal
container_name: 'keycloakdbM'
networks:
nw:
ipv4_address: x.x.x.y
volumes:
- '/etc/localtime:/etc/localtime:ro'
- './files/mysql_data:/var/lib/mysql'
env_file: .env
environment:
TZ: Asia/Tokyo
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
restart: always
networks:
nw:
driver: bridge
ipam:
driver: default
config:
- subnet: "x.x.x.0/24"
driver_opts:
com.docker.network.bridge.name: keycloak
keycloakはhostの8443と8080に露出させてるけど、nginxからcontainerのIPアドレス宛に転送する予定なので塞ぐ予定。.envは次
# cat .env
KC_HTTP_RELATIVE_PATH=hogera
KC_HOSTNAME_PATH=hogera
KC_HOSTNAME_STRICT=false
KC_PROXY=reencrypt
KEYCLOAK_ADMIN=KEYCLOAK-ADMIN-USERNAME
KEYCLOAK_ADMIN_PASSWORD=KEYCLOAK-ADMIN-USERPASSWORD
KC_DB_USERNAME=DB-USERNAME
KC_DB_PASSWORD=DB-USERPASSWORD
KC_DB_URL=jdbc:mariadb://keycloakdbM:3306/keycloak
MYSQL_ROOT_PASSWORD=DB-ROOTPASSWORD
MYSQL_DATABASE=keycloak
MYSQL_USER=keycloak
MYSQL_PASSWORD=DB-USERPASSWORD
全て環境変数で設定できそうだが、keycloak.confの方にも一部設定を記載する。
# cat keycloak.conf
metrics-enabled=true
https-certificate-file=${kc.home.dir}conf/servercrt.pem
https-certificate-key-file=${kc.home.dir}conf/private-key.pem
最終的にMariaDBを使うことにしたので、Dockerfileは次のように変更している。
# cat Dockerfile
ARG FLAVOR="17.0.2-slim-bullseye"
FROM openjdk:${FLAVOR}
WORKDIR /app/keycloak
ARG KEYCLOAK="keycloak-17.0.0.tar.gz"
COPY ./tgz/${KEYCLOAK} /app/
ENV KC_METRICS_ENABLED=true
ENV KC_DB=mariadb
ENV KC_HTTP_RELATIVE_PATH=key
#
RUN set -x && \
cd /app && \
tar -zxvf ${KEYCLOAK} -C /app/keycloak --strip-components 1 && \
rm -rf ${KEYCLOAK} && \
/app/keycloak/bin/kc.sh build
#
EXPOSE 8080/tcp 8443/tcp
ENTRYPOINT ["/app/keycloak/bin/kc.sh"]
CMD ["start-dev"]
buildしておくのがポイント