在腾讯云的轻量应用服务器(Lighthouse)上部署 Spring Boot + Docker 容器,是目前个人开发者、中小企业以及中小项目非常主流且高性价比的技术选型。轻量服务器主打“简单”和“高带宽”,非常适合这种全栈一体化的场景。
以下是一套经过实战验证的、从零开始的完整部署指南,涵盖环境准备、镜像构建、容器运行及网络配置。
一、 前置条件与准备工作
-
购买轻量应用服务器
- 操作系统选择:推荐
Ubuntu 20.04/22.04 LTS或Debian 11/12。相比 CentOS(已停止维护),Ubuntu/Debian 的软件包管理更现代,Docker 官方支持更好,社区资源也更丰富。 - 配置建议:Spring Boot 应用本身内存占用不大,但 JVM 默认堆内存可能较大。建议至少 2核 4GB 内存起步,否则容易 OOM(内存溢出)。带宽方面,轻量服务器通常包含较高的峰值带宽(如 5Mbps-10Mbps),对静态资源和 API 响应足够。
- 操作系统选择:推荐
-
安全组配置(关键)
- 登录腾讯云控制台,找到你的轻量应用服务器。
- 进入 防火墙 或 安全组 设置。
- 必须放行以下端口:
22:SSH 远程连接。80/443:如果你打算用 Nginx 反向X_X或 Let’s Encrypt 证书。- 自定义端口:你 Spring Boot 应用监听的端口(例如
8080)。注意:轻量服务器默认不开放所有端口,务必手动添加规则。
二、 服务器端基础环境搭建
通过 SSH 登录服务器,执行以下命令安装必要工具:
# 1. 更新软件源
sudo apt update && sudo apt upgrade -y
# 2. 安装 Docker Engine (推荐使用官方脚本,最稳定)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 3. 启动 Docker 并设置为开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 4. 验证安装
docker --version
sudo docker run hello-world
提示:如果国内下载慢,可以配置 Docker 镜像提速器(阿里云、腾讯云等均有提供专属提速地址)。
三、 项目打包与 Dockerfile 编写
1. 本地构建 JAR 包
确保你的 Spring Boot 项目在 application.yml 或 bootstrap.yml 中:
- 绑定地址:不要只写
localhost或127.0.0.1,应改为0.0.0.0,以便容器外部访问。server: address: 0.0.0.0 port: 8080 - 使用 Maven/Gradle 打包生成
.jar文件。
2. 编写 Dockerfile
在项目根目录创建 Dockerfile,推荐使用多阶段构建以减小镜像体积:
# 第一阶段:构建
FROM maven:3.8-openjdk-17-slim AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
# 第二阶段:运行
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# 复制构建好的 jar 包
COPY --from=build /app/target/*.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
优化建议:
- 使用
Alpine或Slim基础镜像,镜像大小可从几百 MB 降至几十 MB,拉取和启动更快。- 如果使用 JDK 17+,确保基础镜像版本匹配。
3. 构建镜像
将项目文件上传到服务器(可用 scp 或 Git clone),然后在项目目录下执行:
# 构建镜像,tag 可自定义,例如 my-spring-app:v1
docker build -t my-spring-app:v1 .
四、 运行容器与持久化存储
1. 直接运行(快速测试)
docker run -d
--name spring-boot-app
-p 8080:8080
--restart unless-stopped
my-spring-app:v1
2. 生产环境推荐:使用 Docker Compose
创建 docker-compose.yml,便于管理和环境变量注入:
version: '3.8'
services:
app:
image: my-spring-app:v1
container_name: spring-boot-app
ports:
- "8080:8080"
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
volumes:
# 挂载日志目录,避免日志填满容器磁盘
- ./logs:/app/logs
restart: unless-stopped
# 限制资源,防止占满服务器内存
deploy:
resources:
limits:
memory: 1G
启动服务:
docker-compose up -d
五、 进阶优化:Nginx 反向X_X + HTTPS
直接暴露 Java 端口在生产环境中不够优雅,且不支持 HTTPS。建议在轻量服务器上安装 Nginx 作为反向X_X。
1. 安装 Nginx
sudo apt install nginx -y
2. 配置 Nginx
编辑 /etc/nginx/sites-available/default 或新建一个配置文件:
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;
}
}
重载配置:
sudo nginx -t
sudo systemctl reload nginx
3. 配置 HTTPS(可选但推荐)
使用 certbot 自动申请 Let’s Encrypt 免费证书:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
六、 常见问题与排错技巧
-
连接超时/无法访问
- 检查点 1:腾讯云轻量服务器控制台的 防火墙/安全组 是否放行了 80/443/8080 端口?这是最常见的原因。
- 检查点 2:Spring Boot 是否绑定了
0.0.0.0?如果在容器内监听127.0.0.1,外部将无法访问。 - 检查点 3:容器是否正在运行?
docker ps查看状态。
-
内存溢出 (OOM)
- 轻量服务器内存有限。JVM 默认会尝试分配较多堆内存。
- 解决方案:在 Dockerfile 或 docker-compose 中指定 JVM 参数:
environment: - JAVA_OPTS=-Xmx512m -Xms256m - 或者在
docker-compose.yml中使用deploy.resources.limits.memory限制容器总内存。
-
日志查看
# 实时查看容器日志 docker logs -f spring-boot-app # 查看最近 100 行 docker logs --tail 100 spring-boot-app -
数据持久化
- 数据库(MySQL/PostgreSQL)建议单独部署或使用腾讯云云数据库 CDB,不要将数据库放在轻量服务器的容器中,因为重启容器数据可能丢失(除非挂载卷)。
- 对于 Spring Boot 应用的文件上传,务必使用
volumes挂载宿主机目录,防止容器重建后文件丢失。
总结
在腾讯轻量应用服务器上部署 Spring Boot + Docker 的核心流程是:选 Ubuntu 系统 -> 装 Docker -> 写 Dockerfile -> 构建镜像 -> 跑容器 -> 配安全组。这套方案成本低、运维简单、扩展性强,非常适合个人项目和中小型业务。如果遇到性能瓶颈,后续只需将数据库迁移至云数据库,或将应用拆分为多个微服务部署即可平滑升级。
CLOUD云枢