在docker上以production模式部署keycloak身份认证系统

keycloak简介

keycloak是一个开源的进行身份认证和访问控制的软件,由Red Hat基金会开发,我们可以使用keycloak方便的向应用程序和安全服务添加身份认证,非常的方便。目前网上和官网的教程都是以dev模式搭建的,下面记录一下我在docker上以production模式搭建keycloak的过程

keycloak安装

准备https证书

keycloak在production模式下必须使用https,所以需要准备好https证书

Keycloak can be configured to load the required certificate infrastructure using files in PEM format or from a Java Keystore. When both alternatives are configured, the PEM files takes precedence over the Java Keystores.

官方文档 显示keycloak支持pem格式的证书或者java keystore文件,我这边选用的是自签名的java keystore模式。

keytool -genkey -alias keycloak -keyalg RSA -keystore keystore.jks -keysize 2048 -validity 36500 -storepass changeit

使用上面的命令生成一个名为keystore.jks的java keystore文件,它的口令是changeit,你可以通过-storepass参数指定其他的口令,需要记住这个口令,后面要放到配置文件里。期间会让你输入姓名、组织单位、地区等信息。姓名记得写你要部署的keycloak服务的域名或者ip信息,比如你需要通过keycloak.yourdomain.com来访问你的keycloak服务,则姓名就填写keycloak.yourdomain.com。 更多keytool用法可参考 这篇文章

准备挂载目录和配置文件

准备一个目录用于挂载,里面存放keycloak的配置文件、https证书、日志之类的

mkdir -p keycloak/conf
mkdir -p keycloak/logs

将keystore.jks放到conf文件夹下。在conf目录下面新建keycloak.conf配置文件,内容如下

#数据库支持pg、mysql、mariadb等
db=mariadb
db-username=dbUsername
db-password=dbPassword
db-url=jdbc:mariadb://192.168.50.80:3306/keycloak

https-port=443
https-key-store-file=/opt/keycloak/conf/keystore.jks
#这个是keystore.jks的口令
https-key-store-password=changeit

#这个hostname需要和生成keystore文件时让你输入的姓名一致
hostname=keycloak.starcloud.cc

log=console,file
log-file=/opt/keycloak/logs/keycloak.log

更多配置可以参考 官方文档

拉取镜像并启动容器

在docker run命令里指定两个环境变量KEYCLOAK_ADMIN和KEYCLOAK_ADMIN_PASSWORD作为初始的管理员用户名和密码

docker pull quay.io/keycloak/keycloak:21.1.1
docker run -d\
  --name='keycloak'\
  --net='br0'\
  --ip='192.168.50.55'\
  -e 'KEYCLOAK_ADMIN'='admin'\
  -e 'KEYCLOAK_ADMIN_PASSWORD'='123456'\
  -v '/mnt/user/appdata/keycloak/conf':'/opt/keycloak/conf/':'rw'\
  -v '/mnt/user/appdata/keycloak/logs':'/opt/keycloak/logs':'rw' 'quay.io/keycloak/keycloak:21.1.1' start

至此keycloak服务部署完成,keycloak的使用方法我这边就不多介绍了,网上资料很多。