環境構築¶
手順
1. CentOSの準備¶
yumを利用し最新版にupdateを実行します。
# vi /etc/yum.conf
wgetを利用するためインストールしておきます。
# yum install wget
firewallの設定を無効かしておきます。
SELinuxの設置を無効かしておきます。
以上でCentOSの準備は完了です。
2. Postgreqlの準備¶
インストール手順
以下のサイトより指定のリポジトリのURLをコピーする
PostgreSQL RPM Building Project - Repository Packages
コピーしたURLを引数に指定しリポジトパッケージをインストール
# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
postgresql パッケージのインストールおよび自動起動の設定
# yum -y install postgresql12-server
以下にインストールされていることを確認します。
/usr/pgsql-12
データベース環境の初期化
実行コマンド
# su - postgres -c '/usr/pgsql-12/bin/initdb -E UTF8 --no-locale'
起動および自動起動の設定を行います。
起動
# systemctl start postgresql-12
起動確認
# systemctl status postgresql-12
自動起動の設定
# systemctl enable postgresql-12
認証方式の修正
# vi /var/lib/pgsql/12/data/pg_hba.conf
今回はipv4なので以下の内容を追加します
host all all 0.0.0.0/0 trust
外部接続許可
# vi /var/lib/pgsql/12/data/postgresql.conf
以下のように修正する
#listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) #port = 5432 # (change requires restart)
↓ コメントアウトを外し listen_addressesを*とする
listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart)
再起動を正常に起動していることを確認します。
systemctl restart postgresql-12
接続用にkeycloakユーザおよびkeycloakのDBインスタンスを追加
postgresユーザに変更
# su - postgres
psqlにてログイン
# psql
以下のコマンドを実行
ユーザの作成
create role keycloak with login password 'keycloak';
DBの作成
create database keycloak owner=keycloak;
3. keycloakのインストール¶
Java 8 JDKインストール
sudo yum install java-1.8.0-openjdk
Keycloak本体のダウンロードと展開
# wget https://downloads.jboss.org/keycloak/10.0.2/keycloak-10.0.2.tar.gz # tar xfpz keycloak-10.0.2.tar.gz # mv keycloak-10.0.2 /opt/keycloak
jdbcドライバーの取得
# wget https://jdbc.postgresql.org/download/postgresql-42.2.14.jar
設定ファイル及びJDBCドライバを入れるディレクトリを作成
# cd /opt/keycloak/modules/system/layers/keycloak/org/ # mkdir postgresql # cd postgresql/ # mkdir main # cd main/ # cp /home/tas/postgresql-42.2.14.jar ./
以下の内容で設定ファイル「module.xml」を作成する
<?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.3" name="org.postgresql"> <resources> <resource-root path="postgresql-42.2.14.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
設定ファイル(standalone.xml)を変更
# vi /opt/keycloak/standalone/configuration/standalone.xml
以下の箇所の修正
DB関連の修正
datasourceをH2用からpostgresql用に修正
<!-- <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> --> <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:postgresql://localhost/keycloak</connection-url> <driver>postgresql</driver> <security> <user-name>keycloak</user-name> <password>keycloak</password> </security> </datasource>
driversの追加
<driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver>
HTTPS通信に変更する
<server name="default-server"> の配下
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> ↓ <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true"/>
IPの設定
サーバのIPへ変更する
<interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:192.168.56.131}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:192.168.56.131}"/> </interface> </interfaces>
起動確認
portを80番で起動するため以下のコマンドで実行する
sudo /opt/keycloak/bin/standalone.sh -Djboss.http.port=80
サービスの登録
サービス用のファイルを作成
# sudo vi /etc/systemd/system/keycloak.service
以下の内容を追加
[Unit] Description=Jboss Application Server After=network.target [Service] Type=idle Environment=JBOSS_HOME=/opt/keycloak JBOSS_LOG_DIR=/var/log/keycloak/ "JAVA_OPTS=-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true" User=root Group=root ExecStart=/opt/keycloak/bin/standalone.sh -Djboss.http.port=80 TimeoutStartSec=600 TimeoutStopSec=600 [Install] WantedBy=multi-user.target
設定ファイルの再読み込み
# sudo systemctl daemon-reload
サービスの自動起動の有効化
# sudo systemctl enable keycloak
サービスの起動
# sudo systemctl start keycloak
管理者の追加
ブラウザでログインする際に利用する管理者を登録します。今回のサンプルではsnowhiro - password にて作成しています。# /opt/keycloak/bin/add-user-keycloak.sh -r master -u snowhiro -p password Added 'snowhiro' to '/opt/keycloak/standalone/configuration/keycloak-add-user.json', restart server to load user
ブラウザにて以下のURLにアクセスし、画面が表示されればOK
ログインする場合は「8. 管理者の追加」にて追加したユーザにてログインします。
以上でkeycloakの準備は完了です。