在 Linux 服务器上部署 Spring Boot Java 项目,通常有以下几种主流方式,我将按推荐程度和适用场景为你梳理完整流程:
✅ 一、前置准备(所有方案通用)
-
安装 JDK
# Ubuntu/Debian sudo apt update sudo apt install openjdk-17-jdk -y # CentOS/RHEL sudo yum install java-17-openjdk-devel -y # 验证 java -version javac -version -
上传项目
- 将打包好的
your-app.jar(通过mvn clean package或./gradlew bootJar生成)上传至服务器(如/opt/app/) - 或使用 Git 拉取源码后编译:
git clone <repo-url> cd your-project mvn clean package -DskipTests
- 将打包好的
-
配置环境变量(可选但推荐)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH echo 'export JAVA_HOME=...' >> ~/.bashrc source ~/.bashrc
🚀 二、部署方案对比与实操
方案 A:直接运行 JAR(简单快速,适合测试/小型服务)
# 进入目录
cd /opt/app
# 后台运行(推荐 nohup + &)
nohup java -jar your-app.jar --spring.profiles.active=prod > app.log 2>&1 &
# 查看进程
ps aux | grep your-app.jar
# 停止服务
kill $(ps aux | grep your-app.jar | grep -v grep | awk '{print $2}')
✅ 优点:零依赖、快速
⚠️ 缺点:无自动重启、日志难管理、无法优雅停止
🔧 进阶:使用 systemd 管理服务(强烈推荐生产环境)
创建 systemd 服务文件
# /etc/systemd/system/myapp.service
[Unit]
Description=My Spring Boot Application
After=syslog.target network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar myapp.jar --spring.profiles.active=prod
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
Environment="JAVA_OPTS=-Xms512m -Xmx1024m"
[Install]
WantedBy=multi-user.target
启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
# 查看状态
sudo systemctl status myapp
# 日志
journalctl -u myapp -f
方案 B:使用 Docker 容器化部署(推荐中大型项目)
1. 编写 Dockerfile(项目根目录)
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY target/your-app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
2. 构建镜像
docker build -t my-spring-boot:latest .
3. 运行容器
docker run -d
--name myapp
-p 8080:8080
-e SPRING_PROFILES_ACTIVE=prod
-v /var/log/myapp:/app/logs
my-spring-boot:latest
✅ 优点:环境一致、易扩展、可配合编排工具(K8s/Docker Compose)
📦 建议:生产环境用多阶段构建减小镜像体积
方案 C:使用 Nginx + Tomcat(传统 WAR 包部署,较少用)
仅当你需保留 WAR 包或已有 Tomcat 基础设施时考虑。
- 安装 Tomcat:
sudo apt install tomcat10 tomcat10-admin-webapps -y - 将
.war放入$CATALINA_BASE/webapps/ - 访问
http://ip:8080/your-app
⚠️ Spring Boot 默认内嵌 Tomcat,除非特殊需求,否则不推荐此方式。
🔐 三、生产环境关键优化建议
| 类别 | 建议 |
|---|---|
| JVM 参数 | -Xms512m -Xmx1G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 |
| 日志 | 集成 Logback + 滚动策略(如 maxFileSize=10MB, totalSizeCap=100MB) |
| 健康检查 | 开启 Actuator /actuator/health,配合 Prometheus/Nginx 探测 |
| 安全 | 禁用调试端口;敏感配置用环境变量或 Vault 注入;HTTPS 反向X_X |
| 监控 | 接入 Micrometer + Prometheus + Grafana |
| 备份恢复 | 数据库定期快照 + JAR 版本归档 |
🧪 四、验证部署是否成功
# 1. 检查端口监听
netstat -tlnp | grep 8080
# 或
ss -tlnp | grep 8080
# 2. 请求接口
curl http://localhost:8080/actuator/health
# 应返回 {"status":"UP"}
# 3. 查看日志
tail -f /var/log/myapp/app.log
# 或 journalctl -u myapp -f
需要我根据你的具体场景(如:是否用 K8s?是否有 CI/CD?是否需灰度发布?)提供定制化部署脚本或 Docker Compose/K8s YAML 示例吗?
CLOUD云枢