在腾讯云 ECS(云服务器)上部署 SpringBoot 项目是一个经典且实用的运维场景。以下是一份从零到上线的全流程攻略,涵盖了环境准备、项目打包、上传部署、服务管理及安全配置等关键环节。
📋 前置准备
- 本地开发环境:已安装 JDK、Maven/Gradle、IDEA。
- 腾讯云账号:已注册并实名认证。
- ECS 实例:已在腾讯云控制台购买一台 Linux 服务器(推荐 Ubuntu 20.04+ 或 CentOS 7+)。
- 网络规划:确认服务器的公网 IP、端口号(默认 8080,建议修改为 80 或 8080 以外的端口以增强安全性)。
第一步:登录与基础环境搭建
1. SSH 连接服务器
使用终端(Mac/Linux)或工具(如 Xshell、PuTTY、Windows Terminal)连接服务器:
ssh root@<你的公网IP>
# 输入密码后进入
2. 安装 Java (JDK)
SpringBoot 依赖 Java 运行环境。以 Ubuntu 为例:
# 更新软件源
sudo apt update
# 安装 OpenJDK 17 (推荐版本,根据项目需求选择)
sudo apt install openjdk-17-jdk -y
# 验证安装
java -version
(若使用 CentOS,请使用 yum install java-17-openjdk-devel)
3. 安装 Maven (可选,用于远程构建)
如果希望直接在服务器上打包,需安装 Maven;如果本地打包,可跳过此步。
sudo apt install maven -y
mvn -v
4. 安装 Nginx (作为反向X_X,非必须但推荐)
用于负载均衡、静态资源托管及隐藏后端端口。
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
第二步:本地打包项目
在本地 IDE 中完成代码编写后,进行打包:
- 修改配置文件:将
application.yml或application.properties中的数据库连接、Redis 地址等改为生产环境配置(切勿硬编码敏感信息)。 - 执行打包命令:
mvn clean package -DskipTests注意:添加
-DskipTests跳过测试以加快构建速度。 - 获取产物:打包成功后,在
target目录下会生成.jar文件(例如my-app-0.0.1-SNAPSHOT.jar)。
第三步:上传项目到服务器
推荐使用 scp 命令或 SFTP 工具(如 WinSCP、FileZilla)。
方法 A:使用 scp 命令
# 语法:scp <本地路径> <用户名>@<服务器IP>:<服务器目标路径>
scp target/my-app-0.0.1-SNAPSHOT.jar root@<你的公网IP>:/opt/apps/
提示:先确保服务器目录存在 (mkdir -p /opt/apps)。
方法 B:使用 SFTP 图形化工具
直接拖拽 jar 包到 /opt/apps 目录即可。
第四步:启动 SpringBoot 应用
1. 创建运行脚本 (推荐)
为了方便管理,创建一个 start.sh 脚本:
cd /opt/apps
vim start.sh
写入以下内容:
#!/bin/bash
APP_NAME=my-app
JAR_FILE=your-project-name.jar # 替换为你的 jar 文件名
# 检查进程是否已存在
PID=$(ps -ef | grep $JAR_FILE | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "Application is already running with PID: $PID"
else
echo "Starting application..."
nohup java -jar $JAR_FILE > /dev/null 2>&1 &
echo "Started successfully!"
fi
赋予执行权限:
chmod +x start.sh
./start.sh
2. 验证启动
查看日志和进程:
# 查看进程
ps -ef | grep your-project-name.jar
# 实时查看日志 (如果有日志输出到 console)
tail -f /var/log/syslog
# 或者如果你重定向了日志文件
tail -f nohup.out
第五步:配置防火墙与安全组
这是新手最容易忽略的一步,导致“能连 SSH 但无法访问网页”。
1. 云服务器安全组 (腾讯云控制台)
- 登录 腾讯云控制台 -> 云服务器 -> 安全组。
- 找到你 ECS 绑定的安全组规则。
- 添加入方向规则:
- 协议:TCP
- 端口范围:8080 (或你配置的端口)
- 来源 IP:
0.0.0.0/0(允许所有,生产环境建议限制特定 IP)。
2. 服务器内部防火墙 (UFW/CentOS Firewall)
Ubuntu (UFW):
sudo ufw allow 8080/tcp
sudo ufw enable
CentOS (firewalld):
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
第六步:配置 Nginx 反向X_X (最佳实践)
直接暴露 8080 端口不安全且不专业。通过 Nginx 监听 80 端口,转发请求到 SpringBoot。
-
编辑 Nginx 配置:
sudo vim /etc/nginx/sites-available/default(如果是 CentOS,通常在
/etc/nginx/conf.d/下新建文件) -
写入配置:
server { listen 80; server_name your-domain.com; # 建议使用域名,若无域名可用 IP location / { proxy_pass http://localhost:8080; # 指向 SpringBoot 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } -
重载 Nginx:
sudo nginx -t # 检查配置语法 sudo systemctl reload nginx
此时,访问 http://<你的公网IP> 即可看到项目页面。
第七步:设置开机自启 (Systemd)
为了让服务在服务器重启后自动运行,建议配置 Systemd 服务。
-
创建服务文件:
sudo vim /etc/systemd/system/my-springboot.service -
写入内容:
[Unit] Description=My Spring Boot Application After=syslog.target network.target [Service] User=root WorkingDirectory=/opt/apps ExecStart=/usr/bin/java -jar /opt/apps/your-project-name.jar Restart=always SuccessExitStatus=143 [Install] WantedBy=multi-user.target -
启用并启动:
sudo systemctl daemon-reload sudo systemctl enable my-springboot.service sudo systemctl start my-springboot.service sudo systemctl status my-springboot.service
✅ 上线前检查清单
| 检查项 | 状态 | 说明 |
|---|---|---|
| Java 版本 | ✅ | 确认 java -version 符合项目要求 |
| 端口开放 | ✅ | 云控制台安全组 + 系统防火墙均放行 |
| Nginx X_X | ✅ | 访问 80 端口能正确转发到 8080 |
| 日志监控 | ✅ | 能够查看 nohup.out 或日志文件无报错 |
| 数据库连接 | ✅ | 确认数据库白名单已添加服务器内网/公网 IP |
| 定时任务 | ✅ | 已配置 Systemd 开机自启 |
💡 进阶优化建议
- 域名解析:购买域名并在 DNS 解析到服务器 IP,体验更佳。
- HTTPS:使用 Let’s Encrypt (Certbot) 免费申请 SSL 证书,配置 Nginx 开启 HTTPS。
- 日志轮转:配置 Logrotate 防止日志文件过大占满磁盘。
- 备份策略:定期备份数据库和重要配置文件到腾讯云对象存储 (COS)。
- 监控告警:开启腾讯云云监控,对 CPU、内存、带宽设置阈值告警。
按照以上步骤操作,你的 SpringBoot 项目就能稳定地运行在腾讯云 ECS 上了!如果在具体某一步遇到报错,欢迎随时提问。
云服务器