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