在腾讯云的轻量应用服务器(Lighthouse)上部署 Spring Boot 应用并运行在 Docker 容器中,是一个非常主流且高效的方案。这种方式实现了环境隔离、一键部署、易于迁移。
以下是完整的操作指南,分为 准备工作、Docker 安装、Spring Boot 打包、Dockerfile 编写、容器部署、域名/网络配置 六个步骤。
✅ 前提条件
- 一台腾讯云轻量应用服务器(推荐 Ubuntu 20.04/22.04 或 CentOS 7/8)。
- 已开通服务器,并配置了安全组规则(开放端口如
80,443,8080等)。 - 本地开发环境已准备好 Spring Boot jar 包。
🚀 第一步:登录服务器并安装 Docker
SSH 登录到你的轻量应用服务器:
ssh root@你的服务器IP
1. 卸载旧版本(如果存在)
sudo apt-get remove docker docker-engine docker.io containerd runc # Ubuntu/Debian
# 或
sudo yum remove docker* # CentOS
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
docker run hello-world
💡 建议:将当前用户加入 docker 组,避免每次都要加
sudo:sudo usermod -aG docker $USER newgrp docker
📦 第二步:准备 Spring Boot 应用
1. 本地打包
在你的本地项目中执行:
mvn clean package -DskipTests
生成的 .jar 文件通常在 target/ 目录下,例如 myapp-0.0.1-SNAPSHOT.jar。
2. 上传到服务器
使用 scp 命令将 jar 包上传到服务器:
scp target/myapp-0.0.1-SNAPSHOT.jar root@你的服务器IP:/opt/app/
在服务器上创建目录:
mkdir -p /opt/app
🐳 第三步:编写 Dockerfile
在 /opt/app/ 目录下创建 Dockerfile:
# 使用官方精简版 JDK 镜像
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 复制 jar 包到容器内
COPY myapp-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口(根据你 Spring Boot 配置的端口修改,默认是 8080)
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
⚠️ 注意:如果你的 Spring Boot 应用需要连接数据库,请确保数据库地址是公网 IP 或使用腾讯云 CDB,并在 Spring Boot 配置中正确设置。
🛠️ 第四步:构建 Docker 镜像
在 /opt/app/ 目录下执行:
docker build -t my-springboot-app .
等待构建完成,可通过以下命令查看镜像:
docker images
▶️ 第五步:运行 Docker 容器
docker run -d
--name my-springboot-container
-p 8080:8080
-v /opt/app/logs:/app/logs
my-springboot-app
参数说明:
-d:后台运行--name:容器名称-p 8080:8080:将宿主机的 8080 端口映射到容器的 8080 端口-v:挂载日志目录(可选,便于查看日志)
检查容器是否运行:
docker ps
🌐 第六步:访问与网络配置
1. 检查防火墙/安全组
- 腾讯云控制台 → 轻量应用服务器 → 防火墙:确保放行了
8080端口(TCP)。 - 如果使用云防火墙,也需放行。
2. 浏览器访问
在浏览器中输入:
http://你的服务器IP:8080
如果能正常返回接口数据或页面,说明部署成功!
🔧 高级优化建议
1. 使用 Nginx 反向X_X + HTTPS(推荐)
直接暴露 8080 端口不安全且不美观。建议安装 Nginx 做反向X_X:
sudo apt install nginx # 或 yum install nginx
编辑 Nginx 配置文件 /etc/nginx/sites-available/default 或新建一个 conf:
server {
listen 80;
server_name yourdomain.com; # 替换为你的域名
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 nginx -t
sudo systemctl restart nginx
然后在腾讯云控制台为域名申请 SSL 证书,并配置 HTTPS。
2. 使用 Docker Compose 管理(更优雅)
创建 docker-compose.yml:
version: '3.8'
services:
springboot-app:
image: my-springboot-app
container_name: my-springboot-container
ports:
- "8080:8080"
volumes:
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
restart: always
启动:
docker compose up -d
3. 日志查看
docker logs -f my-springboot-container
❓ 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 无法访问端口 | 安全组未放行 | 登录腾讯云控制台,添加防火墙规则放行 8080 |
| 容器启动后立即退出 | Java 启动失败 | docker logs <container_id> 查看错误日志 |
| 内存不足 | JVM 堆内存过大 | 在 Dockerfile 中添加 -Xmx512m -Xms256m 参数 |
| 数据库连接超时 | 数据库不在同一内网 | 使用腾讯云 CDB 公网地址,或开启白名单 |
✅ 总结
通过 Docker 部署 Spring Boot 到腾讯云轻量应用服务器,优势在于:
- 环境一致:开发、测试、生产环境完全一致。
- 资源隔离:不影响服务器其他服务。
- 易于维护:通过
docker compose可轻松升级、回滚。
如果你希望进一步自动化,可以结合 Jenkins/GitLab CI 实现代码提交后自动构建镜像并部署到服务器。
CLOUD技术博