当前位置: 首页 > news >正文

Docker部署SpringBoot+Vue+MySQL

TodoList Docker 部署文档

适用环境:阿里云 ECS(全新服务器) + Docker Compose
架构:Nginx(80) → 静态前端 +/api代理 → Spring Boot(8080) → MySQL(3306)
更新时间:2026-06-30


一、前置信息

项目
部署目录/opt/todolist/
MySQL 密码12345678
数据库名todo_db
后端端口8080(内部)
前端端口80(对外)
Java 版本17
Spring Boot3.3.4

二、ECS 环境初始化

以下所有命令在 ECS 上以root身份执行。

2.1 连接 ECS

sshroot@<你的ECS公网IP>

2.2 安装 Docker

# 官方一键脚本(使用阿里云镜像加速)curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun# 启动并设置开机自启systemctlenabledockersystemctl startdocker# 验证版本docker--versiondockercompose version

预期输出:Docker 26.x+,Docker Compose v2.x+

2.3 配置 Docker 镜像加速(可选但建议)

mkdir-p/etc/dockercat>/etc/docker/daemon.json<<'EOF' { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://docker.m.daocloud.io" ], "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } } EOFsystemctl daemon-reload systemctl restartdocker

2.4 关闭防火墙/SELinux(ECS 默认已关闭,确认即可)

systemctl status firewalld# 应该是 inactivesestatus# 应该是 Disabled

三、上传部署包

方式一:压缩上传(推荐)

本地 Windows 桌面打开终端,进入部署文件夹后打包上传:

# 进入桌面部署文件夹cdC:/Users/ASUS/Desktop/TodoList-Deploy# 打包为 tar.gztar-czftodolist-deploy.tar.gz *# 上传到 ECSscptodolist-deploy.tar.gz root@<ECS公网IP>:/opt/

然后在ECS上解压:

mkdir-p/opt/todolistcd/opt/todolisttar-xzf/opt/todolist-deploy.tar.gzrm/opt/todolist-deploy.tar.gz

方式二:直接 scp 整个文件夹

scp-rC:/Users/ASUS/Desktop/TodoList-Deploy/* root@<ECS公网IP>:/opt/todolist/

四、开始部署

4.1 给脚本执行权限

cd/opt/todolistchmod+x deploy.sh

4.2 构建并启动(二选一)

自动部署:

./deploy.sh

手动部署:

cd/opt/todolist# 1. 构建后端镜像dockercompose build# 2. 启动所有服务(后台运行)dockercompose up-d# 3. 查看启动状态dockercomposeps# 4. 查看日志(Ctrl+C 退出)dockercompose logs-f

4.3 启动顺序说明

MySQL 启动(约15秒) ↓ 健康检查通过 后端启动(约30秒-60秒,首次需等 MySQL 建表) ↓ 容器启动 Nginx 启动 ↓ 全栈可用 ✅

五、配置阿里云安全组

关键步骤!否则外网无法访问。

  1. 登录 阿里云控制台
  2. 进入ECS → 实例 → 点击你的实例 → 安全组
  3. 点击配置规则 → 入方向 → 手动添加
优先级协议类型端口范围授权对象说明
1TCP800.0.0.0/0HTTP 前端页面
1TCP220.0.0.0/0SSH 远程管理

⚠️不要开放3306、8080、8081,这些端口仅在 Docker 内网通信。


六、验证部署

6.1 浏览器访问

http://<ECS公网IP>

应能看到 TodoList 登录/注册页面。

6.2 命令行测试 API

# 测试 Nginx 可达curlhttp://localhost/# 测试 API 代理curlhttp://localhost/api/dict/priorities# 预期返回 JSON 格式的优先级字典

6.3 检查容器状态

dockercomposeps

预期输出 3 个容器均为UpUp (healthy)

容器名状态
todo-mysqlUp (healthy)
todo-backendUp (healthy)
todo-nginxUp

6.4 检查后端日志

dockercompose logs backend|tail-50

看到Started TodoBackendApplication in X.XXX seconds即启动成功。


七、文件结构

/opt/todolist/ ├── deploy.sh # 一键部署脚本 ├── docker-compose.yml # 服务编排配置 ├── Dockerfile.backend # 后端镜像构建文件 ├── .dockerignore # 构建排除 ├── backend/ │ └── target/ │ └── todo-backend.jar # Spring Boot JAR(29MB) ├── frontend/ │ └── dist/ # Vue 前端构建产物 │ ├── index.html │ └── assets/ ├── nginx/ │ └── nginx.conf # Nginx 反向代理 + 静态文件配置 └── mysql/ └── init/ └── 01-init.sql # 数据库建表 + 预置字典数据

八、常用运维命令

# 查看所有容器状态dockercomposeps# 查看实时日志dockercompose logs-f# 只查看某个服务日志dockercompose logs-fbackenddockercompose logs-fnginx# 重启某个服务dockercompose restart backend# 重新构建并启动(代码更新后)dockercompose up-d--build# 停止所有服务dockercompose down# 停止 + 删除数据库数据(⚠️ 会清空所有用户数据!)dockercompose down-v# 进入容器调试dockercomposeexecbackendshdockercomposeexecmysql1 mysql-uroot-p12345678todo_db

九、更新部署

当本地代码修改后,重新部署的流程:

# 1. 本地重新打包# 后端:cd backend && ./mvnw clean package -DskipTests# 前端:cd frontend && npm run build# 2. 上传更新文件scpbackend/target/todo-backend.jar root@<IP>:/opt/todolist/backend/target/scp-rfrontend/dist/* root@<IP>:/opt/todolist/frontend/dist/# 3. ECS 上重新构建后端 + 重启sshroot@<IP>"cd /opt/todolist && docker compose up -d --build"

只改前端:只需上传frontend/dist/,Nginx 无需重启(文件挂载实时生效)。
只改后端:上传 JAR 后执行docker compose up -d --build backend
改了 nginx 配置:上传nginx/nginx.conf后执行docker compose restart nginx


十、故障排查

10.1 浏览器访问不了

  1. 确认安全组:80 端口是否已开放入方向
  2. 确认服务运行中docker compose ps查看状态
  3. 确认 Nginx 监听docker compose exec nginx netstat -tlnp | grep 80

10.2 后端启动失败

# 查看详细日志dockercompose logs backend# 常见原因:# 1. MySQL 还没就绪 → 等 MySQL healty 后 docker compose restart backend# 2. 数据库表不存在 → 检查 mysql/init/01-init.sql 是否正确执行# 3. 端口被占用 → lsof -i :8080

10.3 MySQL 连接失败

# 进入 MySQL 检查dockercomposeexecmysql1 mysql-uroot-p12345678# 查看数据库SHOW DATABASES;USE todo_db;SHOW TABLES;

10.4 API 返回 502

# 检查后端是否在运行dockercomposepsbackend# 检查 Nginx 能否连通后端dockercomposeexecnginxwget-qO- http://backend:8080/api/actuator/health2>&1||echo"后端不可达"

10.5 端口冲突

如果 ECS 上已有 Nginx/Apache 占用 80 端口:

# 查看是谁占用lsof-i:80# 如果不需要就停掉systemctl stop nginx# 或 httpd / apache2systemctl disable nginx

十一、安全加固建议

  • 修改 JWT 密钥:生成随机密钥替换docker-compose.yml中的JWT_SECRETopenssl rand -base64 32
  • 更换 API Key:将AI_DEEPSEEK_API_KEY换成你自己的 DeepSeek Key
  • 修改 MySQL 密码:使用强密码,同步修改MYSQL_ROOT_PASSWORDSPRING_DATASOURCE_PASSWORD
  • 配置 HTTPS:使用acme.sh+ 阿里云 DNS API 申请免费 SSL 证书
  • 最小化安全组:SSH 端口限制只允许你的 IP 访问
  • Spring Boot 生产模式:确认app.debug: false@TOC
http://www.jsqmd.com/news/1102962/

相关文章:

  • 二手应用材料 AMAT/APPLIED MATERIALS Endura SIP EnCoRe 机台技术规格详解
  • 为什么顶尖AI实验室把Kimi设为默认终端?——揭秘其底层MoE架构对中文语义压缩率提升41.6%的技术黑盒(含反编译验证)
  • 10分钟让Jellyfin智能整理影片库:MetaTube插件全攻略
  • ChatGPT编程辅助黄金法则(附12个已验证Prompt模板):从“AI乱写”到“精准生成”的临界点突破
  • BetterNCM安装器:3分钟搞定网易云插件安装的终极指南
  • 高端香水调制工作室通风 易互德无异味稳温布风管保障调香精度
  • OpenCore Legacy Patcher技术揭秘:让老Mac重获新生的终极硬件兼容性修复方案
  • 树链剖分+树状数组:ABC 460 G
  • 【仅限首批200名开发者】解锁Claude 3.5隐藏API模式:对比ChatGPT,实现2.7倍更快的结构化输出+零额外token消耗——实测代码+配置模板限时放送
  • 高性能C++ Excel处理库OpenXLSX架构解析与最佳实践
  • Skill :project-structure(目录结构)
  • 终极免费AI背景移除插件:OBS Background Removal完整使用指南
  • 为什么92%的国内AI团队在6月悄悄切换至DeepSeek?——ChatGPT-4o中文语义理解盲区与DeepSeek-VL视觉-语言协同优势(独家内测数据首曝)
  • ChatGPT生成代码上线即崩?:从LLM幻觉到生产级交付的7步校验流水线(附Checklist模板)
  • AIDC 数据中心电源测试全解析——BBU 电池备份单元到 HVDC 高压直流,一套完整的测试方案怎么搭?
  • Cursor配置CheatEngine MCP自动化逆向分析详细教程
  • 基于STM32与KMX63的空间手势识别系统设计
  • 从网页曝光到AI心智占领:2026年企业GEO发稿选型指南与趋势预判
  • 终极教程:用OpenCore Legacy Patcher让旧款Mac焕发新生
  • 跨语言与跨平台Agent互操作:统一API网关与协议适配实战
  • 终极指南:3分钟破解QQ音乐加密格式,让QMC文件自由播放
  • 工业4-20mA电流环设计:DAC161S997与PIC18F47K42实战解析
  • IT爱学堂-SpringAI Alibaba+RAG+Milvus 传统应用升级项目实战
  • 2026餐饮SAAS收银系统维护商哪家好?凤梨收银系统适配服务商深度解析
  • ChatGPT vs 通义千问 vs 文心一言 vs 混元:谁真正适配中国企业级场景?——基于36家客户POC数据的硬核拆解
  • 5个关键步骤掌握dnSpy:免费开源.NET程序集调试与编辑终极指南
  • 2026门店SAAS系统开发公司哪家好?专业服务商选型指南与适配解析
  • 功率预测的精度困局与破局之道:从数值天气预报到AI智能体
  • 用PIC单片机驱动RGB灯带实现智能灯光控制
  • 赛事数据分析核心指标大全,AI助力赛事高效复盘