有没有办法在Heroku上同时在同一个dyno上部署SSR nodejs应用程序和Golang应用程序



我有一个带有JS和index.html的SPA(单页应用程序(。

我正在/public目录的后端Golang应用程序中提供它

我正在Heroku上部署这个Golang应用程序:一切正常!

现在我正在使用Svelte Kit(或者NextJS,我仍然需要决定(构建一个SSR(服务器端渲染(应用程序。

给定

SSR应用程序是一个NodeJS应用程序,它需要一个专用的Heroku dyno:我想我不能像现在这样从/public目录中提供它。

抛开专用dyno的额外成本不谈,现在还有提供的额外延迟的新问题

  1. 前端SSR应用程序(在frontend.herokuapp.com上(需要调用backend.herokuapp.com

  2. 新的CORS调用不同的域

问题

有没有办法在同一个dyno上部署两个应用程序?

也许在他们前面有一个代理(例如:nginx或HA(,这样我就可以有一个同时包含这两个的域:

  1. myapp.heroku.com->服务SSR应用程序(index.html,它可以使用/api和NOTbackend.herokuapp.com/api调用我的后端(

  2. myapp.heroku.com/api->可以从前端应用程序调用,而无需CORS调用

我完全疯了吗?

上下文

这是一个浏览量很少的小应用程序。

根据网上的问题和建议,答案是

根据许多社区和专家的说法,Heroku的模式是每个dyno运行一个应用程序(通常单个应用程序运行多个dyno(。

但是等一下,有一种情况是,将两个服务器部署到一个dyno上,它也起作用了。您可以在此处查看:https://medium.com/@nadayar/heroku-fu多服务器对一dyno-6fc68d57b373

希望这能解决你的问题!

Heroku每个Dyno只允许一个端口(因此只有一个应用程序能够接收和处理web请求(,但有一种变通方法,可以使用Heroku Docker注册表将两个应用程序组合在一个Dyno中。

该解决方案包括创建一个Dockerfile,该文件同时具有两个应用程序,并且在Heroku上部署时将同时启动这两个应用
只有一个应用程序(web前端(将绑定到Heroku端口,从而接受来自web的请求。当第一个应用程序能够访问容器时,第二个应用程序(后端(将无法在容器外使用。

带有2个Java服务的Dockerfile示例(其他语言/框架也是可能的(:

RUN mkdir -p /software
# copy first app (run on $PORT)
ADD target/app1.jar /software/app1.jar
# copy second app (run always on 8888)
ADD lib/app2.jar /software/app2.jar
ADD startup.sh /software/startup.sh
USER root
RUN chmod a+x /software/startup.sh
CMD /software/startup.sh

startup.sh必须并行启动中的两个应用程序

java -Dserver.port=$PORT $JAVA_OPTS -jar /software/app1.jar &
java -Dserver.port=8888 -jar /software/app2.jar && fg

对Dyno(app.herokuapp.com(的web请求将解析到web前端(在上面的示例中为app1(。前端可以使用本地地址/端口连接到后端

http://localhost:8888/

相关内容

  • 没有找到相关文章

最新更新