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しておくのがポイント