docker容器中的前端和后端[关闭]

Posted

技术标签:

【中文标题】docker容器中的前端和后端[关闭]【英文标题】:Frontend and backend in docker container [closed] 【发布时间】:2020-09-13 09:14:10 【问题描述】:

我在 Angular 中有一个前端,在 Spring Boot 中有相应的后端。两者都是独立项目。 现在,在这两个项目的开发阶段之后,我想将它们投入生产模式。我所有的问题都从这里开始。

在阅读了很多最佳实践后,我做出了决定,我应该将这两个项目托管在单独的 docker 容器中。前端会使用nginx作为webserver,spring boot项目默认嵌入tomcat webserver。

我的问题: 如果我将它们分开,应该将哪个端口分配给网络服务器?以后两者都应该只用 HTTPS 通信,那么两者的端口号是相同的 443 吗?还是后端服务器应该使用端口 8443?我该如何处理?

【问题讨论】:

【参考方案1】:

您可以为反向代理创建第三个容器,它将您的传入流量重定向到相关容器。这有几个好处:

    您可以使用一些众所周知的图像进行反向代理,这些图像带有 Letsencrypt(免费)证书的有用配置。这是一个你可以使用的好方法:https://github.com/linuxserver/docker-letsencrypt

    您不需要将后端服务器的端口暴露给互联网。您只需要打开您的端口到您的内部网络。如果您在 1 个主机上运行所有容器,您可以从 docker-compose 和 docker network 中受益匪浅。

【讨论】:

非常感谢!你有这样一个反向代理的例子吗? 抱歉,不确定您要的是什么类型的示例。但我建议观看此视频 (youtube.com/watch?v=spbkCihFpQ8&t=249s),以了解反向代理如何(部分)解决您的问题或回答您的原始问题。不过,本教程并未展示如何设置 SSL。对于那个,您需要浏览我在上面发布的 github 页面。现在,我相信这将是一个很好的起点。【参考方案2】:

如果您计划为两者使用相同的端口号,那么值得在服务前面安装负载均衡器并根据请求将请求转发给该服务。

或者简单的方法,将两个容器部署在不同的端口(443 和 8443)上,这很容易

【讨论】:

以上是关于docker容器中的前端和后端[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

当前端和后端位于虚拟 Docker 网络中时,如何使用 axios 寻址后端主机

403 Forbidden,docker容器之间的通信

如何在 docker env 中使用 nginx 反向代理通信 UI 和后端应用程序

docker学习6-docker-compose容器集群编排

在单独的 docker 容器 (AWS ECS) 中连接到 MongoDB

前端无法在单独的 docker 容器中到达后端端口