在生产环境中部署.jar文件的正确方法

4

我对部署很陌生,我有一个jar文件作为包,该如何在我的生产服务器上进行部署?

我的生产服务器基本上是运行在AWS的EC2机器上

  1. 我应该只运行java - jar "jar文件"吗?这是生产服务器上的惯用方式吗?
  2. 我应该将.jar文件打包为ear/war并部署在tomcat/jboss服务器上吗?

感谢您的帮助!


1
你还没有告诉我们你的程序是做什么的。如果它是一个应该一直运行的服务器,那么它的部署方式就不同于需要作为每日批处理作业或交互式工具运行的程序。 - Joni
是的,这是一个服务器端代码API,必须始终运行。 - Aditya Malviya
数据太少无法回答你的问题。你没有说明你可以使用哪些基础设施。例如,当你部署到k8s、弹性豆荚、本地服务器等时,你会选择不同的选项并有不同的限制。 - Lesiak
5个回答

2

你所描述的两种方法都是有效的。

对于在Linux服务器上包含自己应用程序服务器(例如Spark,Javalin,Spring Boot)的小型Web API,我会启动一个screen会话并运行java -jar。这使我可以退出SSH会话(从服务器断开连接)而不终止程序。

对于其他不包括应用程序服务器的Spring应用程序,我将代码打包成WAR文件并将其复制到应用程序服务器的部署目录中。对于Tomcat,那就是webapps。然后应用程序服务器可以读取WAR文件并启动运行实例(假设启用了热部署)。

特别是Tomcat还有一个网页,您可以上传WAR文件以部署它。


1
如果您希望在断开SSH连接或关闭Linux终端后程序仍然保持运行状态,则可以使用以下命令:
nohup java -jar file.jar &

这是部署jar文件的最佳方式。例如: nohup java -jar abc-api.jar >/dev/null 2>&1 & nohup java -jar cde-api.jar >/dev/null 2>&1 & - Feridun

0

这基本上取决于您的偏好和您所在地区的通常标准。我们在Docker中提供的服务基本上在entry-point.sh脚本的末尾有exec java -jar param param...。您可以运行整个Tomcat等。


不,我不想使用Docker,我只是想知道将jar嵌入war/ear并在jboss中部署是否是行业惯例。 - Aditya Malviya

0
如果您正在使用Spring Boot(这是一个好主意),那么java -jar就非常好用了——您可以使用嵌入式Tomcat并跳过安装专用应用程序服务器(或者更准确地说,Servlet容器)。

0

在 Jboss 服务器中,第二种方法比第一种更受欢迎,因为可以通过控制台轻松完成各种操作。 您可以控制应用程序在服务器上的部署。 例如,如果您不想将 jar 部署到集群中的所有服务器上,也可以进行处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接