在一个git repo中,我有两个独立的应用程序(Web服务器和API服务器).
如何将每个应用程序部署到自己的Heroku应用程序?
(因此有2个heroku应用程序,一个用于Web服务器,一个用于api服务器)
注意(在标记为重复之前): 有几个类似的问题.大多数处理将一个应用程序部署到两个 heroku应用程序 - 通常用于分段与生产.我希望将两个应用程序部署到两个 heroku应用程序.(关于升级vs prod的问题)
rde*_*ges 14
我对你的问题的理解是你有一个Git存储库,它包含两个完全独立的程序:一个API服务器和一个Web服务器.
记住这个假设,这是你想要做的,一步一步:
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服务.
创建两个新的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
Run Code Online (Sandbox Code Playgroud)这些命令将:
正如您在上面所看到的,使用该ps:scale命令可以控制Heroku将从您运行的命令类型Procfile,以及您希望拥有的每个命令的实例数.
希望这有帮助!
lau*_*gri 11
不幸的是,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多个月了,一切正常.
当您必须分离应用程序时,您可以简单地将存储库子树推送到每个应用程序。
设置遥控器一次
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 指向应用程序的根文件夹)
| 归档时间: |
|
| 查看次数: |
10361 次 |
| 最近记录: |