---
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を使いました。

以下、作業メモです。

<!-- toc -->

### DB用Shared Folderの作成

まずはPostgreSQLコンテナにマウントするためのShared Folderを作成。

"Control Panel" => "Shared Folder"でCreateボタンをクリック。

<img src="https://user-images.githubusercontent.com/106908/34956740-c82c48f8-fa6d-11e7-859b-53f089308357.png" width="400px">

"Name"は`keycloak-db`にし、ゴミ箱は不要なので"Enable Recycle Bin"のチェックを外しておく。
OKボタンをクリックして作成。"Permission"もデフォルトでOK。

<img src="https://user-images.githubusercontent.com/106908/34956765-f20cf6b8-fa6d-11e7-8f21-252612ed394a.png" width="400px">


PostgreSQLのデータフォルダには空フォルダを設定する必要があるため、`data`フォルダを作成作成。

<img src="https://user-images.githubusercontent.com/106908/34957007-0879d226-fa6f-11e7-9ff3-a0a2348e1438.png" width="400px">

"File Station" => "keycloak-db"を選択 => "Create" => "Create folder"で`data`を入力してフォルダ作成。

<img src="https://user-images.githubusercontent.com/106908/34957056-418c92b0-fa6f-11e7-861b-8281832c011a.png" width="400px">

### PostgreSQLのインストール

次にPostgreSQLのインストール。

"Main Menu"から"Docker"を開き、"Registry"タブをクリックし、"Insert keywords"に`postgres`を入力し、`postgres`を選択。。

<img src="https://user-images.githubusercontent.com/106908/34956702-9b5d93a4-fa6d-11e7-8e57-8385aad75136.png" width="400px">

"Download"をクリック。Tagは`9.6`を使用。

<img src="https://user-images.githubusercontent.com/106908/34956712-a7ae3fbe-fa6d-11e7-922d-5a93bcf352eb.png" width="400px">

"Image"タブをクリックし、`postgres:9.6`を選択。

<img src="https://user-images.githubusercontent.com/106908/34956783-05079110-fa6e-11e7-86d8-19df58c12de6.png" width="400px">

"Launch"ボタンをクリック。"Container Name"に`keycloak-db`を入力。

<img src="https://user-images.githubusercontent.com/106908/34956812-23f6a19c-fa6e-11e7-9efb-9606d8e323da.png" width="400px">

"Advanced Settings"ボタンをクリック。"Enable auto-restart"にチェックを入れる。

<img src="https://user-images.githubusercontent.com/106908/34956821-3042e7d0-fa6e-11e7-89ad-0614a7047984.png" width="400px">

"Volume"タブをクリックし、"Add Folder"ボタンをクリック。

`keycloak-db/data`を`/var/lib/postgresql/data`にマウントする。

<img src="https://user-images.githubusercontent.com/106908/34957093-6ed56774-fa6f-11e7-9036-2d832f262488.png" width="400px">

"Environment"タブをクリックし、"Command"に環境変数に次の内容を設定。

``` yml
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
```

<img src="https://user-images.githubusercontent.com/106908/34956888-805f7346-fa6e-11e7-8780-4ffe65cfb190.png" width="400px">

"Apply"ボタンをクリックして"Advanced Settings"ウィンドウを閉じる。

"Next"ボタンクリック => "Apply"ボタンクリックでPostgreSQLを起動する

<img src="https://user-images.githubusercontent.com/106908/34956912-954da23c-fa6e-11e7-8e64-efe3df2c619b.png" width="400px">

"Container"タブをクリックし、`keycloak-db`コンテナが"Running"になっていればOK。

<img src="https://user-images.githubusercontent.com/106908/34957146-a9b32f3e-fa6f-11e7-84a4-b2b1085f854e.png" width="400px">

### Keycloakのインストール

最後にKeycloakのインストール。

"Registry"タブをクリックし、"Insert keywords"にminioを入力し、`jboss/keycloak`を選択。

<img src="https://user-images.githubusercontent.com/106908/34957268-386c58e0-fa70-11e7-9025-8355858acff3.png" width="400px">

"Download"をクリック。Tagは`3.4.3.Final`を使用。

<img src="https://user-images.githubusercontent.com/106908/34957283-51b47652-fa70-11e7-9199-15aca8bdb087.png" width="400px">

"Image"タブをクリックし、`jboss/keycloak:3.4.3.Final`を選択。

<img src="https://user-images.githubusercontent.com/106908/34957370-b518b848-fa70-11e7-8f96-359b11a72951.png" width="400px">

"Launch"ボタンをクリック。"Container Name"に`keycloak`を入力。

<img src="https://user-images.githubusercontent.com/106908/34957378-c12dadf0-fa70-11e7-89aa-02913c729a90.png" width="400px">

"Advanced Settings"ボタンをクリック。"Enable auto-restart"にチェックを入れる。

<img src="https://user-images.githubusercontent.com/106908/34957383-cdef99b8-fa70-11e7-902d-f9aa25c519ae.png" width="400px">

"Port Settings"タブをクリックし、"Local Port"に`8080`を入力。

<img src="https://user-images.githubusercontent.com/106908/34957405-dd32dfc0-fa70-11e7-9025-3b140dfcfc07.png" width="400px">

"Links"タブをクリックし、"Container Name"に`keycloak-db`を選択し、"Alias"に`postgres`を入力する。

<img src="https://user-images.githubusercontent.com/106908/34957443-fea149da-fa70-11e7-9719-99c43fb52895.png" width="400px">

"Environment"タブをクリックし、"Command"に環境変数に次の内容を設定。

``` yml
POSTGRES_DATABASE: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
```

<img src="https://user-images.githubusercontent.com/106908/34957500-36662fc0-fa71-11e7-9124-6ada9fa481f7.png" width="400px">

> 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を起動する

<img src="https://user-images.githubusercontent.com/106908/34957528-4e2aae74-fa71-11e7-8a76-bf1d65885054.png" width="400px">

"Container"タブをクリックし、`keycloak`コンテナが"Running"になっていればOK。

`keycloak`コンテナをクリックし、"Details"ボタンをクリックし、"Log"タブを開いて、`Keycloak ... started ...`というログが出ていることを確認しておくとベター。

<img src="https://user-images.githubusercontent.com/106908/34957609-ade5a422-fa71-11e7-98c5-8c0bf2056eae.png" width="400px">

### 動作確認

`http://<Synology NASのIP>:8080`にアクセスすると、UIが表示される。

<img src="https://user-images.githubusercontent.com/106908/34957675-f4e2387c-fa71-11e7-9673-64ae2e9ffe85.png" width="400px">

---

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/)大変良いです。
