Linux服务器上如何部署Spring Boot Java项目?

在 Linux 服务器上部署 Spring Boot Java 项目,通常有以下几种主流方式,我将按推荐程度和适用场景为你梳理完整流程:


✅ 一、前置准备(所有方案通用)

  1. 安装 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
  2. 上传项目

    • 将打包好的 your-app.jar(通过 mvn clean package./gradlew bootJar 生成)上传至服务器(如 /opt/app/
    • 或使用 Git 拉取源码后编译:
      git clone <repo-url>
      cd your-project
      mvn clean package -DskipTests
  3. 配置环境变量(可选但推荐)

    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 基础设施时考虑。

  1. 安装 Tomcat:
    sudo apt install tomcat10 tomcat10-admin-webapps -y
  2. .war 放入 $CATALINA_BASE/webapps/
  3. 访问 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云枢 » Linux服务器上如何部署Spring Boot Java项目?