在一个git仓库中,我有两个独立的应用程序(网络服务器和API服务器)。
我该如何将每个应用程序部署到自己的Heroku应用程序上?
(因此有2个heroku应用程序,一个用于web服务器,一个用于api服务器)
注意(在标记为重复之前):有几个类似的问题。大多数涉及将一个应用程序部署到两个 Heroku 应用程序上-通常是为了分别进行演示和生产。我要部署 两个 应用程序到两个 heroku 应用程序上。(关于演示与生产的问题)
在一个git仓库中,我有两个独立的应用程序(网络服务器和API服务器)。
我该如何将每个应用程序部署到自己的Heroku应用程序上?
(因此有2个heroku应用程序,一个用于web服务器,一个用于api服务器)
注意(在标记为重复之前):有几个类似的问题。大多数涉及将一个应用程序部署到两个 Heroku 应用程序上-通常是为了分别进行演示和生产。我要部署 两个 应用程序到两个 heroku 应用程序上。(关于演示与生产的问题)
rdegges提供的解决方案不幸地已经无法使用了。请参阅:
Web进程类型是特殊的,因为它是唯一会接收来自Heroku路由器的HTTP流量的进程类型。其他进程类型可以以任意名称命名。
来自Heroku文档。因此,您将无法在Procfile中同时公开Web应用程序的api
和web
。
正确解决此问题的方法是使用Heroku团队提供的这个构建包:Heroku Multi Procfile buildpack:
假设您有一个单一的代码库,其中包含几个不同的应用程序...或者至少具有运行几个不同应用程序的能力。或者,您是Google,有自己的单仓库?
在任何情况下,您如何在Heroku上管理此问题?您不需要这样做。Heroku应用程序假定一个仓库对应一个应用程序。
进入Multi Procfile构建包,每个应用程序都有一个Procfile!
我已经在使用yarn工作区(一个仓库中有多个Node和React应用程序)的存储库上多月使用此构建包,一切正常。
我理解你的问题是,你有一个Git仓库,其中包含两个完全独立的程序:一个API服务器和一个Web服务器。
在这个前提下,以下是你需要逐步执行的操作:
Procfile
。这将告诉Heroku如何运行你的Web服务器和API服务器。以下是你可能想要的Procfile
样例:
web: node web/index.js
api: node api/index.js
web
,另一个叫做api
。对于每一个dyno,你都需要告诉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
的命令类型以及每种命令实例的数量。
希望这能帮到你!
git push heroku-api master; git push heroku-web master;
它会将你的代码部署到两个项目中 =) 而不是通常的 git push heroku master
,因为现在你有了两个远程仓库: heroku-web
和 heroku-api
。希望这样讲可以让你明白! - rdeggesnpm install
来实现。虽然不是完美的,但我不知道如何在推送时执行此操作。 - Piotr Budaheroku 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
git subtree push
强制推送? - Dorki由于Heroku不允许有多个Procfile,并且它应该只有一个web
键用于HTTP流量和端口分配。因此,这就是我如何克服这个限制的方法(通过环境变量进行动态入口点)
假设我们有两个Heroku应用程序,请为每个应用程序的每个入口点定义一个环境变量。
创建Procfile
并包含以下内容:
web: npm run start-heroku
"start-heroku": "node heroku.js",
heroku.js
文件,并添加以下内容const Path = require('path')
require(Path.join(__dirname, process.env.INDEX_PATH))
Procfile (web)
,该文件将执行 heroku.js
并根据 INDEX_PATH
环境变量启动目标应用程序!"scripts": {
"start": "node app.js",
"publishheroku": "cd ../../ && git subtree push --prefix nodeapps/appone heroku-app-one master || true"
},
然后你可以运行npm run-script publishheroku
进行部署。
另外,请查看link以获取详细说明。
我遇到了类似的问题。在我的情况下,我有一个单一的 GitHub 存储库,其中包含一个 React 前端文件夹和另一个 API 文件夹。
经过一番搜索,我找到了一个构建包,可以让我在 Heroku 上部署子文件夹。我使用了这个构建包,并在 Heroku 上创建了几个项目,以部署 API 和 React 前端。
该构建包是 https://github.com/timanovsky/subdir-heroku-buildpack
我在下面的文章中写了一篇详细的步骤文章,附带截图。
PROCFILE
是一个环境变量。您可以在 Heroku 文档中了解更多信息:https://devcenter.heroku.com/articles/config-vars#managing-config-vars 您需要拥有两个 Heroku 应用程序,一个用于前端,一个用于后端,并分别将PROCFILE
环境变量设置为每个 Procfile 的路径。我在这里写了一篇更详细的文章:https://medium.com/inato/how-to-setup-heroku-with-yarn-workspaces-d8eac0db0256如果有帮助,请告诉我。 - laugri