这是一份详细的腾讯云 ECS 云服务器部署 Spring Boot 项目从零到上线的全攻略。
本指南假设你使用的是 Linux 系统(推荐 CentOS 7/8 或 Ubuntu 20.04+),因为这是生产环境的主流选择。我们将按照逻辑顺序分为:前期准备 -> 服务器环境搭建 -> 项目打包与上传 -> 运行配置 -> 域名与 HTTPS -> 安全加固。
第一阶段:前期准备
-
购买云服务器 (ECS)
- 登录腾讯云控制台,购买一台 ECS 实例。
- 推荐配置:入门级 2核4G 即可满足大多数中小型 Spring Boot 应用。
- 操作系统:选择 CentOS 7.9 或 Ubuntu 20.04 LTS(这里以 CentOS 为例,命令通用性较强)。
- 安全组设置:在购买时或之后,务必在安全组中放行以下端口:
22(SSH连接)80(HTTP访问)443(HTTPS访问)你的SpringBoot端口(默认通常是8080,如果后续用 Nginx 反向X_X,则只需开放 80/443)。
-
准备本地开发环境
- JDK 1.8 或 11/17 (取决于你的 Spring Boot版本)。
- Maven 3.6+。
- Git (可选,用于拉取代码)。
-
获取服务器信息
- 公网 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 管理进程(生产环境标准做法)✅
这样可以让服务开机自启,崩溃自动重启。
-
创建服务文件:
vi /etc/systemd/system/myapp.service -
写入以下内容(请根据实际路径修改):
[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 -
启动并设置开机自启:
systemctl daemon-reload systemctl start myapp systemctl enable myapp systemctl status myapp -
查看日志:
journalctl -u myapp -f
第五阶段:配置 Nginx 反向X_X
现在 Spring Boot 运行在 8080 端口,我们希望用户通过 http://<IP> 直接访问。
-
编辑 Nginx 配置:
vi /etc/nginx/conf.d/default.conf # 或者新建一个文件 vi /etc/nginx/conf.d/myapp.conf -
添加或修改 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; } } -
测试并重载 Nginx:
nginx -t systemctl reload nginx -
验证:在浏览器访问
http://<你的公网IP>,应该能看到 Spring Boot 的欢迎页面或接口响应。
第六阶段:绑定域名与 HTTPS (SSL)
为了安全和 SEO,建议使用域名 + HTTPS。
1. 解析域名
在腾讯云 DNS 控制台或其他域名服务商处,将你的域名 A 记录指向 ECS 的公网 IP。
2. 申请 SSL 证书
- 免费方案:使用 Let’s Encrypt (certbot)。
- 腾讯云服务:腾讯云提供免费的 DV SSL 证书,可在控制台申请并下载。
这里演示使用 Certbot (自动续签方便):
-
安装 Certbot:
yum install -y certbot python3-certbot-nginx -
获取证书并自动配置 Nginx:
# 请将 example.com 替换为你的真实域名 certbot --nginx -d example.com -d www.example.com- 按提示输入邮箱,同意条款。
- 选择是否重定向 HTTP 到 HTTPS(选 2 推荐)。
- Certbot 会自动修改 Nginx 配置并申请证书。
-
验证 HTTPS:
访问https://example.com,看是否有小锁标志。
第七阶段:安全加固与优化
-
防火墙设置
既然用了 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 -
禁用 Root 远程登录(高安全级别)
- 创建一个普通用户并赋予 sudo 权限。
- 修改
/etc/ssh/sshd_config,设置PermitRootLogin no。 - 重启 sshd:
systemctl restart sshd。
-
数据库安全
- 如果使用腾讯云 RDS,确保白名单只包含 ECS 的内网 IP。
- 如果使用自建 MySQL,不要暴露 3306 端口到公网,只在应用服务器内部连接。
-
日志轮转
防止app.log无限增长撑爆磁盘。可以使用logrotate配置每天切割日志。
第八阶段:持续集成/持续部署 (CI/CD) 进阶
当项目迭代频繁时,手动上传 jar 包效率低。建议搭建 CI/CD 流程:
-
GitHub Actions / GitLab CI:
- 代码 Push 到 GitHub/GitLab。
- 触发流水线:Maven 打包 -> 构建 Docker 镜像 (可选) -> SCP 上传 Jar 包到服务器。
- 服务器端脚本接收后自动重启 Service。
-
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
- [ ] ECS 购买并开通安全组 (22, 80, 443)。
- [ ] 安装 JDK, Nginx。
- [ ] 本地 Maven 打包成功。
- [ ] Jar 包上传至服务器。
- [ ] 配置 Systemd 服务并启动。
- [ ] 配置 Nginx 反向X_X。
- [ ] 配置域名解析。
- [ ] 配置 HTTPS (SSL)。
- [ ] 测试访问正常。
按照这个步骤操作,你可以稳稳地将 Spring Boot 项目部署到腾讯云并正式上线!
轻量云Cloud