从相同的git仓库部署两个单独的heroku应用程序

时间:2017-01-04 10:25:38

标签: git heroku

在一个git仓库中,我有两个独立的应用程序(Web服务器和API服务器)。

如何将每个应用程序部署到自己的Heroku应用程序?

(因此有2个heroku应用程序,一个用于Web服务器,一个用于api服务器)

注意(在标记为重复之前): 有几个类似的问题。大多数处理将一个应用程序部署到两个 heroku应用程序 - 通常用于登台与生产。我希望将两个应用部署到两个 heroku应用。 (Question about staging vs prod

4 个答案:

答案 0 :(得分:13)

我对你的问题的理解是你有一个Git存储库,它包含两个完全独立的程序:一个API服务器和一个Web服务器。

考虑到这一假设,这就是你想要做的,一步一步:

  1. 进入项目文件夹。
  2. 在项目的根目录中定义Procfile。这将告诉Heroku如何运行您的Web服务器和您的API服务器。
  3. 以下是您希望Procfile查看的示例(示例):

    web: node web/index.js
    api: node api/index.js
    

    在上面的例子中:我正在定义两种类型的Heroku dynos - 一种叫做web,一种叫api。对于每一个,您需要告诉Heroku运行什么命令来启动适当的服务器。在此示例中,我将运行node web/index.js来启动我的网站,并node api/index.js启动我的API服务。

    1. 创建两个新的Heroku应用程序。您可以多次运行heroku create <desired-app-name> --remote <desired-app-name>来执行此操作。 注意--remote标志会告诉Heroku为同一个仓库中的每个应用创建一个Git遥控器。

    2. 接下来,您需要告诉Heroku在一个Heroku应用上运行您的实际Web应用程序,并在另一个Heroku应用程序上运行您的API服务。您可以使用Heroku CLI执行此操作:

      $ heroku ps:scale web=1 --remote webserver-app-name
      $ heroku ps:scale api=1 --remote apiserver-app-name
      
    3. 这些命令将:

      • 为您的网络服务器Heroku app运行单个网络dyno。
      • 为您的apiserver Heroku应用运行一个API dyno。

      正如您在上面所看到的,使用ps:scale命令可以控制Heroku将从Procfile运行的命令类型,以及您希望拥有的每个命令的实例数。

      希望这有帮助!

答案 1 :(得分:7)

遗憾的是solution suggested by rdegges不再有用了。参见:

  

Web进程类型很特殊,因为它是唯一可以从Heroku的路由器接收HTTP流量的进程类型。其他流程类型可以任意命名。

来自Heroku documentation

。因此,您无法在Procfile中使用apiweb来展示网络应用。

最新解决方案

解决这个问题的正确方法是使用Heroku团队提供的这个buildpack:Heroku Multi Procfile buildpack

  

想象一下,你有一个代码库,其中有一些不同的应用程序...或者至少能够运行一些   不同的应用。或者,也许您使用单声道回购谷歌?

     

无论如何,你如何在Heroku上管理这个?你没有。 Heroku的   应用程序假设一个repo到一个应用程序。

     

输入Multi Procfile buildpack,每个应用程序都有一个Procfile!

我已经在使用纱线工作区(一个仓库中有多个Node和React应用程序)的存储库上使用这个buildpack多个月了,一切正常。

答案 2 :(得分:1)

当您必须分离应用程序时,只需将存储库子树推入每个子树即可。

一次设置遥控器

heroku git:remote --remote heroku-client -a client-app
heroku git:remote --remote heroku-server -a server-app

然后您可以通过将子树推送到远程来进行部署

git subtree push --prefix client heroku-client master
git subtree push --prefix server heroku-server master

(其中--prefix指向应用程序的根文件夹)

答案 3 :(得分:0)

我们可以添加到自定义脚本中,以将git目录中的特定文件夹部署到package.json文件中的npm脚本中。检查package.json文件中的以下代码

"scripts": {
    "start": "node app.js",
    "publishheroku": "cd ../../ && git subtree push --prefix nodeapps/appone heroku-app-one master || true"
  },

然后您可以运行npm run-script publishheroku进行部署。

另外,请通过此link进行详细说明。