在 Linux 服务器上部署 Spring Boot Java 项目通常有几种常见方式,从简单到复杂依次为:
- 直接运行 JAR 包(最常用、最简单)
- 使用 systemd 服务管理(推荐生产环境)
- 使用 Docker 容器化部署
- 使用 Nginx + Tomcat 反向X_X(传统 WAR 部署)
下面我将详细介绍每种方法,并重点推荐前两种。
✅ 前提条件
确保服务器已安装:
- JDK 8+(推荐 JDK 11 或 17)
- Maven/Gradle(用于打包,如果本地打包好则无需)
- 网络权限(如需访问数据库、Redis 等)
🚀 方法一:直接运行 JAR 包(适合测试/轻量级)
步骤:
-
本地打包项目
mvn clean package -DskipTests生成
target/your-app.jar -
上传 JAR 到服务器
scp target/your-app.jar user@server:/opt/app/ -
在服务器上运行
cd /opt/app java -jar your-app.jar
⚠️ 缺点:终端关闭后进程终止;无法后台运行;无日志轮转。
🛡️ 方法二:使用 systemd 管理服务(✅ 推荐生产环境)
这是最稳定、可维护性最强的方式。
步骤:
-
创建应用目录和日志目录
sudo mkdir -p /opt/app/myapp sudo mkdir -p /var/log/myapp sudo chown -R $USER:$USER /opt/app/myapp -
上传 JAR 文件
cp your-app.jar /opt/app/myapp/ -
创建 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加载外部环境变量文件
-
启用并启动服务
sudo systemctl daemon-reload sudo systemctl enable myapp.service sudo systemctl start myapp.service -
查看状态和日志
sudo systemctl status myapp.service sudo journalctl -u myapp.service -f # 实时查看日志 -
开机自启
sudo systemctl enable myapp.service
🐳 方法三:Docker 容器化部署(适合微服务/多实例)
步骤:
-
编写 Dockerfile
FROM openjdk:17-jdk-slim COPY your-app.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] -
构建镜像
docker build -t myapp . -
运行容器
docker run -d -p 8080:8080 --name myapp-container myapp -
查看日志
docker logs -f myapp-container -
设置开机自启
docker update --restart=unless-stopped myapp-container
💡 可使用
docker-compose.yml管理多个服务(如 MySQL、Redis)。
🌐 方法四:Nginx + WAR 包部署(传统方式,不推荐新项目)
适用于需要前端静态资源与后端分离的场景。
-
打包为 WAR
<!-- pom.xml 中修改 --> <packaging>war</packaging>mvn clean package -DskipTests -
安装 Tomcat
sudo apt install tomcat9 tomcat9-admin # Ubuntu sudo yum install tomcat9 # CentOS -
部署 WAR 包
sudo cp target/your-app.war /var/lib/tomcat9/webapps/ -
配置 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)是最平衡稳定性、可维护性和简单性的选择。
如有具体需求(如数据库连接、环境变量注入、多环境配置等),可进一步补充说明!
云服务器