はじめに
Keycloak(RedHat Build of Keycloak)は開発モードで起動を行うと、特に設定をせずともH2という同梱されているデータベース上に情報が格納されます。本記事ではそれらのデータを新しいバージョンに持っていくためにデータをコピーし、起動させた際の知見を残しておきます。
環境情報
- Red Hat Enterprise Linux VERSION="9.3
- rhbk-22.0.8
- rhbk-24.0.5
事前準備
新バージョンのZipを配置し、解凍します。
# ls rhbk-24.0.5 bin conf lib LICENSE.txt providers README.md themes version.txt
続いて現行バージョンのKeycloakを停止させた状態にした上で
# systemctl status rhbk ○ rhbk.service - Keycloak Application Server Loaded: loaded (/etc/systemd/system/rhbk.service; enabled; preset: disabled) Active: inactive (dead) since ...
H2のデータファイルをそのまま移行します。
# ls rhbk-22.0.8/data/ h2 tmp transaction-logs # cp -r rhbk-22.0.8/data/ rhbk-24.0.5
データファイルの他に設定やテーマで移行が必要なものがあれば、同じく手動でコピーします。
新バージョンでの起動
以下にて起動を行うと正常に立ち上がり
# ./kc.sh start-dev Updating the configuration and installing your custom providers, if any. Please wait. ... UPDATE SUMMARY Run: 9 Previously run: 115 Filtered out: 0 ------------------------------- Total change sets: 124 ... INFO [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener ... INFO [io.quarkus] (main) Keycloak 24.0.5.redhat-00001 on JVM (powered by Quarkus 3.8.4.redhat-00002) started in 12.412s. Listening on: http://0.0.0.0:8080 ... INFO [io.quarkus] (main) Profile dev activated. ... INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, keycloak, narayana-jta, reactive-routes, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx] ... WARN [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.
前のバージョンのユーザ情報でコンソールにもログインができました。設定したクライアント情報も移行済み。
尚、バージョン24での変更内容として以下がありましたが
管理コンソールが有効になっている場合、管理ユーザーがすでに存在すると、ウェルカムページが自動的に管理コンソールにリダイレクトされます。
実際にそのような挙動に変更されていました。
終わりに
現行のH2データには触れない形でアップデートを行ったため、切り戻し時のリスクなくアップデートを試すことができました。
以下のようにH2データベースにも接続して確認を行いましたが、テーブル名一覧は変わっていなかったので、大きなバージョン変更の差異が無かったのかもしれません。
sql> SELECT table_name FROM INFORMATION_SCHEMA.TABLES;
以上、ご参考になれば幸いです。