在 Linux 云服务器上部署 Spring Boot 项目时,推荐配置需兼顾稳定性、性能、可观测性、安全性与可维护性。以下是一套经过生产验证的综合推荐(适用于中等流量 Web 应用,如 API 服务、管理后台等):
✅ 一、服务器基础配置(以主流云厂商为例)
| 项目 | 推荐配置 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS 或 CentOS Stream 9 / Rocky Linux 9 | 长期支持、安全更新及时、Java 生态兼容好;避免使用已 EOL 系统(如 CentOS 7/8) |
| CPU & 内存 | ≥ 2 核 CPU + 4 GB RAM(起步) 高并发/复杂业务建议:4 核 + 8 GB+ |
Spring Boot 默认堆内存约 1/4 物理内存;预留至少 1~2 GB 给 OS、JVM 元空间、GC 开销、监控X_X等 |
| 磁盘 | ≥ 50 GB SSD(系统盘)+ 独立数据盘(如 MySQL、日志归档) | SSD 提升 I/O 性能;避免日志/数据库与系统盘混用 |
| 网络 | 启用 VPC、安全组严格限制端口(仅开放 80/443/22/必要管理端口) | 禁用 root 远程登录,强制密钥认证 |
✅ 二、JVM 与运行时优化(关键!)
# 示例:启动脚本中指定 JVM 参数(推荐使用 java -jar 启动)
java -server
-Xms2g -Xmx2g # 堆内存固定大小(避免动态伸缩开销),建议设为物理内存 40~50%
-XX:+UseG1GC # JDK 8u212+/11+ 默认,低延迟首选
-XX:MaxGCPauseMillis=200 # G1 目标停顿时间
-XX:+UseStringDeduplication # 减少字符串重复内存占用(尤其 JSON/HTTP 场景)
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/app/logs/heapdump.hprof
-Dfile.encoding=UTF-8
-Duser.timezone=Asia/Shanghai
-Dspring.profiles.active=prod
-jar app.jar --server.port=8080
🔔 注意:
- 避免
-Xmn手动调大新生代(G1 会自动管理);- 生产禁用
-XX:+UseParallelGC(吞吐优先,但 GC 停顿长);- JDK 推荐 LTS 版本:Amazon Corretto 17 或 Eclipse Temurin 17/21(免费、安全更新及时、性能优)。
✅ 三、Spring Boot 应用配置(application-prod.yml)
# 服务器
server:
port: 8080
tomcat:
max-connections: 5000
accept-count: 1000
max-threads: 200 # 根据 CPU 核数调整(建议 = CPU 核数 × 2 ~ 4)
min-spare-threads: 20
# Spring Boot Actuator(必须启用!)
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus,loggers,threaddump,heapdump
endpoint:
health:
show-details: when_authorized
metrics:
export:
prometheus:
enabled: true
# 日志(关键!)
logging:
level:
root: INFO
com.yourcompany: WARN # 降低业务包日志级别,避免刷屏
file:
name: /opt/app/logs/app.log
logback:
rollingpolicy:
max-file-size: 100MB
max-history: 30
total-size-cap: 2GB
# 数据库连接池(HikariCP)
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
✅ 四、进程管理与守护(推荐 systemd)
✅ 创建 /etc/systemd/system/myapp.service:
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -Xms2g -Xmx2g -jar /opt/app/app.jar --spring.profiles.active=prod
Restart=always
RestartSec=10
Environment="JAVA_HOME=/usr/lib/jvm/amazon-corretto-17"
Environment="TZ=Asia/Shanghai"
# 安全加固(可选)
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
sudo systemctl status myapp # 查看状态
✅ 五、反向X_X与 HTTPS(生产必备)
✅ 使用 Nginx(非 Apache):
- 配置
proxy_pass http://127.0.0.1:8080; - 启用 Gzip、HTTP/2、静态资源缓存
- 强制 HTTPS + HSTS
- 配置限流(
limit_req)防爬虫/攻击 - 日志分离(access/error 日志独立路径)
🌐 域名 + SSL:用 Certbot 自动申请 Let’s Encrypt 免费证书(配合 Nginx 自动续期)。
✅ 六、可观测性(运维生命线)
| 工具 | 用途 | 推荐方案 |
|---|---|---|
| 日志 | 统一收集分析 | Filebeat → Elasticsearch + Kibana(或 Loki + Grafana) |
| 指标 | JVM/HTTP/DB 性能监控 | Micrometer + Prometheus + Grafana(集成 Actuator) |
| 链路追踪 | 分布式调用分析 | Spring Cloud Sleuth + Zipkin / Jaeger(轻量级可用 SkyWalking) |
| 告警 | 异常通知 | Prometheus Alertmanager → 钉钉/企业微信/Webhook |
✅ 七、安全加固(不可省略)
- ✅ 创建专用低权限用户(
appuser),禁止 SSH 密码登录 - ✅ 关闭不必要的端口(
ufw或云安全组最小化开放) - ✅ 定期
apt update && apt upgrade(Ubuntu)或dnf update(RHEL系) - ✅ Spring Boot 中禁用敏感端点(如
/env,/beans)或加 Spring Security 保护 - ✅ 敏感配置(DB 密码、API Key)使用 环境变量 或 配置中心(如 Nacos/Apollo),禁止硬编码或提交到 Git
- ✅ 定期扫描漏洞:
trivy fs /opt/app/(镜像/目录扫描)、jdeps --jdk-internals your-app.jar
✅ 八、备份与灾备
- 📦 应用包 + 配置文件:Git 版本管理(不包含敏感信息)
- 💾 数据库:每日自动备份(
mysqldump+cron+ 上传至 OSS/S3) - 📄 日志:按天滚动 + 定期压缩归档(如
logrotate) - 🚀 部署:使用 CI/CD(GitHub Actions / Jenkins)实现自动化构建、镜像打包、灰度发布
⚠️ 常见避坑提醒
| 错误做法 | 正确做法 |
|---|---|
❌ java -jar app.jar & 后台运行(无守护、崩溃不重启) |
✅ 用 systemd 或 supervisord |
| ❌ 直接暴露 Spring Boot 端口给公网 | ✅ 必须经 Nginx/Apache 反向X_X |
❌ application.yml 里写密码并提交 Git |
✅ 用 SPRING_DATASOURCE_PASSWORD=xxx 环境变量 |
❌ 不设 -Xmx,依赖默认堆(可能 OOM) |
✅ 显式设置 -Xms 和 -Xmx 相同值 |
| ❌ 不开启 Actuator 或暴露全部端点 | ✅ 至少暴露 health+metrics,其他按需授权 |
如需进一步定制(如 Docker 容器化部署、K8s 编排、多实例负载均衡、读写分离、熔断降级等),可告知你的具体场景(如:QPS 预估、是否含文件上传、是否对接 MQ/Redis/ES),我可为你提供进阶方案 👇
需要我帮你生成:
- ✅ 完整的
systemd服务模板? - ✅ Nginx 生产配置示例?
- ✅ Logrotate 日志轮转配置?
- ✅ Prometheus + Grafana 监控面板 JSON?
欢迎随时提出! 🚀
云计算HECS