Amazon Linux2でDockerを使わずにKeycloakを動かす

# はじめに
お客さんに「KeycloakってこんなUIなんっすよ」をお伝えするための最速手順を自分向けにまとめました。
自分だけが触れればいいのであればローカルマシンにdockerで

```
# docker run jboss/keycloak
```
これが最速のはずです。

Keycloakのドキュメントによると
Server Installation and Configuration Guide
https://keycloak-documentation.openstandia.jp/master/ja_JP/server_installation/index.html

システム要件は以下とのこと

* Javaが実行可能なオペレーティング・システム
* Java 8 JDK
* zipまたはgzip、およびtar
* RAM512M以上
* ディスクスペース1G以上

ということで、EC2の無料枠 t2.micro で構築します。

# セットアップ
ほぼデフォルトで進め、セキュリティグループのインバウンドでsshとhttpsを許可しておく。
sshでサーバに入ったら以下rootでコマンド実行。

```
# amazon-linux-extras install -y java-openjdk11 nginx1
```

javaとnginxがインストール出来たらkeycloakのDLと設置。

```
# cd /usr/local/src/
# wget https://github.com/keycloak/keycloak/releases/download/12.0.1/keycloak-12.0.1.tar.gz
# tar zxf keycloak-12.0.1.tar.gz
# mv keycloak-12.0.1 /opt/keycloak
```

ルート用ユーザーの作成

```
# cd /opt/keycloak/
# ./bin/add-user-keycloak.sh -r master -u user1 -p password1
Added 'user1' to '/opt/keycloak/standalone/configuration/keycloak-add-user.json', restart server to load user
```

standalone設定の変更(これしておかないとnginx連携時にハマる)

```
# cp ./standalone/configuration/standalone.xml ./standalone/configuration/standalone.xml.org
# vi ./standalone/configuration/standalone.xml
# diff ./standalone/configuration/standalone.xml.org ./standalone/configuration/standalone.xml
483c483
<                 <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"/>
```

keycloakの起動

```
# ./bin/standalone.sh -b=0.0.0.0 &
```

nginxの設定

```
# cp -p nginx.conf nginx.conf.org
# vi nginx.conf
# diff nginx.conf.org nginx.conf
58,67c58,67
< #    server {
< #        listen       443 ssl http2;
< #        listen       [::]:443 ssl http2;
< #        server_name  _;
< #        root         /usr/share/nginx/html;
< #
< #        ssl_certificate "/etc/pki/nginx/server.crt";
< #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
< #        ssl_session_cache shared:SSL:1m;
< #        ssl_session_timeout  10m;
---
>     server {
>         listen       443 ssl http2;
>         listen       [::]:443 ssl http2;
>         server_name  _;
>         root         /usr/share/nginx/html;
>
>         ssl_certificate "/etc/nginx/crt.pem";
>         ssl_certificate_key "/etc/nginx/key.pem";
>         ssl_session_cache shared:SSL:1m;
>         ssl_session_timeout  10m;
69,81c69,92
< #        ssl_prefer_server_ciphers on;
< #
< #        # Load configuration files for the default server block.
< #        include /etc/nginx/default.d/*.conf;
< #
< #        error_page 404 /404.html;
< #            location = /40x.html {
< #        }
< #
< #        error_page 500 502 503 504 /50x.html;
< #            location = /50x.html {
< #        }
< #    }
---
>         ssl_prefer_server_ciphers on;
>
>         proxy_set_header Host $host;
>         proxy_set_header X-Real-IP $remote_addr;
>         proxy_set_header X-Forwarded-Host $host;
>         proxy_set_header X-Forwarded-Server $host;
>         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>         proxy_set_header X-Forwarded-Proto $scheme;
>
>         # Load configuration files for the default server block.
>         include /etc/nginx/default.d/*.conf;
>
>         error_page 404 /404.html;
>             location = /40x.html {
>         }
>
>         error_page 500 502 503 504 /50x.html;
>             location = /50x.html {
>         }
>
>         location / {
>             proxy_pass http://127.0.0.1:8080;
>         }
>    }
# vi /etc/nginx/crt.pem
# vi /etc/nginx/key.pem
```

※ proxy_set_header関連が必要。
※ crt.pemとkey.pemは各自用意。私はletsencrypt利用しているものがあったのでそれを活用。

nginxの起動

```
# systemctl start nginx
```

終わり。
これでドメインアクセスすれば開けるはず。
![img1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/c93b663d-a5b4-1f31-dc6f-a500691ff7a4.png)

Administration Console に遷移したら、作成したルート用ユーザーでログイン
![img2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/a3455d50-7459-3b29-38eb-ba7ee7c30c0d.png)
※ httpsじゃないと「We are sorry... HTTPS required」と言われ悲しい気持ちになります
※ proxy_set_header関連が正しく設定されていないと、リンクが127.0.0.1になって接続できず虚しい気持ちになります

![img3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158995/d66455f9-7814-6c14-2c4a-31ae90e81219.png)
ログイン出来たので成功です。

あとはこれから学習していきます。
以上〜