在腾讯云轻量应用服务器(Lighthouse)上部署 Spring Boot 项目,核心思路与在普通 ECS 或本地 Linux 服务器上部署并无本质区别,主要差异在于腾讯云提供的“镜像”预装环境和网络配置的便捷性。
以下是基于生产环境最佳实践的完整部署流程,涵盖从环境准备到服务上线的全过程。
一、 前置准备
-
服务器选择:
- 建议使用 Ubuntu 20.04/22.04 LTS 或 CentOS 7.9+ 系统镜像。Ubuntu 对 Java 生态支持更友好,软件源更新更快。
- 确保已开通安全组规则,开放
80(HTTP)、443(HTTPS)以及你自定义的端口(如8080)。
-
文件准备:
- 将 Spring Boot 项目打包为可执行的 JAR 文件:
mvn clean package -DskipTests。 - 生成
your-app.jar。
- 将 Spring Boot 项目打包为可执行的 JAR 文件:
二、 服务器环境搭建(推荐方式)
虽然可以手动安装 JDK 和 Nginx,但为了稳定性和维护性,推荐使用 Docker 或 系统级包管理。这里提供两种主流方案:
方案 A:使用 Docker 部署(推荐,隔离性好,迁移方便)
-
安装 Docker:
# Ubuntu 示例 sudo apt update sudo apt install docker.io docker-compose -y sudo systemctl enable --now docker -
编写 Dockerfile:
在项目根目录创建Dockerfile:FROM openjdk:17-jdk-slim WORKDIR /app COPY target/your-app.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] -
构建并运行容器:
docker build -t my-spring-boot-app . docker run -d --name springboot-app -p 8080:8080 my-spring-boot-app
方案 B:直接部署 JAR + Systemd(传统方式,资源占用低)
-
安装 JDK:
# Ubuntu sudo apt install openjdk-17-jdk -y java -version -
上传 JAR 包:
使用 SCP 或 SFTP 将your-app.jar上传至服务器/opt/springboot/目录。 -
创建 Systemd 服务文件(实现开机自启、崩溃重启):
sudo nano /etc/systemd/system/springboot.service写入以下内容:
[Unit] Description=Spring Boot Application After=syslog.target [Service] User=root ExecStart=/usr/bin/java -jar /opt/springboot/your-app.jar SuccessExitStatus=143 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target -
启动服务:
sudo systemctl daemon-reload sudo systemctl enable springboot.service sudo systemctl start springboot.service sudo systemctl status springboot.service
三、 配置反向XX(Nginx)
直接暴露 8080 端口不安全且不美观,应通过 Nginx 反向XX将流量转发至应用。
-
安装 Nginx:
sudo apt install nginx -y -
配置 Nginx:
sudo nano /etc/nginx/sites-available/springboot内容示例:
server { listen 80; server_name your-domain.com; # 替换为你的域名或服务器IP 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; } } -
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/springboot /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
注意:如果使用的是 Docker 部署,Nginx 也可作为独立容器运行,并通过 Docker Compose 统一管理。
四、 腾讯云特色优化建议
-
使用腾讯云镜像市场:
在创建轻量应用服务器时,可直接选择“Java 环境”、“WordPress”等预装镜像,节省手动配置时间。但需注意这些镜像可能包含非必要组件,建议清理后重新部署。 -
安全组配置:
务必在腾讯云控制台 → 轻量应用服务器 → 防火墙中,仅开放80、443和 SSH(22)端口。不要开放 8080、MySQL(3306)等内部端口,防止被扫描攻击。 -
域名解析与 HTTPS:
- 在腾讯云 DNSPod 中将域名 A 记录指向轻量服务器的公网 IP。
- 使用 Let’s Encrypt 免费证书或腾讯云 SSL 证书管理服务,通过 Certbot 自动配置 HTTPS,提升安全性和 SEO。
-
日志监控:
- 使用
journalctl -u springboot.service -f查看实时日志。 - 建议接入腾讯云 CLS(云日志服务),将应用日志推送至 CLS,便于集中检索和分析。
- 使用
-
备份策略:
- 利用腾讯云轻量应用服务器的“快照”功能,定期备份系统盘和数据盘。
- 数据库务必单独备份(如 MySQL 使用
mysqldump定时脚本),避免与应用混在同一磁盘。
五、 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 访问 502 Bad Gateway | Nginx 无法连接后端 | 检查 Spring Boot 是否启动;检查 Nginx 配置中的 proxy_pass 地址和端口是否正确 |
| 权限拒绝 | 非 root 用户运行 | 检查 JAR 包执行权限;Systemd 服务中 User 字段设置 |
| 内存溢出 OOM | JVM 参数未限制 | 启动时添加 -Xms256m -Xmx512m 等参数,避免占用过多内存导致服务器卡顿 |
| 数据库连接失败 | 防火墙或驱动问题 | 确认 MySQL 允许远程连接;检查 JDBC URL 中的主机名是否为 localhost 或内网 IP |
总结
在腾讯云轻量应用服务器上部署 Spring Boot 项目,关键在于:
- 环境标准化:优先使用 Docker 或 Systemd 管理进程。
- 安全加固:通过 Nginx 反向XX隐藏真实端口,严格配置安全组。
- 运维自动化:利用腾讯云快照、CLS 日志服务和自动重启机制保障稳定性。
此方案兼顾了性能、安全性和可维护性,适合中小型 Web 应用和个人开发者使用。
云技术博客