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

在 Linux 服务器上部署 Spring Boot Java 项目,通常有以下几种主流方式。下面以最常用、最稳健的“打包成 JAR + 直接运行”方案为主,并补充其他可选方案供参考。


✅ 方案一:打包为可执行 JAR(推荐)

1. 本地打包

在开发机使用 Maven/Gradle 打包:

# Maven
mvn clean package -DskipTests

# Gradle
./gradlew bootJar -x test

生成文件示例:target/myapp-0.0.1-SNAPSHOT.jar

💡 确保 application.yml / application.properties 中配置了合适的环境(如 spring.profiles.active=prod),或支持通过环境变量覆盖。


2. 上传到服务器

使用 scprsync

scp target/myapp-0.0.1-SNAPSHOT.jar user@your-server:/opt/myapp/

或直接 rsync

rsync -avz target/myapp-0.0.1-SNAPSHOT.jar user@your-server:/opt/myapp/

3. 安装 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

4. 启动项目(基础版)

cd /opt/myapp
java -jar myapp-0.0.1-SNAPSHOT.jar 
  --spring.profiles.active=prod 
  --server.port=8080

⚠️ 注意:这种方式会在前台运行,关闭终端即停止。生产环境需配合守护进程管理。


🛡️ 生产级启动方案(推荐)

方案 A:使用 Systemd(Linux 主流)

创建服务文件

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

内容示例:

[Unit]
Description=My Spring Boot Application
After=syslog.target network.target

[Service]
User=myuser
Group=myuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar myapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
Environment="JAVA_OPTS=-Xms512m -Xmx1g"

[Install]
WantedBy=multi-user.target

启用并启动

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

常用命令

sudo systemctl status myapp      # 查看状态
sudo journalctl -u myapp -f      # 实时日志
sudo systemctl restart myapp     # 重启

方案 B:使用 Docker(容器化部署)

1. 编写 Dockerfile

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY myapp-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

2. 构建镜像

docker build -t myapp:v1 .

3. 运行容器

docker run -d 
  --name myapp 
  -p 8080:8080 
  -e SPRING_PROFILES_ACTIVE=prod 
  myapp:v1

✅ 优势:环境一致、易扩展、便于 CI/CD 集成。


🔐 安全与优化建议

项目 建议
非 root 用户运行 创建专用用户(如 myapp),避免用 root 启动
日志轮转 配置 logback 输出到文件 + logrotate 自动切割
端口暴露 仅开放必要端口;结合防火墙(ufw/firewalld)限制 IP
健康检查 启用 Actuator /actuator/health,配合 Nginx 或监控工具
内存调优 根据服务器配置设置 -Xms/-Xmx,避免 OOM
HTTPS 前端用 Nginx 反向X_X + SSL 证书(Let’s Encrypt)

🔄 自动化部署(进阶)

  • 使用 Jenkins/GitLab CI 自动拉取代码 → 打包 → 上传 → 重启服务
  • 或使用 Ansible/SaltStack 批量管理多服务器部署
  • 结合 Kubernetes 实现高可用集群部署(适合大规模场景)

需要我根据你的具体环境(如:CentOS vs Ubuntu、是否已有 Nginx、是否想用 Docker)提供定制化脚本或完整步骤吗?

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