Heroku:如何部署包含私有仓库依赖的NodeJS应用?
Heroku 授予单私有仓库只读权限部署方案
方案1:私有Git仓库作为依赖的场景
- 首先在本地生成专属SSH密钥对,执行命令:
ssh-keygen -t ed25519 -C "heroku-app-private-repo-access"
注意生成时不要覆盖本地现有SSH密钥,且不要设置密码(Heroku构建过程无法交互式输入密钥密码),最终会得到公钥(后缀为.pub)和私钥两个文件。 - 打开私有Git仓库的设置界面,找到「部署密钥(Deploy Key)」配置入口,将上一步生成的公钥内容粘贴进去,务必勾选只读权限,不要开启写入权限。
- 将生成的私钥内容配置为Heroku应用的环境变量,可通过Heroku CLI执行命令:
heroku config:set GIT_SSH_KEY="$(cat /本地路径/生成的私钥文件名)"
也可以直接在Heroku应用后台的设置页手动添加该配置变量。 - 在项目根目录新建
.profile.d文件夹,在文件夹内创建setup-ssh.sh脚本,内容如下:
#!/bin/sh mkdir -p ~/.ssh echo "$GIT_SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 # 如果使用非GitHub的Git托管平台,将下方github.com替换为对应平台的域名即可 ssh-keyscan github.com >> ~/.ssh/known_hosts
将该脚本提交到Git仓库,Heroku构建时会自动执行该脚本配置SSH环境,拉取依赖时就会通过对应密钥完成身份验证。
方案2:私有npm registry包作为依赖的场景
- 到对应npm私有仓库的后台生成该私有包的只读访问令牌。
- 将生成的令牌配置为Heroku应用的环境变量
NPM_TOKEN。 - 在项目根目录新建
.npmrc文件,写入内容://registry.npmjs.org/:_authToken=${NPM_TOKEN}
如果使用的是第三方私有npm registry,将URL替换为对应registry的地址即可。将该.npmrc文件提交到Git仓库,构建时npm会自动读取环境变量中的令牌拉取私有包,不会泄露明文凭据。
注意事项
- 所有敏感凭据(私钥、令牌)都不要明文提交到代码仓库,统一通过Heroku的配置变量存储,Heroku会对配置变量做加密处理,不会对外暴露。
- 部署密钥仅绑定单个私有仓库,且仅授予只读权限,即使出现密钥泄露也只会影响单个仓库,风险可控。
内容的提问来源于stack exchange,提问作者GirkovArpa
相关产品推荐
相关产品推荐

