提问者:小点点

将服务器部署到heroku的dev和prod


我有一个Heroku应用程序已经准备就绪并正在工作,它连接到我的github repo,我在Node.js(准确地说是NestJS)服务器项目上有一个procfile。 现在发生的情况是,每次我推动我的回购项目,heroku部署服务器时:

web npm run start:prod

作为CI/CD过程的一部分,我的目标是创建两个已部署的服务器:

  1. 当向development分支推送时-在这种情况下,运行开发服务器版本
  2. 当向master分支进行推送时,并在这种情况下部署生产服务器(2个不同的服务器)。

我的问题是,实现这一点的方法是什么?

我想我应该创建另一个Heroku应用程序,并将其连接到我的repo的开发分支,但是我如何确保在这里我运行的是一个开发版本呢? 我是否应该在这些分支上保存两个不同的procfile? 我真的必须创建另一个Heroku应用程序吗?还是有更好的方法来解决这个问题?


共1个答案

匿名用户

理想情况下,您永远不应该将应用程序的development版本部署到公共环境中,因为它可能会暴露安全性中的缺陷,这些缺陷以后会在生产服务器上被利用。

您可能正在谈论的是我们所说的staging环境。 它是一个与production配置完全相同的环境,但是我们在将代码部署到production之前对其进行测试。

就Heroku而言--是的,您实际上需要两个Heroku应用程序--一个用于生产,一个用于分段

请注意,staging环境应该使用node_env=production运行。

在CI/CD方面,我已经配置了我的CD,以便根据对哪个分支进行推送来部署到不同的Heroku应用程序。 development转到我们的staging应用程序,master转到我们的production应用程序。 (不过为了简单起见,我将分支重命名为stagingproduction:d)。

我不能为GitHub操作提供一个现成的脚本,因为我使用的是GitLab,尽管CI/CD在这方面非常相似,但也有细微的区别,但是GitHub操作应该有if条件,其工作方式类似于:

if: github.ref == 'refs/heads/master'
 - dpl --provider=heroku --strategy=api --app=$HEROKU_PROD_APP_NAME --api-key=$HEROKU_PROD_API_KEY

此外,您不应该需要两个procfile,因为如果您希望确保代码在生产中的行为相同,则应该对环境进行相同的配置。