在腾讯云(注意:腾讯云的云服务器产品正式名称为 CVM,而非 ECS,ECS 是阿里云的产品称呼,虽然两者功能类似,但术语要准确)上部署 SpringBoot 项目,核心逻辑其实非常清晰:准备环境 -> 上传代码 -> 配置服务 -> 域名解析 -> 安全加固。
下面是一份从“零”到“上线”的实操指南,涵盖 CentOS 7/8 或 Ubuntu 系统下的标准生产级部署流程。
第一阶段:前期准备与资源购买
-
选购 CVM 实例
- 地域选择:离你目标用户最近的地域(如华南、华东)。如果面向全国,可选广州或上海。
- 实例规格:SpringBoot 应用对内存敏感。建议至少 2核4G 起步。如果是微服务集群,则需根据具体负载评估。
- 操作系统:推荐 CentOS 7.9(生态最成熟,教程最多)或 Ubuntu 20.04/22.04 LTS。本文以 CentOS 为例。
- 带宽:开发测试阶段可选按量付费或低带宽;生产环境建议固定带宽 + CDN 提速静态资源,或者使用弹性公网 IP (EIP) 方便迁移。
-
本地打包项目
- 确保你的
pom.xml中<packaging>类型为jar。 - 执行
mvn clean package -DskipTests。 - 在
target目录下找到生成的.jar文件。
- 确保你的
-
安全组配置(关键!)
- 进入腾讯云控制台 -> CVM -> 安全组。
- 入方向规则必须放行:
- 22端口:SSH 登录用(建议限制仅允许你的 IP 访问,提升安全性)。
- 8080端口(或你自定义的应用端口):Web 服务监听端口。
- 443端口:如果后续接 HTTPS。
- 80端口:如果需要做 HTTP 重定向到 HTTPS。
第二阶段:服务器基础环境搭建
通过 SSH 连接到你的 CVM 实例。
1. 安装 JDK
SpringBoot 依赖 Java 运行环境。推荐使用 OpenJDK 11 或 17(对应 SpringBoot 2.x/3.x)。
# CentOS 示例
sudo yum install -y java-11-openjdk java-11-openjdk-devel
# 验证安装
java -version
2. 创建应用目录
不要随意把文件扔在 /root 下,规范化管理:
sudo mkdir -p /opt/app/springboot-demo
cd /opt/app/springboot-demo
3. 上传 Jar 包
使用 scp 命令从本地上传,或使用 SFTP 工具(如 FileZilla、WinSCP)直接拖拽。
# 本地终端执行
scp target/springboot-demo.jar root@<你的CVM公网IP>:/opt/app/springboot-demo/
第三阶段:后台运行与进程管理(核心)
直接在终端运行 java -jar app.jar & 是最初级的方式,一旦关闭终端或网络断开,服务就挂了。生产环境必须使用守护进程管理。
方案 A:使用 Systemd(推荐,Linux 标准做法)
-
创建服务文件:
sudo vi /etc/systemd/system/springboot-demo.service -
写入以下内容(注意修改路径和用户名):
[Unit] Description=SpringBoot Demo Application After=syslog.target network.target [Service] User=root Group=root ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/app/springboot-demo/springboot-demo.jar SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target-Xms512m -Xmx1024m:根据服务器内存调整 JVM 堆大小,避免 OOM。Restart=on-failure:服务崩溃自动重启。
-
启动并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start springboot-demo sudo systemctl enable springboot-demo -
查看状态和日志:
sudo systemctl status springboot-demo sudo journalctl -u springboot-demo -f # 实时查看日志
方案 B:使用 NoHup(简单粗暴,适合临时测试)
nohup java -jar springboot-demo.jar > app.log 2>&1 &
缺点:无法优雅重启,日志轮转需手动配置,不推荐生产使用。
第四阶段:反向X_X与域名绑定(Nginx)
直接暴露 8080 端口给公网是不安全的,且不支持 HTTPS。我们需要安装 Nginx 作为反向X_X,将 80/443 端口的请求转发到本地的 8080。
1. 安装 Nginx
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
2. 配置 Nginx
编辑配置文件:
sudo vi /etc/nginx/conf.d/springboot-demo.conf
内容如下:
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 为什么需要这些 Header? SpringBoot 获取真实 IP 和用户协议时依赖这些信息。
- 重载配置:
sudo nginx -t检查语法,然后sudo systemctl reload nginx。
3. 域名解析
- 去你的 DNS 服务商(或腾讯云云解析 DNS)添加一条 A 记录:
- 主机记录:
@或www - 记录值:你的 CVM 公网 IP
- TTL:600
- 主机记录:
等待 DNS 生效后,访问 http://your-domain.com 即可看到项目界面。
第五阶段:HTTPS 加密(Let’s Encrypt)
生产环境必须启用 HTTPS。使用免费证书 Certbot 是最便捷的方式。
-
安装 Certbot:
sudo yum install -y certbot python3-certbot-nginx -
申请并自动配置证书:
sudo certbot --nginx -d your-domain.com- 输入邮箱,同意条款。
- 选择是否强制跳转 HTTPS(建议选 2)。
- Certbot 会自动修改 Nginx 配置并续期脚本。
-
验证:浏览器地址栏出现小锁图标即成功。
第六阶段:数据库与持久层(重要补充)
如果你的 SpringBoot 项目连接 MySQL/MongoDB 等数据库:
- 自建数据库(不推荐新手):需要在 CVM 上再装一套 MySQL,占用资源,备份麻烦。
- 腾讯云云数据库 MySQL(TencentDB for MySQL)(强烈推荐):
- 在腾讯云控制台购买同地域的云数据库。
- 将云数据库的内网 IP 填入 SpringBoot 的
application.yml。 - 优势:内网通信无流量费、高可用、自动备份、性能更稳定。
- 配置示例:
spring: datasource: url: jdbc:mysql://cvm-mysql-xxxx.cdb.myqcloud.com:3306/mydb?useSSL=false&serverTimezone=UTC username: root password: your_password
第七阶段:运维监控与安全加固
- 防火墙:除了安全组,服务器内部也建议开启
firewalld或iptables,只开放必要端口。 - 日志轮转:Systemd 管理的日志由
journald处理,注意配置/etc/systemd/journald.conf防止日志占满磁盘。如果使用 Nginx 访问日志,需配置logrotate。 - 监控告警:
- 使用腾讯云 云监控 (Cloud Monitor) 添加 CVM 实例监控。
- 设置 CPU、内存、磁盘使用率阈值告警(短信/邮件通知)。
- 定期备份:
- 利用腾讯云 镜像服务 定期制作自定义镜像。
- 或者编写脚本定时备份数据库和数据文件到 COS(对象存储)。
常见问题排查 (Troubleshooting)
-
访问 404 或 502 Bad Gateway:
- 检查
systemctl status springboot-demo服务是否存活。 - 检查 Nginx 错误日志:
cat /var/log/nginx/error.log。 - 确认 SpringBoot 监听的是
0.0.0.0而不是127.0.0.1(除非你用 Unix Socket)。
- 检查
-
JVM OOM (Out Of Memory):
- 调整
-Xmx参数。 - 检查是否有内存泄漏。
- 考虑升级 CVM 配置。
- 调整
-
DNS 解析慢或不生效:
- 使用
ping your-domain.com检查解析 IP 是否正确。 - 清除本地 DNS 缓存或更换公共 DNS(如 114.114.114.114, 8.8.8.8)测试。
- 使用
-
跨域问题 (CORS):
- 前端和后端的域名不一致时,需在 SpringBoot 中添加
@CrossOrigin注解或配置全局 CORS 过滤器。
- 前端和后端的域名不一致时,需在 SpringBoot 中添加
总结流程图
graph TD
A[本地 Maven 打包 Jar] --> B[上传至 CVM /opt/app/]
B --> C[安装 JDK & Nginx]
C --> D[配置 Systemd 守护进程]
D --> E[启动 SpringBoot 服务]
E --> F[Nginx 反向X_X 80->8080]
F --> G[配置域名 DNS 解析]
G --> H[Certbot 申请 HTTPS]
H --> I[连接腾讯云云数据库 TDSQL/MySQL]
I --> J[上线完成]
按照以上步骤,你可以构建一个稳定、安全、可维护的生产级 SpringBoot 部署架构。对于初学者,Systemd + Nginx + 云数据库 是目前国内最主流且性价比最高的组合。
CLOUD云枢