【发布时间】:2019-12-15 01:30:51
【问题描述】:
我有一个 Spring Boot 应用程序,它运行在嵌入式 tomcat 上,java -jar app.jar 在远离我工作办公室的服务器上,我对该服务器没有任何 ssh 或其他访问权限。
所以当我想安装和运行更新版本的应用程序时,我应该去服务器位置,物理连接到服务器,然后安装和运行更新版本。
有没有办法在不去服务器位置的情况下运行更新版本的应用程序?例如,将较新的 jar 文件上传到我正在运行的应用程序中,并自行更新它。
注意
由于 IP 和端口限制,我无权访问服务器,也无法使用和运行任何持续交付工具,例如 jenkins 或其他。
【问题讨论】:
-
据我了解,服务器不接受任何入站连接。那么它可以调用任何出站服务吗?
-
@Jagger 也许可以,你知道方法吗?
-
如何创建一个有一个端点的应用程序,它接受上传。使这个上传成为一个 JAR 文件,并让你的应用程序 Runtime.exec() 它。我想说这不是一种真正可维护的做事方式,但它是可行的。简而言之:制作一个可以部署应用程序的应用程序。无论你做什么来实现这一点,从安全的角度来看,这也是噩梦般的。所以你被警告了:-)
-
@RasoolGhafari 如果服务器可以建立出站连接,例如到 SFTP 服务器,您将在其中存储 jar 文件,然后编写脚本(
.bat、.sh或其他取决于服务器的操作system),它将下载文件,然后使用java -jar your_app.jar重新部署应用程序。您可以使用前言者的提示并从 Spring Boot 中的计划作业运行Runtime.exec()(@Scheduled注释)。或者,您可以在 Java 本身中使用一些SFTP库,但是您会遇到从自身停止应用程序的问题。 -
@Jagger 如果应用程序可以通过 HTTP 访问(如果它是启用 Tomcat 的 SpringBoot 应用程序,那么您甚至不必建立出站连接,只需 HTTP POST 您的 JAR。唯一的限制可能是:来自防火墙/代理/服务器的 HTTP 请求限制(但如果是这种情况,您可以对上传进行切片),以及安全策略限制(Java 运行时管理员可能禁止 Runtime.exec()) .
标签: java spring-boot devops embedded-tomcat