在 Linux 服务器上跑通一个 Spring Boot 应用,别整那些虚头巴脑的宏大叙事,核心就三件事:环境、配置、进程管理。只要这三点到位,应用就能稳稳地跑起来。
1. 基础环境:JDK 必须对版
Spring Boot 是 Java 写的,没 JDK 一切免谈。
- 版本匹配:先看你代码用的 Spring Boot 版本要求什么 JDK。比如 Spring Boot 3.x 通常强制要求 JDK 17+,老项目可能还在用 JDK 8。千万别装错,报错
UnsupportedClassVersionError就是这原因。 - 安装方式:推荐用官方源或 SDKMAN 安装,不要随便从网上扒个不知名的安装包。装好后,在终端执行
java -version确认一下,确保环境变量JAVA_HOME已经正确配置到/etc/profile或~/.bashrc里,否则脚本跑不起来。
2. 打包与部署:Jar 包是王道
Spring Boot 最大的优势就是“单体”部署。

- 本地构建:在开发机或 CI/CD 流水线里,用 Maven (
mvn clean package) 或 Gradle 把项目打成可执行的 Jar 包。注意检查pom.xml里的打包插件配置,确保生成的 jar 包里包含了所有依赖(Fat Jar)。 - 上传服务器:通过
scp或 SFTP 工具,把打好的.jar文件传到服务器指定目录(比如/opt/app),权限给足(chmod +x虽不是必须,但好习惯要养成)。
3. 启动参数:别让端口和内存打架
直接运行 java -jar app.jar 能跑,但生产环境这么干等于裸奔。至少得配好这两条命脉:
- 内存限制:Linux 服务器资源宝贵,必须显式指定堆内存。默认情况下 JVM 可能会占满服务器内存导致系统卡死。建议加上
-Xms和-Xmx,比如-Xms512m -Xmx1g,根据服务器实际物理内存调整。 - 外部化配置:别把数据库密码、Redis 地址硬编码在代码里。使用
--spring.profiles.active=prod配合外部的application-prod.yml,或者直接用环境变量注入(Spring Boot 自动识别SPRING_DATASOURCE_URL这类变量)。这样换个环境不用重新打包。 - 日志输出:默认控制台日志在生产环境很难排查问题。记得配置 Logback 或 Log4j2,把日志重定向到文件,并设置滚动策略(按天或按大小切割),防止日志撑爆磁盘。
4. 进程守护:挂了谁来重启?
这是新手最容易踩的坑。直接用 nohup java -jar ... & 虽然能让它后台跑,但一旦你关闭 SSH 窗口,或者服务崩溃了,没人知道也没人管。
- Systemd(推荐):现在绝大多数 Linux 发行版都标配 Systemd。写个
.service文件放在/etc/systemd/system/下,定义好启动命令、用户、依赖关系、重启策略(Restart=always)和日志输出路径。- 执行
systemctl enable myapp开机自启。 - 执行
systemctl start myapp启动。 - 执行
journalctl -u myapp -f实时看日志。
这才是正经的生产级做法。
- 执行
- PM2 / Supervisor:如果你习惯 Node.js 生态或者不想写 systemd 文件,这些进程管理器也是成熟的选择,功能类似。
5. 网络与安全:防火墙别挡路
- 端口放行:你的应用监听的是 8080 还是 9000?别忘了在服务器防火墙(如
firewalld或iptables)上开放对应端口,否则网络连不上。 - 安全组:如果是云服务器(阿里云、AWS 等),云厂商的安全组规则也得配,只允许必要的 IP 段访问,别全开。
- Nginx 反向X_X:生产环境通常不会让 Nginx 直接转发请求给后端,而是让 Nginx 做入口,处理 SSL 证书、静态资源缓存和负载均衡,后端 Spring Boot 只负责逻辑。
总结一下:
装上匹配的 JDK -> 打好 Fat Jar -> 写好 Systemd 配置文件(含内存参数)-> 开放防火墙端口 -> 启动服务。
这就够了。剩下的优化、监控、链路追踪,那是业务稳定后再去考虑的事。先把地基打牢,别整花里胡哨的。
CLOUD云计算