1Spring Boot 内嵌了 Tomcat,打包出来的 .jar 就是一个可直接运行的完整应用。部署的重点就两件事:把 Jar 跑起来、让它崩了能自动拉起。本文用 systemd 来完成后者。
一、环境准备
安装 JDK,版本需与项目编译目标一致(Spring Boot 3.x 需要 JDK 17+):
apt install openjdk-17-jdk -y
java -version
二、打包可执行 Jar
Maven 项目在源码根目录执行:
mvn clean package -DskipTests
Gradle 项目则执行 gradle build。产物在 target/ 下,如 app-1.0.0.jar。上传到服务器后先手动验证能启动:
java -jar app-1.0.0.jar --server.port=8080
三、配置外置
生产环境不要把配置写死在 Jar 里,用外部 application.yml 覆盖:
java -jar app-1.0.0.jar --spring.config.additional-location=file:/etc/app/application.yml
四、systemd 守护
新建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
User=www
ExecStart=/usr/bin/java -jar /opt/app/app-1.0.0.jar --spring.config.additional-location=file:/etc/app/application.yml
SuccessExitStatus=143
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动:
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp
Restart=always 保证进程退出后自动拉起,SuccessExitStatus=143 让优雅关闭不被误判为异常。
五、Nginx 反向代理
与 Node 项目类似,Nginx 监听 80/443,代理到本机 8080,并配置 proxy_set_header 传递真实 IP 与 Host。
六、日志与调优
- 日志落盘:
StandardOutput=append:/var/log/myapp.log,或交给 logback 滚动。 - JVM 内存:
-Xms512m -Xmx512m按机器规格调整,避免默认吃满。 - 优雅停机:Spring Boot 2.3+ 支持 graceful shutdown,配合
TimeoutStopSec使用。
systemd 是 Linux 上最可靠的进程守护方案,比 nohup 加 & 专业得多——开机自启、异常重启、日志采集全都免费获得。
请问文章中提到的Nginx配置如何实现日志的外置?
我也有一个类似的项目,在部署过程中遇到了一些问题,这篇文章给了我一些启发。
这篇文章详细介绍了Spring Boot项目的部署流程,对于初学者来说非常实用。