--- title: Synology NASにKeycloak on Dockerをインストールする tags: ["NAS", "Synology", "Keycloak", "PostgreSQL", "OpenID Connect", "OAuth2", "Docker"] categories: ["Dev", "NAS", "Synology", "Keycloak"] date: 2018-01-16T01:20:50Z updated: 2018-02-15T12:55:46Z --- [前回](/entries/441)、[Synology NAS](https://www.amazon.co.jp/exec/obidos/ASIN/B074BYFKZ2/ikam-22/ref=nosim/)に[Minio](https://minio.io/)をインストールしましたが、今回は[Keycloak](http://www.keycloak.org/)をDockerを使ってインストールします。 MinioにDockerをインストールする方法は[前回の記事](/entries/441)を参照してください。 Keycloakの永続化にはデータベース(MySQLまたはPostgreSQL)が必要です。MinioでMySQLのDockerコンテナを起動すると、 Volume Mountでなぜか権限エラーになったので、特に問題の起きなかったPostgreSQLを使いました。 以下、作業メモです。 ### DB用Shared Folderの作成 まずはPostgreSQLコンテナにマウントするためのShared Folderを作成。 "Control Panel" => "Shared Folder"でCreateボタンをクリック。 "Name"は`keycloak-db`にし、ゴミ箱は不要なので"Enable Recycle Bin"のチェックを外しておく。 OKボタンをクリックして作成。"Permission"もデフォルトでOK。 PostgreSQLのデータフォルダには空フォルダを設定する必要があるため、`data`フォルダを作成作成。 "File Station" => "keycloak-db"を選択 => "Create" => "Create folder"で`data`を入力してフォルダ作成。 ### PostgreSQLのインストール 次にPostgreSQLのインストール。 "Main Menu"から"Docker"を開き、"Registry"タブをクリックし、"Insert keywords"に`postgres`を入力し、`postgres`を選択。。 "Download"をクリック。Tagは`9.6`を使用。 "Image"タブをクリックし、`postgres:9.6`を選択。 "Launch"ボタンをクリック。"Container Name"に`keycloak-db`を入力。 "Advanced Settings"ボタンをクリック。"Enable auto-restart"にチェックを入れる。 "Volume"タブをクリックし、"Add Folder"ボタンをクリック。 `keycloak-db/data`を`/var/lib/postgresql/data`にマウントする。 "Environment"タブをクリックし、"Command"に環境変数に次の内容を設定。 ``` yml POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password ``` "Apply"ボタンをクリックして"Advanced Settings"ウィンドウを閉じる。 "Next"ボタンクリック => "Apply"ボタンクリックでPostgreSQLを起動する "Container"タブをクリックし、`keycloak-db`コンテナが"Running"になっていればOK。 ### Keycloakのインストール 最後にKeycloakのインストール。 "Registry"タブをクリックし、"Insert keywords"にminioを入力し、`jboss/keycloak`を選択。 "Download"をクリック。Tagは`3.4.3.Final`を使用。 "Image"タブをクリックし、`jboss/keycloak:3.4.3.Final`を選択。 "Launch"ボタンをクリック。"Container Name"に`keycloak`を入力。 "Advanced Settings"ボタンをクリック。"Enable auto-restart"にチェックを入れる。 "Port Settings"タブをクリックし、"Local Port"に`8080`を入力。 "Links"タブをクリックし、"Container Name"に`keycloak-db`を選択し、"Alias"に`postgres`を入力する。 "Environment"タブをクリックし、"Command"に環境変数に次の内容を設定。 ``` yml POSTGRES_DATABASE: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password KEYCLOAK_USER: admin KEYCLOAK_PASSWORD: admin ``` > HTTPS対応するために、フロントにHA Proxyやnginxを置く場合は環境変数[`PROXY_ADDRESS_FORWARDING`](https://github.com/jboss-dockerfiles/keycloak/tree/master/server#enabling-proxy-address-forwarding)を`true`にする必要あり。デフォルトでは`false`が設定されている。 "Apply"ボタンをクリックして"Advanced Settings"ウィンドウを閉じる。 "Next"ボタンクリック => "Apply"ボタンクリックでKeycloakを起動する "Container"タブをクリックし、`keycloak`コンテナが"Running"になっていればOK。 `keycloak`コンテナをクリックし、"Details"ボタンをクリックし、"Log"タブを開いて、`Keycloak ... started ...`というログが出ていることを確認しておくとベター。 ### 動作確認 `http://:8080`にアクセスすると、UIが表示される。 --- SynologyのLDAPサーバーとUser Federationすれば、SynologyだけでLDAP, OAuth2, OpenID Connect, SAMLで対応できそうなので、SynologyがSSO中央集権サーバーとして役に立ちそうです。 [Synology DiskStation](https://www.amazon.co.jp/exec/obidos/ASIN/B074BYFKZ2/ikam-22/ref=nosim/)大変良いです。