部署 Java Spring Boot 项目前,需要系统性地完成以下准备工作,以确保应用稳定、安全且可维护:
一、环境准备
-
JDK 版本确认
- 检查项目
pom.xml/build.gradle中指定的 JDK 版本(如 8、11、17)。 - 确保服务器已安装对应版本的 JDK,并通过
java -version验证。 - 建议统一使用 LTS 版本(如 JDK 17),避免兼容性问题。
- 检查项目
-
操作系统与依赖库
- 确认 OS 架构(x86_64 / arm64)匹配。
- 安装必要系统依赖(如
libaio,fontconfig,tzdata等,尤其涉及图形库或时区处理时)。 - 配置好防火墙规则(开放所需端口,如 8080、443)。
-
网络与域名
- 若需网络访问,提前申请域名并配置 DNS 解析。
- 规划负载均衡器(如 Nginx、SLB)和反向X_X策略。
二、项目构建与打包
-
本地构建验证
- 在干净环境中执行
mvn clean package -DskipTests或./gradlew bootJar。 - 检查生成的 JAR/WAR 包是否完整(含
BOOT-INF/lib、application-*.yml等)。 - 推荐生成可执行 JAR(Spring Boot 默认支持:
spring-boot-maven-plugin配置<executable>true</executable>)。
- 在干净环境中执行
-
多环境配置管理
- 分离开发/测试/生产配置(通过
spring.profiles.active+application-prod.yml)。 - 严禁将敏感信息硬编码:使用环境变量、配置中心(Nacos/Apollo)、密钥管理服务(KMS/Vault)注入密码、API Key 等。
- 示例:
# application-prod.yml spring: datasource: url: ${DB_URL} username: ${DB_USER} password: ${DB_PASSWORD}
- 分离开发/测试/生产配置(通过
-
日志与监控集成
- 配置 Logback/Log4j2 输出格式(JSON 便于 ELK 收集)。
- 集成 Actuator 端点(
management.endpoints.web.exposure.include=health,info,metrics)。 - 预留 Prometheus/Grafana 指标采集路径。
三、安全加固
-
最小权限原则
- 创建专用运行用户(非 root),限制文件读写权限。
- 容器化部署时设置
USER appuser。
-
依赖安全扫描
- 使用
OWASP Dependency-Check或Snyk扫描第三方库漏洞。 - 更新高风险依赖至安全版本。
- 使用
-
启动参数加固
java -jar app.jar --server.port=8080 --spring.profiles.active=prod -XX:+UseG1GC -Xms512m -Xmx2g -Djava.security.egd=file:/dev/./urandom- 禁用调试端口(
--debug)、关闭不必要的 Actuator 端点。
- 禁用调试端口(
四、部署方案选择
| 方式 | 适用场景 | 关键准备 |
|---|---|---|
| 直接 JAR 运行 | 小型服务、快速验证 | 编写 systemd 服务脚本或 Supervisor 配置 |
| Docker 容器化 | 主流方案,易扩展 | 编写多阶段 Dockerfile,优化镜像体积与层缓存 |
| Kubernetes | 微服务集群、高可用需求 | 准备 Helm Chart、ConfigMap、Secret、Ingress |
| 云托管平台 | 阿里云 EDAS、AWS Elastic Beanstalk | 按平台要求上传制品、配置自动扩缩容策略 |
✅ 推荐实践:优先采用 Docker + CI/CD流水线,实现构建→测试→部署自动化。
五、预发布验证清单
- [ ] 健康检查接口
/actuator/health返回UP - [ ] 数据库连接池正常(无泄漏、超时)
- [ ] 外部依赖(Redis、MQ、OSS)连通性测试通过
- [ ] 压力测试覆盖预期 QPS(使用 JMeter/k6)
- [ ] 回滚方案明确(保留旧版本镜像/JAR)
- [ ] 监控告警阈值配置完成(CPU > 80%、错误率 > 1% 等)
六、文档与交接
- 编写《部署手册》包含:启动命令、配置说明、故障排查步骤。
- 记录关键变量映射关系(如
APP_ENV → profile)。 - 制定应急预案(数据库宕机、缓存雪崩、限流触发等场景)。
完成以上准备后,部署成功率将显著提升。如需具体某环节的详细操作指南(如 Dockerfile 编写、systemd 配置模板),我可进一步提供示例。
PHPWP博客