(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Keycloak/RHBK】接続先データベースをPostgreSQLに変更する

スポンサーリンク

やりたいこと

Red Hat build of Keycloak(Keycloakの商用版)にて接続先のデータベースを初期状態のH2からPostgreSQLに変更する。
尚、PostgreSQLは既にインストール済みとする。

環境情報
  • Red Hat Enterprise Linux : 9.3 (Plow)
  • rhbk-24.0.5
  • postgresql-16.4

やり方

conf/keycloak.confにて以下の変更を行い

# The database vendor.
db=postgres
# The username of the database user.
db-username=postgres
# The password of the database user.
db-password=Test0001
# The full database JDBC URL. If not provided, a default URL is set based on the selected database vendor.
db-url=jdbc:postgresql://localhost/keycloak

kc.sh show-configにて設定が変更されていることを確認した上で

# ./bin/kc.sh show-config
Current Mode: production
Current Configuration:
	kc.config.built =  true (SysPropConfigSource)
	kc.db =  postgres (PropertiesConfigSource[source=file:/root/rhbk-24.0.5/bin/../conf/keycloak.conf])
	kc.db-password =  ******* (PropertiesConfigSource[source=file:/root/rhbk-24.0.5/bin/../conf/keycloak.conf])
	kc.db-url =  jdbc:postgresql://localhost/keycloak (PropertiesConfigSource[source=file:/root/rhbk-24.0.5/bin/../conf/keycloak.conf])
	kc.db-username =  keycloak (PropertiesConfigSource[source=file:/root/rhbk-24.0.5/bin/../conf/keycloak.conf])
...

該当のDBをPostgreSQL側で作成。テーブルは空の状態にて

$ createdb keycloak
Password: 
$ psql
Password for user postgres: 
psql (16.4)
postgres=# \connect keycloak
You are now connected to database "keycloak" as user "postgres".
keycloak=# \dt
Did not find any relations.
keycloak=# exit

Keycloak(RHBK)を起動すると

# systemctl restart rhbk

エラーログなく正しく起動される。

# tail ./data/log/keycloak.log
... 
... INFO  [io.quarkus] (main) Keycloak 24.0.5.redhat-00001 on JVM (powered by Quarkus 3.8.4.redhat-00002) started in 14.768s. Listening on: http://0.0.0.0:8080
...

尚、接続後にPostgreSQL側を見ると自動的にテーブルが作成されている。

keycloak=# \dt
                     List of relations
 Schema |             Name              | Type  |  Owner   
--------+-------------------------------+-------+----------
 public | admin_event_entity            | table | postgres
 public | associated_policy             | table | postgres
 public | authentication_execution      | table | postgres
 ...
 public | event_entity                  | table | postgres

以下、補足です。

補足

PostgreSQL側で事前にデータベースの枠を作成していないと下記のエラーとなりました。

... ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (development) mode
... ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to obtain JDBC connection
... ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: FATAL: database "keycloak" does not exist
... ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.

尚、デフォルトの状態に戻して(keycloak.confの設定をコメントアウト)サービスを再起動すると、元のH2への接続に戻すことができます。

以上、ご参考になれば幸いです。