keycloak是一个开源的进行身份认证和访问控制的软件。用作统一身份认证,身份认证,社交登录等,功能十分强大。自keycloak17,使用其需要Java11。
远程服务器部署
下载Keycloak,keyclaok16.1.1下载链接。下载完解压。 下面是使用H2数据库,如果想用mysql数据库可以参考这篇博客修改文件keycloak9.0.2单机模式整合mysql8
# 切换目录解压
tar -zxvf keycloak-16.1.1.tar.gz
# 后台启动
# -Djboss.socket.binding.port-offset=100 默认端口8080,设置端口偏移,8180
# -Djboss.bind.address={服务器ip} keyclaok是使用localhost(127.0.0.1)的,想要远程访问 需要设置ip
nohup {实际位置}/keycloak-16.1.1/bin/standalone.sh -Djboss.socket.binding.port-offset=100 -Djboss.bind.address={服务器ip} > {实际位置}/keycloak-16.1.1/keycloak.log 2>&1 &
如果启动失败,可能还需要修改\standalone\configuration\standalone.xml
里的ip(我用云服务器有内外网ip时出现,使用内网ip)
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>
keycloak 单机模式下初始化系统账号密码,不能用localhost访问的时候,只能命令行初始化 用户
./bin/add-user-keycloak.sh -r master -u admin -p admin
点击Administration Console 进入登录页面,会提示HTTPS required,在master的realm没有设置ssl为none,也使用命令行
#登录
./kcadm.sh config credentials --server http://{ip}:{port}/auth --realm master --user admin
# 设为none
./kcadm.sh update realms/master -s sslRequired=NONE
可以开始愉快的使用了
Dockerbu部署
可参考官方文档keycloak-containers
docker run -e KEYCLOAK_USER=<USERNAME> -e KEYCLOAK_PASSWORD=<PASSWORD> -p 8180:8080 jboss/keycloak:16.1.1
还可以使用mysql而非默认的h2。
创建用户定义的网络
docker network create keycloak-network
启动 MySQL 实例
首先使用 MySQL docker 镜像启动一个 MySQL 实例:
docker run --name mysql -d --net keycloak-network -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=root_password mysql
启动 Keycloak 实例
启动 Keycloak 实例并连接到 MySQL 实例:
docker run --name keycloak --net keycloak-network jboss/keycloak:16.1.1
如果您为 MySQL 实例使用不同的名称,则mysql需要指定DB_ADDR环境变量。
实例中还有其他数据库连接使用
使用mysql的docker-compose示例
version: '3'
volumes:
mysql_data:
driver: local
services:
mysql:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: password
keycloak:
image: quay.io/keycloak/keycloak:legacy
environment:
DB_VENDOR: MYSQL
DB_ADDR: mysql
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: Pa55w0rd
# Uncomment the line below if you want to specify JDBC parameters. The parameter below is just an example, and it shouldn't be used in production without knowledge. It is highly recommended that you read the MySQL JDBC driver documentation in order to use it.
#JDBC_PARAMS: "connectTimeout=30000"
ports:
- 8080:8080
depends_on:
- mysql
在这个项目里也有其他数据库的docker-compose示例