同一Node.js代码库部署两个Heroku Express应用方案咨询
部署共享代码库的两个Express应用到Heroku
这其实是Heroku上非常常见的场景,我来一步步给你拆解操作流程:
1. 创建两个独立的Heroku应用
首先得在Heroku平台上分别创建两个应用实体,你可以通过Heroku CLI或者网页控制台完成:
- 用CLI的话,运行以下命令(把名称换成你自己的专属命名):
执行后Heroku会自动为每个应用分配唯一的访问域名。heroku create my-app-primary heroku create my-app-secondary
2. 给本地Git仓库关联两个Heroku远程
因为你的代码托管在一个中央Git仓库,需要让这个仓库同时关联两个Heroku远程地址,这样就能分别推送代码到不同的应用:
- 先查看当前已有的远程仓库:
git remote -v - 添加第一个Heroku远程:
git remote add heroku-primary https://git.heroku.com/my-app-primary.git - 添加第二个Heroku远程:
再次运行git remote add heroku-secondary https://git.heroku.com/my-app-secondary.gitgit remote -v就能确认两个远程都已添加成功。
3. 为每个应用配置专属环境变量
这是区分两个应用的核心环节,你需要给每个Heroku应用设置独有的环境变量,用来触发代码里的差异逻辑:
- 给第一个应用设置变量(示例):
heroku config:set APP_ENV=production ENABLE_PAYMENT=true --app my-app-primary - 给第二个应用设置不同的变量:
在你的Express代码里,直接通过heroku config:set APP_ENV=staging ENABLE_PAYMENT=false --app my-app-secondaryprocess.env.APP_ENV、process.env.ENABLE_PAYMENT这类方式读取变量,就能实现分支逻辑了。
4. 分别推送代码到两个应用
当你更新代码后,只需要推送到对应的Heroku远程即可完成部署:
- 部署到第一个应用(假设你的主分支是
main,如果是master就替换成对应名称):git push heroku-primary main:main - 部署到第二个应用:
git push heroku-secondary main:main
实用小贴士
- 如果你本地用
.env文件做开发测试,一定要把.env加入.gitignore,绝对不要提交到Git仓库,线上环境直接依赖Heroku的配置变量即可,避免敏感信息泄露。 - 如果需要批量设置环境变量,可以把变量写入一个文本文件(比如
env-prod.txt),然后用heroku config:push --file env-prod.txt --app my-app-primary一键导入。 - 后续修改环境变量后,Heroku会自动重启应用让新配置生效,不需要额外操作。
这样操作下来,两个应用就共享同一代码库,通过环境变量实现差异逻辑,各自独立运行在Heroku平台上了。
内容的提问来源于stack exchange,提问作者Mike Miller
相关产品推荐
相关产品推荐

