在 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. 上传到服务器
使用 scp 或 rsync:
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技术博