在一个git仓库中,我有两个独立的应用程序(Web服务器和API服务器)。
如何将每个应用程序部署到自己的Heroku应用程序?
(因此有2个heroku应用程序,一个用于Web服务器,一个用于api服务器)
注意(在标记为重复之前): 有几个类似的问题。大多数处理部署 一 应用到 二 heroku应用程序 - 通常用于分段与生产。我正在寻求部署 二 应用程序 二 heroku应用程序。 (关于升级与生产的问题)
在一个git仓库中,我有两个独立的应用程序(Web服务器和API服务器)。
如何将每个应用程序部署到自己的Heroku应用程序?
(因此有2个heroku应用程序,一个用于Web服务器,一个用于api服务器)
注意(在标记为重复之前): 有几个类似的问题。大多数处理部署 一 应用到 二 heroku应用程序 - 通常用于分段与生产。我正在寻求部署 二 应用程序 二 heroku应用程序。 (关于升级与生产的问题)
我对你的问题的理解是你有一个Git存储库,它包含两个完全独立的程序:一个API服务器和一个Web服务器。
记住这个假设,这是你想要做的,一步一步:
Procfile
在项目的根目录。这将告诉Heroku如何运行您的Web服务器和您的API服务器。以下是您可能想要的方式 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服务。
创建两个新的Heroku应用程序。你可以通过运行来做到这一点 heroku create <desired-app-name> --remote <desired-app-name>
多次。 注意:The --remote
flag将告诉Heroku为同一个repo中的每个应用程序创建一个Git遥控器。
接下来,您需要告诉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
这些命令将:
如您所见,使用 ps:scale
命令你可以控制Heroku将从你的命令运行什么类型的命令 Procfile
,以及你想拥有多少个实例。
希望这有帮助!
我对你的问题的理解是你有一个Git存储库,它包含两个完全独立的程序:一个API服务器和一个Web服务器。
记住这个假设,这是你想要做的,一步一步:
Procfile
在项目的根目录。这将告诉Heroku如何运行您的Web服务器和您的API服务器。以下是您可能想要的方式 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服务。
创建两个新的Heroku应用程序。你可以通过运行来做到这一点 heroku create <desired-app-name> --remote <desired-app-name>
多次。 注意:The --remote
flag将告诉Heroku为同一个repo中的每个应用程序创建一个Git遥控器。
接下来,您需要告诉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
这些命令将:
如您所见,使用 ps:scale
命令你可以控制Heroku将从你的命令运行什么类型的命令 Procfile
,以及你想拥有多少个实例。
希望这有帮助!
该 rdegges建议的解决方案 不幸的是不再工作了。看到:
Web进程类型是特殊的,因为它是唯一将从Heroku的路由器接收HTTP流量的进程类型。其他过程类型可以任意命名。
来自 Heroku文档。所以你将无法拥有 api
和 web
在Procfile中都暴露了Web应用程序。
解决这个问题的正确方法是使用Heroku团队提供的这个buildpack: Heroku Multi Procfile buildpack:
想象一下,你有一个代码库,其中有几个不同的应用程序......或者至少能够运行一些代码库 不同的应用。或者,也许你是谷歌的单声道回购?
无论如何,你如何在Heroku上管理这个?你没有。 Heroku的 应用程序假设一个repo到一个应用程序。
输入Multi Procfile buildpack,每个应用程序都获得一个Procfile!
我已经在使用纱线工作区(一个仓库中有多个Node和React应用程序)的存储库上使用这个buildpack多个月了,一切正常。