我有一个Spring Boot Web应用程序,我想分成大约六个独立的应用程序。一个将在“ /
” 下的端点处提供主页并登录,其他每个将声明一个子目录路径(“ /subsystem1
”,“ /subsystem2
”等)。我有一个非常清楚的想法,我如何使用JWT将身份验证/授权从登录应用程序传递给其他应用程序。
这样做的主要原因是,可以在不关闭其他子系统的情况下修改或更新每个子系统。从组织上来说,当只更改一个子系统时,我们不必对整个应用程序进行质量检查。
是否可以将多个Spring Boot实例设置为在同一时间同时在同一服务器上运行,并且它们的端点具有不同的路径/目录?怎么样?
我找不到任何重复的问题,但这是两个可能提供线索的相关问题:
从是否有定制的 Spring 启动部署路径的标准的方式?我了解到可以将应用程序属性设置为server.servlet.context-path
以子目录名称(例如“ / subsystem1”)为整个应用程序添加前缀。但是我仍然不能同时运行两个应用程序,即使它们都声明了不同的子目录。Spring Boot报告“ Web服务器无法启动。端口8080已被使用。”
有一个Tomcat上运行多个 Spring 启动应用程序 ,但我宁愿使用他们的嵌入式Tomcat实例独立的Spring应用程序,而不是推荐少WAR打包和部署到外部Tomcat容器。
这看起来很有希望- 在单个服务器中部署多个Spring Boot Web应用程序 -但是答案集中在独立部署还是Tomcat容器部署是否更好,而没有涉及“如何”问题。
可接受的答案:
如ekalin所言,如果不可能有多个Spring Boot应用程序监听同一个端口,那么以下是我脑力激荡的一些想法(但不知道如何实现):
也许实例可以在不同的端口上运行,但是主应用程序(带有登录页面的实例)可以以某种隐藏其真实URL的方式“转发”或重定向到其他应用程序?例如,“ localhost:8080 / subsystem1”将是“ localhost:8081 /”的别名。
也许每个应用程序可以有自己的Docker容器,它们都在共享的Docker网络中运行,而我们以某种方式使用Docker将每个URL路径映射到正确的应用程序?可以使用docker-compose进行设置吗?
我们设置了某种代理服务器,将URL路径重新映射到单独的应用程序。
一个端口上侦听的应用程序不能超过一个。内核如何将软件包发送到哪个应用程序?
您可以在8080上运行诸如nginx之类的http服务器,并在不同的端口中运行每个应用程序,然后将基于URL的请求代理到所需的应用程序。
代理服务器的想法:看起来很简单,但我之前从未做过。您可以建议一个工具或一些可以使我入门的东西吗?
nginx可能是最流行且更容易设置的,但是apache也应该工作。或任何其他具有反向代理支持的http服务器。
garron.me/en/linux/nginx-reverse-proxy.html显示了这种情况的基本配置。