3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Keycloak 21.1.1を本番モードで動かしてみた(ローカル環境/Docker使用)

Last updated at Posted at 2023-06-03

本記事で行うこと

Keycloakの起動には開発モードと本番モードの2種類があります。
前回書いた記事では開発モードで起動しましたが、本記事では本番モードで起動してみます。
ただしサーバーやクラウドにはデプロイしません。
ローカル環境でDockerを使用し、httpsとhttpの両方を試します。

開発モードでの起動

bin/kc.[sh|bat] start-dev

本番モードでの起動

bin/kc.[sh|bat] start

Dockerコンテナ

Dockerコンテナはデータベース用とKeycloak用の2種類を用意しました。
後日Keycloak側をクラウドにデプロイするつもりなので、Docker Composeを使わないことにします。

データベースのコンテナ

本記事ではPostgreSQLを使用しました。

Dockerfile


FROM postgres

ENV POSTGRES_DB keycloak
ENV POSTGRES_USER keycloak
ENV POSTGRES_PASSWORD secret

EXPOSE 5432

docker build


docker build ./ -t mygres

docker run


docker run -p 5432:5432 -v /home/user/mydata:/var/lib/postgresql/data mygres

Keycloakコンテナ

httpsで動かすKeycloakコンテナ(オレオレ証明書使用)

Dockerfile

公式サイトのDockerfileを利用しましたが、そのままではうまく動かなかったので、少し変更しました。


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

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# Configure a database vendor
ENV KC_DB=postgres

WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:latest
COPY --from=builder /opt/keycloak/ /opt/keycloak/

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=jdbc:postgresql://host.docker.internal:5432/keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=secret
ENV KC_HOSTNAME=localhost

EXPOSE 8443

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

docker build


docker build ./ -t mycloak

docker run

  • 初回

環境変数KEYCLOAK_ADMIN(管理ユーザー名)とKEYCLOAK_ADMIN_PASSWORD(管理ユーザーパスワード)を指定しています。


docker run --add-host=host.docker.internal:host-gateway -p 8443:8443 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin mycloak
  • 2回目以降

2回目以降のdocker runで、KEYCLOAK_ADMINを指定すると動かなくなることがありましたので、外しました。


docker run --add-host=host.docker.internal:host-gateway -p 8443:8443 mycloak

httpで動かすKeycloakコンテナ

Dockerfile


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

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# Configure a database vendor
ENV KC_DB=postgres

WORKDIR /opt/keycloak
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:latest
COPY --from=builder /opt/keycloak/ /opt/keycloak/

# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=jdbc:postgresql://host.docker.internal:5432/keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=secret
ENV KC_HOSTNAME=localhost

EXPOSE 8080
ENV KC_HTTP_PORT=8080
ENV KC_HTTP_ENABLED=true
ENV KC_HOSTNAME_STRICT=false
ENV KC_HOSTNAME_STRICT_HTTPS=false

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

docker build

docker build ./ -t mycloak_http

docker run

httpsバージョンとの違い

  • PORTが8080
docker run --add-host=host.docker.internal:host-gateway -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin mycloak_http

動作確認

httpsで動かす

ブラウザで https://localhost:8443 にアクセスします。
オレオレ証明書を使用しているので、以下のように警告が出ます。
「詳細設定」ボタンをクリックします。

image.png

「localhost にアクセスする」をクリックします。

image.png

「Administration Console」をクリックします。

image.png

Sign Inします。

image.png

Sign Inできました。以降は通常通り使えました。

image.png

httpで動かす

ブラウザで http://localhost:8080 にアクセスします。
httpsバージョンのようにオレオレ証明書に対する警告が出ず、通常通り動きました。

おまけ

試しにKeycloakをCloud Runにデプロイしてみました。
まだ本番では使えない中途半端な状態ですが、一応動いたので、Dockerfileを載せておきます
(何らかの方法で、環境変数KEYCLOAK_ADMINとKEYCLOAK_ADMIN_PASSWORDを設定する必要があります)。


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

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

WORKDIR /opt/keycloak
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:18.0

LABEL version="0.1"
LABEL maintainer="***.*** <****@****.com>"

COPY --from=builder /opt/keycloak/ /opt/keycloak/

ENV KC_HTTP_ENABLED=true
ENV KC_HOSTNAME_STRICT=false
ENV KC_HOSTNAME_STRICT_HTTPS=false
ENV KC_HOSTNAME_URL=http://localhost:8080
ENV KC_PROXY=edge

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?