这是一份从购买服务器到项目上线的腾讯云 ECS 部署 SpringBoot 项目全攻略。我们将按照逻辑顺序,分为 准备阶段、环境配置、项目打包、上传部署、反向X_X(Nginx)、安全与监控 六个步骤。
📌 前置准备
- 一台腾讯云 ECS 服务器(推荐 CentOS 7.9+ 或 Ubuntu 20.04+,配置建议 2核4G 起步)。
- 本地开发环境:已安装 JDK、Maven/Gradle、IDEA。
- 远程连接工具:
- Windows: Xshell, FinalShell, 或 MobaXterm。
- Mac/Linux: Terminal (SSH)。
- 新手推荐:FinalShell(自带SFTP文件传输,可视化好)。
- 域名(可选):如果需要通过域名访问,需提前在腾讯云 DNSPod 解析域名到 ECS 公网 IP。
第一步:服务器基础环境搭建
登录服务器后,我们需要安装运行 SpringBoot 所需的软件:JDK 和 MySQL(如果数据库在另一台机器则跳过此步),以及 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. 云服务器安全组(腾讯云控制台)
- 登录 腾讯云控制台。
- 进入 CVM 云服务器 -> 找到你的实例 -> 点击 安全组。
- 添加规则:
- 入方向:允许 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 中执行以下步骤:
-
修改配置文件 (
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 的连接地址。
-
打包项目:
- 打开 Maven 面板 -> Lifecycle -> 双击
clean。 - 然后双击
package。 - 等待构建成功,会在
target/目录下生成.jar文件(例如myapp-0.0.1-SNAPSHOT.jar)。
- 打开 Maven 面板 -> Lifecycle -> 双击
第四步:上传项目到服务器
使用 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。
-
编辑 Nginx 配置文件:
sudo vi /etc/nginx/conf.d/default.conf # 或者创建新文件:sudo vi /etc/nginx/conf.d/myapp.conf -
写入以下内容(假设监听 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; } } -
测试配置并重载 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
第七步:验证与上线
-
检查应用状态:
# 查看实时日志 tail -f /opt/myapp/app.log # 或 systemd 日志 journalctl -u myapp -f看到
Started Application in ... seconds表示启动成功。 -
浏览器访问:
- 打开浏览器,输入
http://<你的ECS公网IP>。 - 如果能看到 Swagger UI 或首页接口返回 JSON,说明部署成功!
- 打开浏览器,输入
-
绑定域名(可选):
- 在腾讯云的 Nginx 配置中,将
server_name改为你购买的域名。 - 确保域名已在 DNSPod 解析到该 ECS 公网 IP。
- 在腾讯云的 Nginx 配置中,将
🔒 生产环境最佳实践建议
- 禁止直接访问 8080 端口:
- 在腾讯云安全组中,只开放 80 和 443,不要开放 8080。这样即使有人扫描端口,也无法直接访问后端。
- 使用 HTTPS:
- 申请免费 SSL 证书(腾讯云有免费 DV 证书)。
- 在 Nginx 中配置 HTTPS,强制 HTTP 跳转 HTTPS。
- 日志轮转:
- 使用
logback-spring.xml配置日志滚动策略,避免app.log无限增长占满磁盘。
- 使用
- 数据库备份:
- 定期备份 MySQL 数据,或使用腾讯云数据库自动备份功能。
- 监控告警:
- 开启腾讯云云监控,设置 CPU、内存、带宽告警。
- 环境变量管理:
- 不要在 jar 包硬编码配置,使用
--spring.profiles.active=prod或外部配置文件方式加载不同环境配置。
- 不要在 jar 包硬编码配置,使用
✅ 恭喜你! 现在你的 SpringBoot 项目已经成功部署在腾讯云 ECS 上,并通过 Nginx 对外提供服务了。如有问题,欢迎随时提问!
CLOUD技术博