奋斗
努力

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

云计算

在 Linux 服务器上部署 Spring Boot Java 项目通常有几种常见方式,从简单到复杂依次为:

  1. 直接运行 JAR 包(最常用、最简单)
  2. 使用 systemd 服务管理(推荐生产环境)
  3. 使用 Docker 容器化部署
  4. 使用 Nginx + Tomcat 反向X_X(传统 WAR 部署)

下面我将详细介绍每种方法,并重点推荐前两种。


✅ 前提条件

确保服务器已安装:

  • JDK 8+(推荐 JDK 11 或 17)
  • Maven/Gradle(用于打包,如果本地打包好则无需)
  • 网络权限(如需访问数据库、Redis 等)

🚀 方法一:直接运行 JAR 包(适合测试/轻量级)

步骤:

  1. 本地打包项目

    mvn clean package -DskipTests

    生成 target/your-app.jar

  2. 上传 JAR 到服务器

    scp target/your-app.jar user@server:/opt/app/
  3. 在服务器上运行

    cd /opt/app
    java -jar your-app.jar

⚠️ 缺点:终端关闭后进程终止;无法后台运行;无日志轮转。


🛡️ 方法二:使用 systemd 管理服务(✅ 推荐生产环境)

这是最稳定、可维护性最强的方式。

步骤:

  1. 创建应用目录和日志目录

    sudo mkdir -p /opt/app/myapp
    sudo mkdir -p /var/log/myapp
    sudo chown -R $USER:$USER /opt/app/myapp
  2. 上传 JAR 文件

    cp your-app.jar /opt/app/myapp/
  3. 创建 systemd 服务文件

    sudo nano /etc/systemd/system/myapp.service

    写入以下内容(根据实际修改):

    [Unit]
    Description=My Spring Boot Application
    After=syslog.target network.target
    
    [Service]
    User=youruser          # 替换为你的用户
    Group=youruser         # 替换为你的用户组
    WorkingDirectory=/opt/app/myapp
    ExecStart=/usr/bin/java -jar /opt/app/myapp/your-app.jar --spring.profiles.active=prod
    SuccessExitStatus=143
    Restart=on-failure
    RestartSec=10
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target

    💡 提示:

    • --spring.profiles.active=prod 表示激活生产配置
    • 可通过 EnvironmentFile 加载外部环境变量文件
  4. 启用并启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable myapp.service
    sudo systemctl start myapp.service
  5. 查看状态和日志

    sudo systemctl status myapp.service
    sudo journalctl -u myapp.service -f    # 实时查看日志
  6. 开机自启

    sudo systemctl enable myapp.service

🐳 方法三:Docker 容器化部署(适合微服务/多实例)

步骤:

  1. 编写 Dockerfile

    FROM openjdk:17-jdk-slim
    COPY your-app.jar /app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]
  2. 构建镜像

    docker build -t myapp .
  3. 运行容器

    docker run -d -p 8080:8080 --name myapp-container myapp
  4. 查看日志

    docker logs -f myapp-container
  5. 设置开机自启

    docker update --restart=unless-stopped myapp-container

💡 可使用 docker-compose.yml 管理多个服务(如 MySQL、Redis)。


🌐 方法四:Nginx + WAR 包部署(传统方式,不推荐新项目)

适用于需要前端静态资源与后端分离的场景。

  1. 打包为 WAR

    <!-- pom.xml 中修改 -->
    <packaging>war</packaging>
    mvn clean package -DskipTests
  2. 安装 Tomcat

    sudo apt install tomcat9 tomcat9-admin   # Ubuntu
    sudo yum install tomcat9                 # CentOS
  3. 部署 WAR 包

    sudo cp target/your-app.war /var/lib/tomcat9/webapps/
  4. 配置 Nginx 反向X_X(可选)

    server {
       listen 80;
       server_name yourdomain.com;
    
       location / {
           proxy_pass http://127.0.0.1:8080;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
       }
    }

🔒 安全与优化建议

项目 建议
非 root 运行 始终使用普通用户运行应用
防火墙 只开放必要端口(如 80, 443),禁止直接暴露 8080
HTTPS 使用 Nginx 配置 SSL 证书
日志轮转 使用 logback 配置 RollingFileAppender
监控 集成 Actuator + Prometheus + Grafana
健康检查 暴露 /actuator/health 端点供负载均衡器检测

📌 总结推荐

场景 推荐方案
个人项目/测试 方法一(直接运行)
生产环境单应用 方法二(systemd) ✅
微服务/多实例 方法三(Docker)
传统企业架构 方法四(Tomcat+Nginx)

对于大多数 Spring Boot 项目,使用方法二(systemd)是最平衡稳定性、可维护性和简单性的选择。

如有具体需求(如数据库连接、环境变量注入、多环境配置等),可进一步补充说明!

未经允许不得转载:云服务器 » Linux服务器上如何部署Spring Boot Java项目?