记录将 Spring Boot 后端 jar 包部署到阿里云 ECS 服务器的流程,包括 JDK 安装、打包上传、systemd 服务管理和常见问题。
一、服务器准备
购买 ECS 后拿到公网 IP(例如 47.xx.xx.xx),SSH 登录:
ssh root@47.xx.xx.xx
安装 JDK
yum install -y java-17-openjdk-devel
java -version
配置安全组
在阿里云控制台 → 安全组规则,开放端口:
| 端口 | 用途 |
|---|---|
| 22 | SSH |
| 8080 | 后端 API |
二、打包上传
Maven 打包
在本地项目目录执行:
mvn clean package -DskipTests
# 生成 target/myapp.jar
上传到服务器
scp target/myapp.jar root@47.xx.xx.xx:/opt/app/
三、启动方式
方式一:nohup(临时测试用)
在服务器创建 /opt/app/start.sh:
#!/bin/bash
nohup java -jar /opt/app/myapp.jar --server.port=8080 > /opt/app/app.log 2>&1 &
echo $! > /opt/app/app.pid
echo "应用已启动, PID: $(cat /opt/app/app.pid)"
方式二:Systemd 服务(推荐生产环境)
创建 /etc/systemd/system/myapp.service:
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /opt/app/myapp.jar --server.port=8080
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
启用并启动服务:
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
systemctl status myapp
常用管理命令:
| 命令 | 作用 |
|---|---|
systemctl start myapp | 启动 |
systemctl stop myapp | 停止 |
systemctl restart myapp | 重启 |
systemctl status myapp | 查看状态 |
journalctl -u myapp -f | 实时查看日志 |
四、端口检查
检查防火墙
firewall-cmd --state
# 开放端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
注意:阿里云安全组优先级高于系统防火墙,安全组未放行端口则系统防火墙配置无效。排查时先查安全组。
验证服务
curl http://localhost:8080/api/xxx
五、常见问题
后端启动报错
journalctl -u myapp -n 50 # 查看最近 50 行日志
常见原因:
- 端口被占用 →
netstat -tlnp查看 - 数据库连接失败 → 检查数据库地址、用户名、密码
- Redis/Kafka 未启动 → 检查中间件服务状态
外部访问不通
排查顺序:安全组 → 防火墙 → 应用监听地址
# 确认应用监听在 0.0.0.0 而不是 127.0.0.1
netstat -tlnp | grep 8080
如果显示 127.0.0.1:8080,则外网无法访问,需改为 0.0.0.0。
总结
后端部署核心步骤:
Maven 打包 → scp 上传 → systemd 管理 → 安全组/防火墙放行 → 验证
systemd 的好处:开机自启、崩溃自动重启、统一日志管理。