如何在Docker Compose的Keycloak中集成Discord扩展并自动化部署
实现Keycloak Discord插件自动化部署方案
针对你的需求,有两种可靠方案可以实现插件的自动化管理,无需手动安装,切换服务器时直接部署即可:
方案一:自定义Keycloak镜像(推荐,稳定无依赖)
将插件jar打包到自定义Docker镜像中,每次部署直接使用包含插件的镜像,彻底消除手动操作。
1. 仓库目录结构调整
在你的GitHub仓库根目录创建以下结构:
your-repo/ ├── docker-compose.yml ├── Dockerfile └── plugins/ ├── keycloak-discord.jar └── keycloak-discord-roles-sync.jar
- 手动下载对应Keycloak 16.1.1版本的插件jar放入
plugins目录(注意找兼容16.x的版本,比如keycloak-discord的16.0.0版本);也可以通过GitHub Workflow自动下载(见后续步骤)。
2. 编写Dockerfile
创建Dockerfile,基于你当前使用的Keycloak镜像,复制插件到部署目录:
# 基于现有Keycloak镜像 FROM jboss/keycloak:16.1.1 # 将插件复制到Keycloak自动部署目录 COPY plugins/*.jar /opt/jboss/keycloak/standalone/deployments/
3. 修改docker-compose.yml
替换原有image字段为自定义镜像地址(或本地构建):
keycloak: container_name: keycloak # 替换为你的GitHub Packages/Docker Hub镜像地址 image: ghcr.io/[你的GitHub用户名]/keycloak-with-discord-plugins:latest # 本地调试可使用build: .,CI/CD场景推荐远程镜像 # build: . environment: # 保留原有所有环境变量 DB_VENDOR: postgres DB_ADDR: postgres DB_PORT: temp ... # 保留其他配置(healthcheck、labels、restart等)
4. 配置GitHub Workflow自动构建部署
在.github/workflows/deploy-keycloak.yml添加以下内容,实现push主分支时自动构建镜像并部署到VPS:
name: Build and Deploy Keycloak with Plugins on: push: branches: [ main ] jobs: build-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 # 可选:自动下载兼容版本的插件(替代手动上传) - name: Download Discord Auth Plugin run: | mkdir -p plugins wget -O plugins/keycloak-discord.jar https://github.com/wadahiro/keycloak-discord/releases/download/16.0.0/keycloak-discord-16.0.0.jar - name: Download Discord Roles Sync Plugin run: | # 替换为对应16.x版本的jar下载地址 wget -O plugins/keycloak-discord-roles-sync.jar https://github.com/kywan/keycloak-discord-roles-sync/releases/download/[兼容版本号]/[jar文件名].jar # 构建自定义镜像 - name: Build Docker Image run: docker build -t ghcr.io/[你的GitHub用户名]/keycloak-with-discord-plugins:latest . # 登录GitHub Packages - name: Login to GitHub Packages uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # 推送镜像到GitHub Packages - name: Push Image run: docker push ghcr.io/[你的GitHub用户名]/keycloak-with-discord-plugins:latest # 部署到VPS - name: Deploy to VPS uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} # 推荐用SSH密钥,比密码安全 script: | cd /path/to/your/docker-compose-directory docker-compose pull keycloak docker-compose up -d keycloak
5. 配置仓库Secrets
在GitHub仓库的「Settings」→「Secrets and variables」→「Actions」中添加以下变量:
VPS_HOST:你的VPS IP或域名VPS_USER:VPS登录用户名VPS_SSH_KEY:VPS的SSH私钥(公钥需提前添加到VPS的~/.ssh/authorized_keys)
方案二:挂载卷+Workflow同步插件(轻量,无需构建镜像)
通过Docker挂载本地目录到Keycloak的部署目录,再通过Workflow将仓库中的插件同步到服务器,重启容器即可生效。
1. 修改docker-compose.yml
添加卷挂载,将本地目录映射到Keycloak的插件部署目录:
keycloak: container_name: keycloak image: jboss/keycloak:16.1.1 environment: # 保留原有环境变量 ... volumes: # 挂载本地插件目录到Keycloak部署目录 - ./keycloak-plugins:/opt/jboss/keycloak/standalone/deployments/ # 保留其他配置
2. 仓库添加插件文件
在仓库根目录创建keycloak-plugins目录,放入两个插件的jar文件。
3. 配置GitHub Workflow同步部署
创建.github/workflows/sync-plugins.yml:
name: Sync Plugins and Restart Keycloak on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 # 同步插件到VPS的挂载目录 - name: Sync Plugins to VPS uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} source: "keycloak-plugins/*" target: "/path/to/your/docker-compose-directory/keycloak-plugins/" # 重启Keycloak容器加载新插件 - name: Restart Keycloak uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} script: | cd /path/to/your/docker-compose-directory docker-compose restart keycloak
注意事项
- 插件版本兼容性:必须使用与Keycloak 16.1.1兼容的插件版本,否则会导致Keycloak启动失败。
- 验证插件加载:启动后登录Keycloak管理控制台,检查是否出现Discord认证提供商和角色同步的配置选项。
- SSH密钥安全:优先使用SSH密钥而非密码进行VPS登录,避免密码泄露风险。
内容的提问来源于stack exchange,提问作者Nullified
相关产品推荐
相关产品推荐

