如何在同一个GCP项目中混合部署Cloud Run和App Engine应用?
问题解决方式
一、当前GAE部署报错的快速修复
你遇到的报错是因为首次在GCP项目中部署App Engine应用时,平台强制要求第一个上传的服务必须命名为default,你当前配置里自定义的morph-keycloak-service不符合首次部署要求,两种修复方案可选:
- 方案1:先部署一个极简的
default服务占坑,比如简单的静态页服务或空服务,部署完成后再上传你自定义名称的Keycloak服务即可 - 方案2:直接修改Keycloak目录下
app.yaml中的service字段值为default,完成首次部署后,后续再新增其他GAE服务时即可使用自定义命名
二、更合理的部署方案推荐
首先纠正一个常见认知偏差:Keycloak从17版本开始切换为Quarkus作为底层发行版,只要将所有状态存储在外置数据库中,完全支持无状态部署在Cloud Run上,不需要强行切换到GAE部署,方案优势如下:
- 技术栈统一,你现有Quarkus应用已经跑在Cloud Run上,不需要额外学习GAE的配置规则,运维成本更低
- 可以直接复用现有Cloud SQL的连接配置、IAM权限规则,和你的Quarkus应用共用同一个Cloud SQL实例,只需要给Keycloak单独创建数据库即可,避免数据冲突
Cloud Run部署Keycloak核心配置要点:
- 基于官方Keycloak Quarkus基础镜像构建自定义镜像,通过环境变量指定数据库连接地址为你的Cloud SQL实例,开启数据库持久化存储,关闭本地有状态缓存配置
- 给Cloud Run服务账号配置Cloud SQL访问权限,和你现有Quarkus应用的权限配置保持一致即可
三、坚持使用GAE部署的注意事项
如果确定要继续用GAE部署Keycloak,需要额外完成以下配置:
- 配置Cloud SQL代理或者VPC连接器,确保GAE服务网络可以访问到你的Cloud SQL实例
- 为Keycloak单独创建数据库和专属数据库账号,不要和现有Quarkus应用混用同一个库,避免表结构冲突
- 不需要删除占坑的
default服务,保留极简版本即可,不影响其他自定义服务的正常运行
内容的提问来源于stack exchange,提问作者johnniepop
相关产品推荐
相关产品推荐

