Linux部署Java应用需先确认系统版本、Java环境与资源,安装JDK,打包后以WAR或JAR方式部署,配置独立配置文件,编写启动脚本或使用systemd管理,设置防火墙,并进行JVM调优与监控备份。
Linux系统Java应用部署指南
时间:2026-07-25
浏览:553
文章目录
先说几个核心判断:Java应用在Linux系统上的部署,虽然看似是常见话题,但真正能把每一步都做到位、不出纰漏的团队并不多。从环境准备到JVM调优,每一个环节都有门道,实际踩坑的案例比比皆是。今天,我们就将整个Java应用部署在Linux上的流程拆开,逐一捋清。
一、部署前准备

准备工作做得扎实,后续才能减少折腾。首先需要确认三件事:操作系统版本、Java环境是否已安装、系统资源是否充足。相关命令都很直接——使用lsb_release -a和uname -a查看系统版本,java -version配合echo $JAVA_HOME检查Java环境,内存用free -h、CPU用lscpu、磁盘用df -h,网络连通性则通过ping -c 4 google.com验证。
安全方面同样不能忽视。防火墙必须启用,但需要放行SSH(22端口)、HTTP(80)、HTTPS(443)以及应用端口(如8080)。以Ubuntu的ufw为例,执行sudo ufw enable && sudo ufw allow 22 && sudo ufw allow 8080即可。同时,建议创建一个专用用户来运行应用,例如sudo adduser appuser,再将其加入sudo组:sudo usermod -aG sudo appuser。SSH密钥认证也推荐配置好,将公钥放入~/.ssh/authorized_keys即可。
目录结构同样重要。一个清晰、标准化的目录能减少运维麻烦。例如,将应用文件放在/opt/myapp/{bin,conf,lib,logs,temp},日志单独放在/var/log/myapp,配置文件放在/etc/myapp。最后,别忘了设置所属用户:sudo chown -R appuser:appuser /opt/myapp。
二、Java环境安装
安装Java环境时,使用包管理器是最省心的方式。Debian/Ubuntu系列执行sudo apt update && sudo apt install openjdk-11-jdk -y,将11替换为所需版本即可。RHEL/CentOS系列则用sudo yum install java-11-openjdk-devel -y。安装完成后,运行java -version,看到版本信息即表示成功。
如果因特殊原因需要手动安装,步骤也不复杂。从Oracle官网下载JDK压缩包,例如jdk-11.0.20_linux-x64_bin.tar.gz,上传到/usr/local并解压:sudo tar -zxvf jdk-11.0.20_linux-x64_bin.tar.gz -C /usr/local。然后编辑/etc/profile,添加export JAVA_HOME=/usr/local/jdk-11.0.20和export PATH=$JAVA_HOME/bin:$PATH,最后执行source /etc/profile使配置生效。
三、应用打包
无论使用Maven还是Gradle,打包步骤都是标准操作。Maven项目在根目录执行mvn clean package,生成的JAR包会出现在target目录下。Gradle项目则执行gradle build,JAR包在build/libs中。如果是Web应用,需要部署到Tomcat等Servlet容器,则需打成WAR包——Maven的mvn package同样会在target目录下生成WAR文件。
四、手动部署流程
部署方式取决于应用类型。WAR包走Tomcat部署时,先停止Tomcat服务:sudo systemctl stop tomcat。然后备份旧的WAR包:sudo cp /opt/tomcat/webapps/myapp.war /opt/tomcat/webapps/myapp.war.bak。将新包上传到/tmp,再移动到webapps目录:sudo mv /tmp/myapp.war /opt/tomcat/webapps/。最后启动Tomcat:sudo systemctl start tomcat,使用sudo tail -f /opt/tomcat/logs/catalina.out查看日志以监控部署状态。
JAR包部署(以Spring Boot为例)则更直接。将JAR包上传到/opt/myapp:scp myapp.jar appuser@server:/tmp && sudo mv /tmp/myapp.jar /opt/myapp/。如果应用已注册为systemd服务,先停止:sudo systemctl stop myapp,再启动:sudo systemctl start myapp,最后用sudo systemctl status myapp检查状态。
五、配置文件管理
配置文件和代码分离是基本素养。应用配置文件建议放在/etc/myapp下,例如application.properties、application-prod.properties。数据库配置尤其需要单独拎出来,放在/etc/myapp/database.properties中,内容包含数据库URL、用户名、密码等敏感信息。示例:spring.datasource.url=jdbc:mysql://localhost:3306/mydbuseSSL=false&serverTimezone=UTC。
六、启动脚本编写
编写几个启动脚本,能让日常运维更加顺手。启动脚本/opt/myapp/bin/start.sh的核心逻辑是:检查PID文件判断应用是否已在运行,如果没有则用nohup启动JAR包,并将PID写入文件。停止脚本/opt/myapp/bin/stop.sh则相反,从PID文件读取进程ID,执行kill并等待进程结束。重启脚本/opt/myapp/bin/restart.sh更简单,先调用停止脚本,等待5秒,再调用启动脚本。别忘了赋予执行权限:chmod +x /opt/myapp/bin/*.sh。
七、systemd服务配置(可选但推荐)
使用systemd管理Java应用,是生产环境最推荐的做法。创建/etc/systemd/system/myapp.service文件,内容包含Unit、Service、Install三部分。Service段需要注意:指定用户和组、工作目录、启动命令(包括JVM参数和Spring profile),以及重启策略(Restart=on-failure配合RestartSec=5s)。配置完成后,执行sudo systemctl daemon-reload、sudo systemctl enable myapp、sudo systemctl start myapp,再用sudo systemctl status myapp确认状态。日志查看使用journalctl -u myapp -f。
八、防火墙配置
如果使用firewalld(CentOS系列),开放应用端口(如8080)的命令是:sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload。如果是ufw(Ubuntu系列),一句sudo ufw allow 8080即可。
九、优化与维护
应用上线只是开始,长期维护才是重头戏。JVM调优方面,-Xms和-Xmx分别设置初始和最大堆内存,例如-Xms512m -Xmx2g。垃圾回收器选择上,-XX:+UseG1GC配合-XX:MaxGCPauseMillis=200,适合大内存应用。监控方面,top和htop查看CPU/内存,tail -f /opt/myapp/app.log实时查看日志。如果需要更专业的方案,集成Prometheus+Grafana做可视化监控,效果相当不错。最后,备份策略不能忘:定期备份应用代码(/opt/myapp)、配置文件(/etc/myapp)和数据库(例如使用mysqldump),并存储到异地或云存储。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。