运行 Spring Boot 项目时,核心原则是“自带依赖”。Spring Boot 的设计初衷就是让应用能够独立运行(Standalone),因此你通常不需要在服务器上单独安装 Tomcat、JDK(取决于部署方式)或复杂的中间件作为前置条件,具体取决于你的构建和部署策略。
以下是针对不同部署场景的详细拆解:
1. 基础运行时环境(必须项)
无论采用何种部署方式,服务器底层必须具备以下基础环境:
- Java 运行环境 (JRE/JDK)
- 版本匹配:Spring Boot 对 Java 版本有严格要求。例如,Spring Boot 3.x 强制要求 Java 17+,而 2.x 通常支持 Java 8 到 17。
- 安装方式:
- 方案 A(推荐):使用
jlink打包工具将 JDK 与代码打包成一个可执行 JAR 包,此时服务器上无需预装任何 Java 环境,直接运行即可。 - 方案 B:如果未打包内部 JDK,则需在服务器(CentOS/Ubuntu/RedHat 等)上安装对应版本的 OpenJDK 或 Oracle JDK。国内云厂商(如阿里云 ECS、腾讯云 CVM)通常提供一键安装脚本或镜像市场模板。
- 方案 A(推荐):使用
- 验证命令:
java -version。
2. 部署形态决定所需依赖
根据你生成的产物不同,服务器上的依赖需求差异很大:
场景一:标准 JAR 包部署(最常见)
这是 Spring Boot 最原生的运行方式,利用内嵌容器启动。
- 生成产物:通过 Maven (
mvn clean package) 或 Gradle 构建出的xxx.jar。 - 服务器依赖:
- 仅需 JRE/JDK:如上所述,若 JAR 包内未包含 JVM,则需安装对应版本 JDK。
- 无需安装 Tomcat:Spring Boot 内置了 Tomcat(默认)、Jetty 或 Undertow,它们随 JAR 包一起运行,不需要在服务器上单独下载、解压或配置 Tomcat。
- 无需安装 Nginx/Apache:虽然生产环境通常会在前端加一层 Nginx 做反向X_X,但 Nginx 不是 Spring Boot 运行的依赖,而是网络架构的组件。
- 启动命令:
java -jar your-app.jar。
场景二:Docker 容器化部署(云原生主流)
在云计算环境中,这是目前最推荐的部署方式。
- 生成产物:Docker 镜像(Image)。
- 服务器依赖:
- Docker 引擎:服务器需安装 Docker Daemon。
- 无需其他依赖:镜像内部已经包含了 OS 层、JDK 和 Spring Boot 应用。宿主机只需运行容器即可。
- 优势:彻底屏蔽操作系统差异,解决“在我机器上能跑”的问题。
场景三:WAR 包部署(传统模式)
如果你将项目打包为 WAR 文件,意图部署到外部容器中。
- 生成产物:
xxx.war。 - 服务器依赖:
- 外部 Web 容器:必须在服务器上安装并配置独立的 Tomcat、Jetty 或 Jetty-based 容器。
- JDK:容器本身需要 JDK 才能运行。
- 注意:这种方式在现代 Spring Boot 开发中已较少使用,除非为了兼容老旧的运维流程。
3. 数据库与中间件(业务依赖)
Spring Boot 项目本身不依赖数据库,但业务逻辑通常需要。这些组件是否安装在同一台服务器,取决于架构设计:
- 本地部署:如果你的应用需要连接 MySQL、Redis、RabbitMQ 等,且为了简化测试,你可能需要在同一台云服务器上安装这些服务。
- 建议:生产环境强烈建议将这些组件分离部署(使用云厂商提供的 RDS、Redis 缓存实例、消息队列服务),不要直接装在应用服务器上,以保证性能和稳定性。
- 远程连接:如果使用了云厂商的 PaaS 服务(如阿里云 RDS),则应用服务器完全不需要安装数据库软件,只需配置好网络连接(安全组白名单)和 JDBC 驱动(Maven 依赖中已包含)。
4. 国内云厂商环境下的特别提示
在使用阿里云、腾讯云、华为云等国内云厂商时,还需注意以下几点:
- 系统内核与防火墙:
- 确保服务器安全组(Security Group)放行了应用端口(如 8080, 80, 443)。
- 部分云厂商的 Linux 镜像可能精简了部分工具(如
vim,net-tools),建议初始化时安装常用运维工具,方便排查问题。
- JDK 源优化:
- 由于网络原因,如果在服务器上使用
apt-get或yum安装 JDK,速度可能较慢。建议使用云厂商提供的官方源,或提前下载好二进制包进行离线安装。
- 由于网络原因,如果在服务器上使用
- 资源限制:
- Spring Boot 应用对内存敏感。在云服务器控制台调整 JVM 参数(如
-Xms和-Xmx)时,务必结合实例规格(CPU/内存)设置,避免 OOM(Out Of Memory)导致进程被系统杀掉。
- Spring Boot 应用对内存敏感。在云服务器控制台调整 JVM 参数(如
总结清单
对于一台标准的云服务器,运行一个典型的 Spring Boot 项目(JAR 模式 + 远程数据库),你只需要:
- 操作系统:Linux (CentOS/Ubuntu) 或 Windows Server。
- Java 环境:安装与项目编译版本一致的 JDK(或打包带 JVM 的 JAR)。
- 网络配置:配置安全组放行应用端口。
- 可选:Nginx(用于反向X_X和静态资源托管,非必须)。
- 非必须:Tomcat、MySQL、Redis(除非本地部署,否则建议用云托管服务)。
一句话结论:只要解决了JDK 版本匹配和网络连通性,Spring Boot 项目本身几乎不需要在服务器上安装任何其他复杂的软件依赖。
CLOUD云枢