image.png

通过将官方的 Keycloak 镜像做些修改,适配 Heroku PaaS 平台,就可以免费拥有自己的 Keycloak 啦!

其实在好几年前,我部署了自己的 Keycloak 实例: https://keycloak.jiwai.win 。但那时候的版本,在 Heroku 上的免费 Dyno 上还跑不起来,不得不使用了 Heroku 的 Hobby Dyno,为此每月需要花费 7 美元:
image.png

但是,我当时利用复旦大学研究生的身份,注册了 GitHub Educations 的 Student Pack,获得了 Heroku 的代金券,因此一直是处于实际上的免费使用状态。后来研究生毕业,不能再使用 GitHub 的 Student Pack,于是希望 Keycloak 可以跑在 Heroku 的免费 Dyno 上。在使用较新的镜像后,将 Dyno 类型改成了 Free 版,做了一个实验,完全可以跑起来!尽管日志会有一些报错,报怨内存超出限额,但是从用户体验角度,对此并无实际感知。

如何一键部署 Keycloak 到 Heroku

我更新了一键部署按钮,点击这个链接,即可部署 Keycloak 到 Heroku,而且由于使用的是 Free Dyno,应该不再有绑定信用卡的要求了!

https://dashboard.heroku.com/new?button-url=https%3A%2F%2Fgithub.com%2FJeff-Tian%2Fkeycloak-heroku&template=https%3A%2F%2Fgithub.com%2FJeff-Tian%2Fkeycloak-heroku

数据库

如果有自己的数据库,可以在 DATABASE_URL 处填写自己的数据库连接字符串:
image.png
如果没有,可以不用修改连接字符串,直接部署。在部署完成后,再将 Heroku 自动分配的数据库连接字符串粘贴到 DATABASE_URL 栏:

image.png

使用 Heroku 免费分配的数据库,有一些限额(比如只能有 10000 行数据),但足够用很久了。我这个 Keycloak 实例,跑了几年下来,还没有超出限额:
image.png

使用 Adminer 查看数据库

我还部署了一个 adminer (https://nameless-depths-40663.herokuapp.com/) 到 Heroku,可以方便查看数据库的情况(不限于 Keycloak 的数据库),比如:
image.png

这对应于 Keycloak 的用户,看起来,已经有很多人在我的 Keycloak 实例里注册了,感觉免费的数据库马上要不够用了……

image.png

自定义域名

使用 Keycloak 默认的域名在大多数场景下足够了,但是在和中国生态结合使用时,比如在微信生态中使用的话,就需要域名是备案过的,这时候还是得绑定自定义的备案过的域名,只需要在 Domains 下面设置一下就好:

image.png

后期工作

目前这个版本,还是使用了 JBOSS 来运行,后期可以尝试去掉 JBOSS,实现在 Heroku 上更轻量级的部署。