部署Heroku应用时如何拉取多个GitHub私有仓库作为依赖
Heroku部署时拉取多个GitHub私有仓库依赖的解决方案
方案一:使用GitHub个人访问令牌(PAT)(推荐)
无需额外自定义buildpack,操作更简便:
- 登录GitHub,进入
Settings > Developer settings > Personal access tokens页面,生成仅勾选repo权限的PAT,复制生成的令牌值。 - 进入Heroku对应应用的设置页面,找到Config Vars配置项,新增变量
GITHUB_TOKEN,值填写刚才生成的PAT。 - 修改项目package.json中的私有依赖地址,将原有SSH格式的地址
git+ssh://git@github.com/<用户名>/<仓库名>.git#<版本号>替换为HTTPS带变量的格式:git+https://${GITHUB_TOKEN}@github.com/<用户名>/<仓库名>.git#<版本号>。 - 直接使用Heroku官方Node.js buildpack构建即可,只要生成PAT的账号拥有对应私有仓库的访问权限,所有私有依赖都可以正常拉取。
方案二:使用多Deploy Key配合兼容多密钥的buildpack
如果不希望使用个人账号关联的PAT,可以采用该方案:
- 为每个需要拉取的私有GitHub仓库单独生成无密码的SSH密钥对。
- 将所有生成的私钥内容用换行拼接成完整字符串,存入Heroku应用的Config Var中,变量名可设为
GITHUB_MULTI_DEPLOY_KEYS。 - 在Heroku应用的buildpack列表中,先添加支持多SSH密钥的buildpack,再添加官方Node.js buildpack。构建时多密钥buildpack会自动将所有私钥加载到SSH代理中,拉取依赖时会自动匹配对应仓库的公钥。
- 提前将每个密钥对的公钥分别添加到对应私有仓库的Deploy Key配置中,仅勾选只读权限即可。
注意事项:
- 使用PAT方案时,不要将PAT明文写入package.json提交到代码仓库,依赖地址仅保留环境变量占位符,令牌仅存储在Heroku的配置变量中,避免权限泄露。
- 使用多Deploy Key方案时,确保私钥拼接格式正确,无多余空格或格式错误,否则会导致SSH认证失败。
内容的提问来源于stack exchange,提问作者GirkovArpa
相关产品推荐
相关产品推荐

