在一个git仓库中,我有两个独立的应用程序(Web服务器和API服务器)。
如何将每个应用程序部署到自己的Heroku应用程序?
(因此有2个heroku应用程序,一个用于Web服务器,一个用于api服务器)
注意(在标记为重复之前): 有几个类似的问题。大多数处理将一个应用程序部署到两个 heroku应用程序 - 通常用于登台与生产。我希望将两个应用部署到两个 heroku应用。 (Question about staging vs prod)
答案 0 :(得分:13)
我对你的问题的理解是你有一个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>
来执行此操作。 注意:--remote
标志会告诉Heroku为同一个仓库中的每个应用创建一个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
运行的命令类型,以及您希望拥有的每个命令的实例数。
希望这有帮助!
答案 1 :(得分:7)
遗憾的是solution suggested by rdegges不再有用了。参见:
来自Heroku documentation的Web进程类型很特殊,因为它是唯一可以从Heroku的路由器接收HTTP流量的进程类型。其他流程类型可以任意命名。
。因此,您无法在Procfile中使用api
和web
来展示网络应用。
解决这个问题的正确方法是使用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进行详细说明。