Keycloak: Setup(1)

少し気になったのでKeycloakを触ってみる。最新versionの17は作りが16から大きく変わったようだが、ドキュメントが追い付いていない。一旦17で進めてみるけど16に変更するかも。

まずはKeycloakのインストールを行う。公式からtar.gzをダウンロードする。今回は前述のとおり17.0.0で進める。Dockerのイメージも公開されているのでそちらを利用も可能なのだろう。ただし、armで動くイメージが公開されていないので自分で作成する方針で行く。

KeycloakはJDK11以上が必要とのことなのでopenjdkの17系をベースにする。Dockerfile作らずにopenjdkイメージのままで良い気もするが作成しておく。

# vi Dockerfile
ARG FLAVOR="17.0.2-slim-bullseye"
FROM openjdk:${FLAVOR}
WORKDIR /app
ARG KEYCLOAK="keycloak-17.0.0.tar.gz"
COPY ./tgz/${KEYCLOAK} /app/

RUN set -x && \
mkdir -p /app/keycloak && \
cd /app && \
tar -zxvf ${KEYCLOAK} -C /app/keycloak --strip-components 1 && \
rm -rf ${KEYCLOAK}

EXPOSE 8080
ENTRYPOINT ["/app/keycloak/bin/kc.sh"]
CMD ["start-dev"]

volumeのマウントは何処をやっとけばいいのか、まだ良くわからない。conf, providers, themes, dataあたりを一旦はマウントするdocker-composeとする。

# vi docker-compose
version: '3'
services:
  keycloak:
    image:keycloak:17.0.0_jdk17.0.2_01
    container_name: 'keycloak'
    networks:
      nw:
        ipv4_address: 192.168.100.10
    ports:
      - 8080:8080/tcp
    volumes:
      - './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"
    environment:
      - "KEYCLOAK_ADMIN=admin"
      - "KEYCLOAK_ADMIN_PASSWORD=adminpassword"
    restart: always

networks:
  nw:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: "192.168.100.0/24"
    driver_opts:
      com.docker.network.bridge.name: keycloak

adminユーザの作成について、http://localhost:8080でアクセスしろとか無理なことが書いてある。できない場合はadd-user-keycloakスクリプトを使えと書いてあるが、そんなものは17には無い。いきなり挫折しそうになったが、どうやら環境変数に設定して置けば行けそう。

最終的にはnextcloudあたりと連携できるようにしたい。