速卖通素材
奋斗

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

服务器

这是一份详细的腾讯云 ECS 云服务器部署 Spring Boot 项目从零到上线的全攻略。

本指南假设你使用的是 Linux 系统(推荐 CentOS 7/8 或 Ubuntu 20.04+),因为这是生产环境的主流选择。我们将按照逻辑顺序分为:前期准备 -> 服务器环境搭建 -> 项目打包与上传 -> 运行配置 -> 域名与 HTTPS -> 安全加固


第一阶段:前期准备

  1. 购买云服务器 (ECS)

    • 登录腾讯云控制台,购买一台 ECS 实例。
    • 推荐配置:入门级 2核4G 即可满足大多数中小型 Spring Boot 应用。
    • 操作系统:选择 CentOS 7.9Ubuntu 20.04 LTS(这里以 CentOS 为例,命令通用性较强)。
    • 安全组设置:在购买时或之后,务必在安全组中放行以下端口:
      • 22 (SSH连接)
      • 80 (HTTP访问)
      • 443 (HTTPS访问)
      • 你的SpringBoot端口 (默认通常是 8080,如果后续用 Nginx 反向X_X,则只需开放 80/443)。
  2. 准备本地开发环境

    • JDK 1.8 或 11/17 (取决于你的 Spring Boot版本)。
    • Maven 3.6+。
    • Git (可选,用于拉取代码)。
  3. 获取服务器信息

    • 公网 IP 地址。
    • SSH 用户名 (root 或 ubuntu)。
    • SSH 密码或私钥文件 (.pem)。

第二阶段:服务器基础环境搭建

通过终端(Mac/Linux)或 PowerShell/Xshell/SecureCRT (Windows) 连接到服务器:

ssh root@<你的公网IP>
# 输入密码登录

1. 更新系统并安装基础工具

# CentOS
yum update -y
yum install -y wget curl git vim net-tools unzip

# Ubuntu
apt update && apt upgrade -y
apt install -y wget curl git vim net-tools unzip

2. 安装 JDK

Spring Boot 需要 Java 环境。推荐使用 OpenJDK。

# 检查是否已安装 java -version
# 如果没有,安装 OpenJDK 11 (兼容性好)
yum install -y java-11-openjdk-devel

# 验证安装
java -version
javac -version

注:确保 JAVA_HOME 环境变量正确,通常 yum 安装后会自动配置。

3. 安装 Nginx (强烈建议)

虽然可以直接运行 Spring Boot,但在生产环境中,使用 Nginx 作为反向X_X 是最佳实践。它可以处理静态资源、SSL 证书、负载均衡和隐藏后端端口。

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

第三阶段:Spring Boot 项目打包与上传

1. 本地修改 application.yml / application.properties

在生产环境中,你需要调整一些配置:

  • 数据库连接:确保数据库地址指向腾讯云上的 RDS 或自建 MySQL。如果是自建,记得在 MySQL 允许远程连接(或者使用内网 IP 连接更稳定)。
  • 端口:可以将 server.port 改为 8080(Nginx 会转发到这里),或者任意未被占用的端口。
  • Profile:激活生产环境 profile,例如 spring.profiles.active=prod

2. 打包项目

在项目根目录执行:

mvn clean package -DskipTests

成功后,在 target/ 目录下会生成一个 .jar 文件,例如 myapp-0.0.1-SNAPSHOT.jar

3. 上传文件到服务器

使用 scp 命令从本地上传:

# 语法: scp <本地路径> <用户名>@<服务器IP>:<远程路径>
scp target/myapp-0.0.1-SNAPSHOT.jar root@<你的公网IP>:/home/app/

注意:先在服务器上创建目录 mkdir -p /home/app


第四阶段:运行 Spring Boot 项目

方式一:前台运行(仅测试用,不推荐)

cd /home/app
java -jar myapp-0.0.1-SNAPSHOT.jar

缺点:关闭终端进程就死了。

方式二:后台运行(推荐新手)

nohup java -jar myapp-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
  • nohup: 忽略挂起信号。
  • > app.log: 日志输出到文件。
  • &: 后台运行。

方式三:使用 Systemd 管理进程(生产环境标准做法)✅

这样可以让服务开机自启,崩溃自动重启。

  1. 创建服务文件:

    vi /etc/systemd/system/myapp.service
  2. 写入以下内容(请根据实际路径修改):

    [Unit]
    Description=My Spring Boot Application
    After=syslog.target network.target
    
    [Service]
    User=root
    ExecStart=/usr/bin/java -jar /home/app/myapp-0.0.1-SNAPSHOT.jar
    SuccessExitStatus=143
    TimeoutStopSec=10
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
  3. 启动并设置开机自启:

    systemctl daemon-reload
    systemctl start myapp
    systemctl enable myapp
    systemctl status myapp
  4. 查看日志:

    journalctl -u myapp -f

第五阶段:配置 Nginx 反向X_X

