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

Don*_*n P 14 git heroku

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

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

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

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

rde*_*ges 14

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

记住这个假设,这是你想要做的,一步一步:

  1. 进入你的项目文件夹.
  2. Procfile在项目的根目录定义a .这将告诉Heroku如何运行您的Web服务器和您的API服务器.

以下是您可能希望Procfile看到的内容(示例):

web: node web/index.js
api: node api/index.js
Run Code Online (Sandbox Code Playgroud)

在我上面的例子中:我正在定义两种类型的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
    
    Run Code Online (Sandbox Code Playgroud)

这些命令将:

  • 为您的网络服务器Heroku应用程序运行单个web dyno.
  • 为您的apiserver Heroku应用程序运行单个API dyno.

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

希望这有帮助!

  • @rdegges这对我不起作用,因为Heroku说没有'web进程类型'.我怎么能告诉Heroku,例如,`api`是我的应用程序的Web进程类型? (3认同)
  • 啊,当您想推动桅杆分支时,您将执行以下操作:`git push heroku-api master; git push heroku web master;将其部署到两个项目中=)而不是通常的`git push heroku master`,而是这样做,因为现在有了两个`heroku`遥控器,而不是`heroku`遥控器。 `和`heroku-api`。希望有道理! (2认同)
  • 看来 Heroku 最近改变了他们的行为。这曾经奏效。看起来现在这样做需要您完全拥有两个单独的 Procfile。 (2认同)

lau*_*gri 11

不幸的是,rdegges建议解决方案不再适用.看到:

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

来自Heroku文档.所以,你将不能够有apiweb在Procfile都暴露Web应用程序.

最新的解决方案

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

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

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

进入Multi Procfile buildpack,每个应用程序都获得一个Procfile!

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


far*_*ncz 6

当您必须分离应用程序时,您可以简单地将存储库子树推送到每个应用程序。

设置遥控器一次

heroku git:remote --remote heroku-client -a client-app
heroku git:remote --remote heroku-server -a server-app
Run Code Online (Sandbox Code Playgroud)

然后你可以通过推送子树到远程部署

git subtree push --prefix client heroku-client master
git subtree push --prefix server heroku-server master
Run Code Online (Sandbox Code Playgroud)

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