腾讯云ECS云服务器部署SpringBoot项目从零到上线全攻略?

在腾讯云(注意:腾讯云的云服务器产品正式名称为 CVM,而非 ECS,ECS 是阿里云的产品称呼,虽然两者功能类似,但术语要准确)上部署 SpringBoot 项目,核心逻辑其实非常清晰:准备环境 -> 上传代码 -> 配置服务 -> 域名解析 -> 安全加固

下面是一份从“零”到“上线”的实操指南,涵盖 CentOS 7/8 或 Ubuntu 系统下的标准生产级部署流程。


第一阶段:前期准备与资源购买

  1. 选购 CVM 实例

    • 地域选择:离你目标用户最近的地域(如华南、华东)。如果面向全国,可选广州或上海。
    • 实例规格:SpringBoot 应用对内存敏感。建议至少 2核4G 起步。如果是微服务集群,则需根据具体负载评估。
    • 操作系统:推荐 CentOS 7.9(生态最成熟,教程最多)或 Ubuntu 20.04/22.04 LTS。本文以 CentOS 为例。
    • 带宽:开发测试阶段可选按量付费或低带宽;生产环境建议固定带宽 + CDN 提速静态资源,或者使用弹性公网 IP (EIP) 方便迁移。
  2. 本地打包项目

    • 确保你的 pom.xml<packaging> 类型为 jar
    • 执行 mvn clean package -DskipTests
    • target 目录下找到生成的 .jar 文件。
  3. 安全组配置(关键!)

    • 进入腾讯云控制台 -> 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 标准做法)

  1. 创建服务文件:

    sudo vi /etc/systemd/system/springboot-demo.service
  2. 写入以下内容(注意修改路径和用户名):

    [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:服务崩溃自动重启。
  3. 启动并设置开机自启:

    sudo systemctl daemon-reload
    sudo systemctl start springboot-demo
    sudo systemctl enable springboot-demo
  4. 查看状态和日志:

    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 是最便捷的方式。

  1. 安装 Certbot:

    sudo yum install -y certbot python3-certbot-nginx
  2. 申请并自动配置证书:

    sudo certbot --nginx -d your-domain.com
    • 输入邮箱,同意条款。
    • 选择是否强制跳转 HTTPS(建议选 2)。
    • Certbot 会自动修改 Nginx 配置并续期脚本。
  3. 验证:浏览器地址栏出现小锁图标即成功。


第六阶段:数据库与持久层(重要补充)

如果你的 SpringBoot 项目连接 MySQL/MongoDB 等数据库:

  1. 自建数据库(不推荐新手):需要在 CVM 上再装一套 MySQL,占用资源,备份麻烦。
  2. 腾讯云云数据库 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

第七阶段:运维监控与安全加固

  1. 防火墙:除了安全组,服务器内部也建议开启 firewalldiptables,只开放必要端口。
  2. 日志轮转:Systemd 管理的日志由 journald 处理,注意配置 /etc/systemd/journald.conf 防止日志占满磁盘。如果使用 Nginx 访问日志,需配置 logrotate
  3. 监控告警
    • 使用腾讯云 云监控 (Cloud Monitor) 添加 CVM 实例监控。
    • 设置 CPU、内存、磁盘使用率阈值告警(短信/邮件通知)。
  4. 定期备份
    • 利用腾讯云 镜像服务 定期制作自定义镜像。
    • 或者编写脚本定时备份数据库和数据文件到 COS(对象存储)。

常见问题排查 (Troubleshooting)

  1. 访问 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)。
  2. JVM OOM (Out Of Memory)

    • 调整 -Xmx 参数。
    • 检查是否有内存泄漏。
    • 考虑升级 CVM 配置。
  3. DNS 解析慢或不生效

    • 使用 ping your-domain.com 检查解析 IP 是否正确。
    • 清除本地 DNS 缓存或更换公共 DNS(如 114.114.114.114, 8.8.8.8)测试。
  4. 跨域问题 (CORS)

    • 前端和后端的域名不一致时,需在 SpringBoot 中添加 @CrossOrigin 注解或配置全局 CORS 过滤器。

总结流程图

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云枢 » 腾讯云ECS云服务器部署SpringBoot项目从零到上线全攻略?