最近在研究sso,看到有推荐keycloak的,但大部分文章都是介绍开发模式,很少见到介绍生产模式的,特地做了个docker环境下keycloak生产模式的测试,验证可行。
keycloak的安装比较简单,下面是基于docker环境下的安装配置
操作系统环境:centos7.9
数据库环境:Oracle19c
1、准备工作
1.1 创建几个文件夹如下:
/test/keycloak/conf #用于映射容器的conf文件夹,配置文件就在里面
/test/keycloak/providers #存放额外的服务提供插件及相关依赖,比如用户认证流、协议映射器之类
/test/keycloak/themes #存放自定义的主题
/test/keycloak/logs #日志
/test/keycloak/certs #存放密钥库
1.2 创建一个数据库。在生产环境下,使用外部数据库比较稳妥,这里用Oracle19c容器数据库,创建一个pdb,创建一个用户。相关的表将在安装时自动创建。
1.3 使用keytool在certs文件夹创建一个keystore
keytool -genkeypair -alias 你女朋友的名字 -keystore keycloak.p12 -keyalg RSA -storepass 你女朋友的生日 -storetype pkcs12 -v
生成p12文件,keycloak规定start方式(即生产模式)启动下的实例必须开启https,所以需要用到这个文件。当然,你用openssl生成相关的密钥对也可以,keytool相对少些步骤。
1.4 拉镜像,用开发模式先启动一下
docker pull quay.io/keycloak/keycloak:22.0.3
#先用start-dev运行一下
docker run -p 8080:8080 --name keycloak -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.3 start-dev
先运行一下是为了让它生成基本的conf文件,不用自己写那么多^_^
2. 配置
2.1 把容器里的配置文件复制出来(在容器的/opt/keycloak/conf下)
docker container cp keycloak:/opt/keycloak/conf /test/keycloak/
2.2 复制完后该容器可以不要了,调整配置文件,增加如下内容:
db=oracle
db-username=数据库用户
db-password=密码
db-url=jdbc:oracle:thin:@//地址:端口/SID或者service
http-enabled=true #这是为了使用http访问登录主页,不要也行。
https-port=xxxx #指定https端口,不写就默认为8443,但在docker环境下,如果宿主8443已被占用,进行端口转换会出现控制台页面一直加载,无法访问的问题,所以这里变更了容器端口,后面映射到宿主的相同端口。
https-key-store-file=/opt/keycloak/certs/keycloak.p12 #https的证书keystore,后面给容器映射一个certs文件夹
https-key-store-password=创建keystore文件时用的密码
hostname=主机名 #指定前端主机名,生产环境中必须。
hostname-strict-backchannel=true #暴露后端主机,与前端一致,使得第三方应用可直接访问,这个在面向非私有网络时需要设置,否则外部应用无法访问后端。
hostname-admin-url=https://主机名:8086 #管理台指定url,这个不设置的话,通过http访问主页后跳转会失败,这里实际上是指定了主页上"Administration Console"的链接地址。
hostname-debug=true #辅助功能,设定后可通过http或https测试各链接是否正常,例如http://主机名/realms/master/hostname-debug
log=file #开启文件日志模式
log-file=/opt/keycloak/logs/keycloak.log #指定日志文件路径
2.3 基本配置调整完毕。这里注意,如果是在软件包环境下,还需要build一下,在docker环境下直接就可以docker run
3. 运行docker,以生产模式启动
留意设置管理员初始密码,测试的话也可以在宿主环境下先行export以免每次带参数。
docker run --name keycloak \
-p 8085:8080 \
-p 8086:8086 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
-v /test/keycloak/conf /opt/keycloak/conf \
-v /test/keycloak/providers /opt/keycloak/providers \
-v /test/keycloak/themes /opt/keycloak/themes \
-v /test/keycloak/logs /opt/keycloak/logs \
-v /test/keycloak/keycloak/certs /opt/keycloak/certs \
quay.io/keycloak/keycloak:22.0.3 \
start
4. 登录管理台,开始使用。它原生支持多语言界面,在master的本地化里加上需要的语言即可。