Docker Compose安装Keycloak
Keycloak的安装其实挺烦人的,相关文章并不多,参考也不多,很多例子都是旧版本的,随手记录下安装和配置信息吧。
使用的数据库是postgresql,假设已经有安装好的postgresql,并且默认管理员账号是postgres,那么我们先创建keycloak的用户
su - postgres
# 我们创建一个名为keycloak的pgsql用户,和名为keycloak的数据库
createuser -s -P keycloak
createdb keycloak -O keycloak
然后我们创建一个文件,docker-compose.yml
version: "3"
services:
keycloak:
image: quay.io/keycloak/keycloak:20.0
container_name: keycloak
environment:
KC_HOSTNAME: <域名,如sso.naizhao.com>
KC_HTTP_PORT: <监听的http端口,比如8080>
KC_HTTPS_PORT: <监听的http端口,比如8443>
KC_HOSTNAME_STRICT_HTTPS: true
KC_FEATURES: token-exchange
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://<pgsql的IP,比如127.0.0.1>:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: <前面创建pgsql账号时输入的密码>
KEYCLOAK_ADMIN: <管理员账号,比如admin>
KEYCLOAK_ADMIN_PASSWORD: <管理员密码>
KC_HEALTH_ENABLED: "true"
KC_LOG_LEVEL: info
KC_PROXY: edge
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/health/ready" ]
interval: 15s
timeout: 2s
retries: 15
command: start
ports:
# 这里把8080端口映射到10080,8443映射到10443,防止和服务器上其他端口冲突
- 10080:8080
- 10443:8443
如果自己没有装postgresql的话,那就在上面的文件上增加一个pgsql的实例吧,比如下面这样
version: "3"
services:
postgres:
container_name: pgsql
image: postgres:15
ports:
- "5432:5432"
volumes:
- ./database-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "user"]
interval: 30s
timeout: 20s
retries: 3
environment:
POSTGRES_USER: 'keycloak'
POSTGRES_PASSWORD: '<pgsql数据库密码>'
POSTGRES_DB: 'keycloak'
TZ: Asia/Shanghai
keycloak:
image: quay.io/keycloak/keycloak:20.0
container_name: keycloak
environment:
KC_HOSTNAME: <域名,如sso.naizhao.com>
KC_HTTP_PORT: <监听的http端口,比如8080>
KC_HTTPS_PORT: <监听的http端口,比如8443>
KC_HOSTNAME_STRICT_HTTPS: true
KC_FEATURES: token-exchange
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: <pgsql数据库密码>
KEYCLOAK_ADMIN: <管理员账号,比如admin>
KEYCLOAK_ADMIN_PASSWORD: <管理员密码>
KC_HEALTH_ENABLED: "true"
KC_LOG_LEVEL: info
KC_PROXY: edge
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/health/ready" ]
interval: 15s
timeout: 2s
retries: 15
command: start
ports:
# 这里把8080端口映射到10080,8443映射到10443,防止和服务器上其他端口冲突
- 10080:8080
- 10443:8443
depends_on:
- postgres
然后把keycloak跑起来
docker-compose up -d
然后我们修改下Caddyfile,增加一个反代
https://<域名,如sso.naizhao.com> {
encode zstd gzip
tls <改成你的邮箱,或者指定的ssl证书,又或者internal>
header / {
X-Content-Type-Options nosniff
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1; mode=block"
X-Robots-Tag all
X-Download-Options noopen
X-Permitted-Cross-Domain-Policies none
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
}
reverse_proxy {
to 127.0.0.1:10080
}
}
用这个方式跑起来的keycloak,因为经过了前端的反代,好像不需要创建keystore(好像是,没提示,不太确定)
如果需要整合AD/LDAP的话,是需要创建的。参考『Keycloak使用群晖Synology Directory Server作为AD/LDAP用户数据源』
然后,打开浏览器,使用前面配置的admin账号和密码就可以登录使用了。