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

这是一份从购买服务器到项目上线的腾讯云 ECS 部署 SpringBoot 项目全攻略。我们将按照逻辑顺序,分为 准备阶段、环境配置、项目打包、上传部署、反向X_X(Nginx)、安全与监控 六个步骤。


📌 前置准备

  1. 一台腾讯云 ECS 服务器(推荐 CentOS 7.9+ 或 Ubuntu 20.04+,配置建议 2核4G 起步)。
  2. 本地开发环境:已安装 JDK、Maven/Gradle、IDEA。
  3. 远程连接工具
    • Windows: Xshell, FinalShell, 或 MobaXterm。
    • Mac/Linux: Terminal (SSH)。
    • 新手推荐:FinalShell(自带SFTP文件传输,可视化好)。
  4. 域名(可选):如果需要通过域名访问,需提前在腾讯云 DNSPod 解析域名到 ECS 公网 IP。

第一步:服务器基础环境搭建

登录服务器后,我们需要安装运行 SpringBoot 所需的软件:JDKMySQL(如果数据库在另一台机器则跳过此步),以及 Nginx(用于反向X_X和静态资源托管)。

注意:以下命令以 CentOS 7 为例,Ubuntu 用户请将 yum 替换为 apt-get

1. 更新系统

sudo yum update -y

2. 安装 JDK 11 或 17(SpringBoot 推荐版本)

# 安装 OpenJDK 11
sudo yum install java-11-openjdk-devel -y

# 验证安装
java -version

3. 安装 MySQL 8.0(可选,若使用云数据库 RDS 可跳过)

# 添加 MySQL Yum 仓库
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装 MySQL Server
sudo yum install mysql-server -y
# 启动并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 查看临时密码并修改 root 密码
sudo grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation

4. 安装 Nginx(用于反向X_X)

sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

第二步:防火墙与安全组配置

这是新手最容易踩坑的地方!必须开放端口,否则无法访问。

1. 云服务器安全组(腾讯云控制台)

  1. 登录 腾讯云控制台。
  2. 进入 CVM 云服务器 -> 找到你的实例 -> 点击 安全组
  3. 添加规则:
    • 入方向:允许 TCP 协议,端口 80 (HTTP), 443 (HTTPS), 22 (SSH)。
    • 如果你直接通过 IP:端口访问后端(不推荐生产环境),还需开放你的 SpringBoot 端口(如 8080)。但本教程采用 Nginx 反向X_X,故只需开放 80/443。

2. 服务器内部防火墙(firewalld)

# 启动防火墙
sudo systemctl start firewalld
# 开放 HTTP 和 HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载配置
sudo firewall-cmd --reload

第三步:本地 SpringBoot 项目打包

在 IDEA 中执行以下步骤:

  1. 修改配置文件 (application.yml)

    server:
      port: 8080 # 内部端口,对外不暴露
    spring:
      datasource:
        url: jdbc:mysql://<你的ECS内网IP或网络IP>:3306/your_db?useSSL=false&serverTimezone=UTC
        username: root
        password: your_password
      jpa:
        hibernate:
          ddl-auto: update # 生产环境建议设为 none 或 validate

    ⚠️ 重要:确保数据库地址正确。如果是本地 MySQL,填 ECS 的内网 IP;如果是云数据库 RDS,填 RDS 的连接地址。

  2. 打包项目

    • 打开 Maven 面板 -> Lifecycle -> 双击 clean
    • 然后双击 package
    • 等待构建成功,会在 target/ 目录下生成 .jar 文件(例如 myapp-0.0.1-SNAPSHOT.jar)。

第四步:上传项目到服务器

使用 FinalShell、Xftp 或 SFTP 将 .jar 文件上传到服务器。

推荐目录结构:

mkdir -p /opt/myapp
cp myapp-0.0.1-SNAPSHOT.jar /opt/myapp/

第五步:配置 Nginx 反向X_X

为了让用户通过 http://你的域名http://IP 访问项目,而不是 http://IP:8080,我们需要配置 Nginx。

  1. 编辑 Nginx 配置文件:

    sudo vi /etc/nginx/conf.d/default.conf
    # 或者创建新文件:sudo vi /etc/nginx/conf.d/myapp.conf
  2. 写入以下内容(假设监听 80 端口):

    server {
       listen       80;
       server_name  localhost; # 如果有域名,改为你的域名,如 www.example.com
    
       location / {
           proxy_pass http://127.0.0.1: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;
           proxy_set_header X-Forwarded-Proto $scheme;
       }
    }
  3. 测试配置并重载 Nginx:

    sudo nginx -t
    sudo systemctl reload nginx

第六步:启动 SpringBoot 项目

方法一:后台运行(简单快速)

cd /opt/myapp
nohup java -jar myapp-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
  • nohup: 忽略挂起信号,退出终端后进程继续运行。
  • > app.log 2>&1: 将标准输出和错误日志重定向到 app.log
  • &: 放入后台执行。

方法二:使用 Systemd 管理(推荐,生产环境最佳实践)

创建服务文件以便开机自启和管理:

sudo vi /etc/systemd/system/myapp.service

内容如下:

[Unit]
Description=My SpringBoot Application
After=syslog.target network.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/myapp/myapp-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

第七步:验证与上线

  1. 检查应用状态

    # 查看实时日志
    tail -f /opt/myapp/app.log
    # 或 systemd 日志
    journalctl -u myapp -f

    看到 Started Application in ... seconds 表示启动成功。

  2. 浏览器访问

    • 打开浏览器,输入 http://<你的ECS公网IP>
    • 如果能看到 Swagger UI 或首页接口返回 JSON,说明部署成功!
  3. 绑定域名(可选)

    • 在腾讯云的 Nginx 配置中,将 server_name 改为你购买的域名。
    • 确保域名已在 DNSPod 解析到该 ECS 公网 IP。

🔒 生产环境最佳实践建议

  1. 禁止直接访问 8080 端口
    • 在腾讯云安全组中,只开放 80 和 443,不要开放 8080。这样即使有人扫描端口,也无法直接访问后端。
  2. 使用 HTTPS
    • 申请免费 SSL 证书(腾讯云有免费 DV 证书)。
    • 在 Nginx 中配置 HTTPS,强制 HTTP 跳转 HTTPS。
  3. 日志轮转
    • 使用 logback-spring.xml 配置日志滚动策略,避免 app.log 无限增长占满磁盘。
  4. 数据库备份
    • 定期备份 MySQL 数据,或使用腾讯云数据库自动备份功能。
  5. 监控告警
    • 开启腾讯云云监控,设置 CPU、内存、带宽告警。
  6. 环境变量管理
    • 不要在 jar 包硬编码配置,使用 --spring.profiles.active=prod 或外部配置文件方式加载不同环境配置。

恭喜你! 现在你的 SpringBoot 项目已经成功部署在腾讯云 ECS 上,并通过 Nginx 对外提供服务了。如有问题,欢迎随时提问!

未经允许不得转载:CLOUD技术博 » 腾讯云ECS云服务器部署SpringBoot项目从零到上线全攻略?