CentOS 7 作为企业级 Linux 发行版,凭借其稳定性与长期支持特性,成为许多生产环境的首选操作系统,而 Spring Boot 作为 Java 领域的轻量级框架,以“约定优于配置”的理念大幅简化了应用开发流程,将二者结合,既能利用 CentOS 7 的可靠基础架构,又能借助 Spring Boot 快速构建微服务或单体应用,本文将从环境准备到部署运维,系统介绍在 CentOS 7 上运行 Spring Boot 应用的完整方案。
环境准备:基础软件安装
在 CentOS 7 中部署 Spring Boot 应用前,需完成 JDK 与构建工具的安装。
安装 OpenJDK 11(推荐版本)
Spring Boot 2.x 系列对 Java 版本要求为 8 及以上,OpenJDK 11 是兼顾性能与兼容性的选择,执行以下命令安装:
sudo yum install -y java-11-openjdk-devel java -version # 验证安装,输出应包含 "openjdk version "11.*""
配置 JAVA_HOME 环境变量
编辑 /etc/profile
文件,添加 JDK 路径:
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' | sudo tee -a /etc/profile source /etc/profile # 使配置立即生效
应用打包:使用 Maven 或 Gradle
Spring Boot 项目通常通过 Maven 或 Gradle 构建可执行 JAR 包,以 Maven 为例,确保 pom.xml
中包含 Spring Boot Starter 依赖(如 Web 模块):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
执行打包命令生成独立 JAR:
mvn clean package # 输出路径为 target/*.jar
部署方式:后台运行与进程管理
Spring Boot 应用可通过多种方式在 CentOS 7 后台持续运行,以下是常用方案对比:
部署方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
nohup 命令 | 简单易用,无需额外工具 | 进程管理不便,重启麻烦 | 测试环境、临时任务 |
Systemd 服务 | 自动启动、日志管理完善 | 需编写服务单元文件 | 生产环境、高可用需求 |
Docker 容器 | 环境隔离,便于扩展 | 需额外学习容器技术 | 微服务架构、云原生 |
推荐方案:Systemd 服务管理
创建服务单元文件 /etc/systemd/system/springboot-app.service
如下:
[Unit] Description=Spring Boot Application After=network.target [Service] User=appuser WorkingDirectory=/opt/app ExecStart=/usr/bin/java -jar your-application.jar SuccessExitStatus=143 Restart=always [Install] WantedBy=multi-user.target
操作步骤:
- 将打包好的 JAR 包上传至
/opt/app/
目录; - 创建专用用户(可选,增强安全性):
sudo useradd appuser && sudo chown -R appuser:appuser /opt/app
; - 启动服务:
sudo systemctl start springboot-app
; - 设置开机自启:
sudo systemctl enable springboot-app
。
反向代理与负载均衡
生产环境中,通常通过 Nginx 反向代理 Spring Boot 应用,实现动静分离与负载均衡。
安装 Nginx
sudo yum install -y nginx sudo systemctl start nginx # 启动服务 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload # 开放 HTTP 访问
配置反向代理
编辑 Nginx 配置文件 /etc/nginx/conf.d/default.conf
,添加 upstream 和 location 块:
upstream springboot { server 127.0.0.1:8080; # 应用监听地址 } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://springboot; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
重载 Nginx 配置使更改生效:sudo systemctl reload nginx
。
监控与日志管理
日志收集
Spring Boot 默认将日志输出至控制台,可通过 logging.file.name
参数指定文件路径(如 application.properties
中设置 logging.file.name=/var/log/app.log
),建议使用 logrotate
定期轮转日志:
sudo tee /etc/logrotate.d/springboot <<EOF /var/log/app.log { daily rotate 30 compress missingok notifempty } EOF
性能监控
集成 Actuator 组件获取应用指标:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
访问 http://your-server:8080/actuator/health
可查看健康状态,配合 Prometheus + Grafana 可实现可视化监控。
安全加固
- 防火墙限制:仅开放必要端口(如 80/443 for Nginx,8080 for 内部通信),关闭无用端口:
sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
- 最小权限原则:应用进程以非 root 用户运行,避免提权风险;
- SSL 加密:通过 Let’s Encrypt 免费证书为 Nginx 配置 HTTPS,提升数据传输安全性。
相关问答 FAQs
Q1:如何解决 Spring Boot 应用内存溢出问题?
A:可通过 JVM 参数调整堆内存大小,在 systemd 服务文件的 ExecStart
行添加参数,
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar your-application.jar
-Xms
设定初始堆内存,-Xmx
设定最大堆内存,根据服务器资源配置调整数值。
Q2:为什么 Spring Boot 应用无法通过 Nginx 访问?
A:常见原因包括:
- 应用未监听正确网络接口(默认仅监听 localhost,需在
application.properties
中设置server.address=0.0.0.0
); - Nginx 配置错误(如
proxy_pass
地址与实际不符); - 防火墙阻止了流量(需检查
firewall-cmd
规则),逐一排查即可定位问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复