现在 Spring Boot 运行在 8080 端口,我们希望用户通过 http://<IP> 直接访问。

  1. 编辑 Nginx 配置:

    vi /etc/nginx/conf.d/default.conf
    # 或者新建一个文件 vi /etc/nginx/conf.d/myapp.conf
  2. 添加或修改 server 块:

    server {
        listen 80;
        server_name _; # 或者填写你的域名
    
        location / {
            proxy_pass http://127.0.0.1:8080; # 指向 Spring Boot 端口
            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;
        }
    
        # 可选:静态资源单独处理
        location /static/ {
            alias /home/app/static/;
            expires 30d;
        }
    }
  3. 测试并重载 Nginx:

    nginx -t
    systemctl reload nginx
  4. 验证:在浏览器访问 http://<你的公网IP>,应该能看到 Spring Boot 的欢迎页面或接口响应。


第六阶段:绑定域名与 HTTPS (SSL)

为了安全和 SEO,建议使用域名 + HTTPS。

1. 解析域名

在腾讯云 DNS 控制台或其他域名服务商处,将你的域名 A 记录指向 ECS 的公网 IP。

2. 申请 SSL 证书

  • 免费方案:使用 Let’s Encrypt (certbot)。
  • 腾讯云服务:腾讯云提供免费的 DV SSL 证书,可在控制台申请并下载。

这里演示使用 Certbot (自动续签方便):

  1. 安装 Certbot:

    yum install -y certbot python3-certbot-nginx
  2. 获取证书并自动配置 Nginx:

    # 请将 example.com 替换为你的真实域名
    certbot --nginx -d example.com -d www.example.com
    • 按提示输入邮箱,同意条款。
    • 选择是否重定向 HTTP 到 HTTPS(选 2 推荐)。
    • Certbot 会自动修改 Nginx 配置并申请证书。
  3. 验证 HTTPS:
    访问 https://example.com,看是否有小锁标志。


第七阶段:安全加固与优化

  1. 防火墙设置
    既然用了 Nginx 和 SSH,只需要开放必要端口。

    # CentOS Firewalld
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=443/tcp --permanent
    firewall-cmd --zone=public --add-port=22/tcp --permanent
    firewall-cmd --reload
  2. 禁用 Root 远程登录(高安全级别)

    • 创建一个普通用户并赋予 sudo 权限。
    • 修改 /etc/ssh/sshd_config,设置 PermitRootLogin no
    • 重启 sshd: systemctl restart sshd
  3. 数据库安全

    • 如果使用腾讯云 RDS,确保白名单只包含 ECS 的内网 IP。
    • 如果使用自建 MySQL,不要暴露 3306 端口到公网,只在应用服务器内部连接。
  4. 日志轮转
    防止 app.log 无限增长撑爆磁盘。可以使用 logrotate 配置每天切割日志。


第八阶段:持续集成/持续部署 (CI/CD) 进阶

当项目迭代频繁时,手动上传 jar 包效率低。建议搭建 CI/CD 流程:

  1. GitHub Actions / GitLab CI

    • 代码 Push 到 GitHub/GitLab。
    • 触发流水线:Maven 打包 -> 构建 Docker 镜像 (可选) -> SCP 上传 Jar 包到服务器。
    • 服务器端脚本接收后自动重启 Service。
  2. Docker 化部署(推荐)
    如果项目复杂,建议将 Spring Boot 打包成 Docker 镜像。

    • 编写 Dockerfile
    • 服务器安装 Docker。
    • 使用 docker-compose 管理容器、Nginx 和数据库。

常见问题排查 (Troubleshooting)

问题 可能原因 解决方案
502 Bad Gateway Nginx 无法连接到后端 检查 Spring Boot 是否在运行 (ps -ef | grep java);检查端口是否正确;检查防火墙。
403 Forbidden 权限问题 检查 jar 包和执行用户的读写权限;检查 SELinux (临时 setenforce 0 测试)。
数据库连接超时 网络不通 检查 MySQL 是否允许远程连接;检查云数据库白名单;检查是否使用了内网 IP。
内存溢出 (OOM) JVM 参数未设置 启动时指定 -Xms512m -Xmx512m,避免占用过多服务器内存。
中文乱码 服务器编码不一致 确保服务器 locale 为 UTF-8,Java 启动加 -Dfile.encoding=UTF-8

总结 Checklist

  1. [ ] ECS 购买并开通安全组 (22, 80, 443)。
  2. [ ] 安装 JDK, Nginx。
  3. [ ] 本地 Maven 打包成功。
  4. [ ] Jar 包上传至服务器。
  5. [ ] 配置 Systemd 服务并启动。
  6. [ ] 配置 Nginx 反向X_X。
  7. [ ] 配置域名解析。
  8. [ ] 配置 HTTPS (SSL)。
  9. [ ] 测试访问正常。

按照这个步骤操作,你可以稳稳地将 Spring Boot 项目部署到腾讯云并正式上线!

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