本文详细记录本人在实际项目从 RuoYi-Vue 二次开发到 Docker 镜像打包、DockerHub 上传、异地一键部署的完整实战全过程。涵盖前后端打包产物准备、SQL初始化、docker-compose 管理、DockerHub 镜像上传、Gitee 代码管理、子模块大坑、数据库404等所有可能出错细节,全部都有真实复现和终极解决方法!


一. 项目整体结构与最终目录

项目目标是实现一套完整、可迁移、可一键部署的“智慧园区机器人管理平台”,底层基于 RuoYi-Vue,后端 Java(Spring Boot),前端 Vue/Nginx,数据库 MySQL8、Redis,所有服务都用 Docker Compose 管理,支持多环境部署。

最终部署产物目录(建议结构如下):

RuoYi-Deploy/
│
├─ docker-compose.yml           # Docker一键编排文件(关键)
├─ mysql_data/                  # MySQL持久化目录,首次为空,部署后生成
├─ redis_data/                  # Redis持久化目录,首次为空
├─ ruoyi-vue-docker/            # 自定义Docker部署目录(关键,易丢!)
│    ├─ docker/
│    │    ├─ nginx/
│    │    │    ├─ Dockerfile
│    │    │    └─ nginx.conf
│    │    ├─ redis/
│    │    │    └─ Dockerfile
│    │    ├─ mysql/
│    │    │    ├─ Dockerfile
│    │    │    └─ ry-vue.sql        # 数据库初始化脚本(关键,易忘)
│    │    ├─ ruoyi/
│    │    │    ├─ Dockerfile
│    │    │    ├─ application-docker.yml
│    │    │    └─ ruoyi-admin.jar
│    └─ nginx/html/dist/        # 前端Vue打包目录
│    └─ ...
└─ .gitignore

二. 前后端打包与产物收集

1. 后端打包

cd smart-park---code\RuoYi-Vue
# 在Ruoyi根目录打包后端jar文件
mvn clean package -DskipTests

2. 前端打包

cd ruoyi-ui
npm install
npm run build

3. 准备数据库 SQL 脚本

  • 用 Navicat 等工具导出“ry-vue”完整库结构与数据为 ry-vue.sql,放到 ruoyi-vue-docker/docker/mysql/ 目录下(一定不要漏!

这一部分如果有问题,可以参考我的这篇文章:RuoYi-Vue 单项目 Docker 全流程部署实战教程-CSDN博客

三. Dockerfile 编写与 Compose 配置

1. 后端 ruoyi-admin Dockerfile(示例)

Dockerfile

FROM openjdk:8-jre
WORKDIR /app
COPY ruoyi-admin.jar .
COPY application-docker.yml .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar", "--spring.profiles.active=docker"]

2. docker-compose.yml 关键配置(含所有服务)

version: '3.9'
services:mysql:image: mysql:8.0container_name: mysqlenvironment:#你自己在ruoyi-admin中的MYSQL设置的密码MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: ry-vueports:- "3306:3306"volumes:- ./mysql_data:/var/lib/mysql- ./ruoyi-vue-docker/docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sqlrestart: alwaysredis:image: redis:7container_name: redisports:- "6379:6379"volumes:- ./redis_data:/datarestart: alwaysbackend:build: ./ruoyi-vue-docker/docker/ruoyicontainer_name: ruoyi-backenddepends_on:- mysql- redisports:- "8080:8080"restart: alwaysfrontend:build: ./ruoyi-vue-docker/docker/nginxcontainer_name: ruoyi-frontendports:- "80:80"restart: always

3. 一键启动与调试命令

docker compose up -d        # 一键启动全部服务
docker compose down         # 停止并移除
docker compose logs -f backend
docker compose logs -f mysql
docker compose restart backend

四. 最容易卡住的数据库404和端口问题全复现与解决!

1. 最常见数据库404错误:“sys_config 表不存在”踩坑复盘

问题表现
后端启动日志持续报错,内容类似

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Table 'ry-vue.sys_config' doesn't exist
...
Caused by: org.springframework.jdbc.BadSqlGrammarException
...
真实原因梳理:
  • MySQL数据库容器启动时,未正确初始化表结构ry-vue.sql没被正确导入)

  • 或者数据卷 mysql_data/ 已有脏数据,MySQL 发现已有库就不会再导入 sql 脚本

彻底解决步骤:
  1. 确保 SQL 文件挂载无误

  2. docker-compose.yml 必须有这一行:

    - ./ruoyi-vue-docker/docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql
    
  3. 清理脏数据卷会清空数据库,开发环境可放心,生产环境务必备份!

    docker compose down -v    # 强制移除所有数据卷
    rm -rf mysql_data/
    
  4. 重新 up,首次会自动导入 SQL 初始化完整表结构

    docker compose up -d
    # 此时 mysql/ry-vue.sql 脚本会被自动执行,数据库完整生成
    
  5. 进容器手动检查

    docker exec -it mysql bash
    mysql -u root -p
    # 输入 123456
    show databases;
    use ry-vue;
    show tables;   # 必须有 sys_config、sys_user 等所有表
    
  6. 如仍无表,检查 ry-vue.sql 路径拼写/权限、compose 配置,日志排查是否有报错

2. 端口404/服务404 常见场景

  • 端口被占用(如本机已运行 MySQL/Redis/Nginx)

    • 解决:compose 改端口,如 3307:3306

  • 服务未正常启动或前端Nginx未指向后端端口

    • 解决:docker compose logs -f backend 排查,确认 backendfrontend 均为 running

  • 代码配置文件中的数据库连接串和实际启动参数不一致

    • 解决:application-docker.yml 里数据库密码与 compose 保持一致

五. DockerHub 镜像推送与远程服务器一键部署

1. 本地 Build 并上传 DockerHub

docker build -t yourname/ruoyi-backend:1.0 ./ruoyi-vue-docker/docker/ruoyi
docker build -t yourname/ruoyi-frontend:1.0 ./ruoyi-vue-docker/docker/nginx
docker login
docker push yourname/ruoyi-backend:1.0
docker push yourname/ruoyi-frontend:1.0

2. 新电脑/服务器极速上线流程

  1. git clone 代码仓库

    git clone https://gitee.com/xxx/xxx.git
    cd RuoYi-Deploy
    
  2. (可选)如使用 DockerHub 镜像,compose 文件直接写 image 字段

    backend:image: yourname/ruoyi-backend:1.0
    frontend:image: yourname/ruoyi-frontend:1.0
    
  3. 启动

    docker compose up -d
    

    只要持久化数据卷和 SQL 脚本齐全,服务能100%还原。

六. Gitee代码管理与 .gitignore/submodule大坑

1. 只排除数据,不能排除任何源码/配置/打包产物

推荐 .gitignore:

mysql_data/
redis_data/
docker/mysql/db/
*.log
*.pid
*.sock
.DS_Store
Thumbs.db# 千万不要排除如下内容,否则 clone 后文件夹全空:
# - ruoyi-vue-docker/
# - dist/
# - *.jar
# - *.sql
# - docker-compose.yml
# - application-*.yml
# - 任何你自己写的脚本和配置

2. 子模块/嵌套仓库问题终极解决

  • 彻底删除 submodule 配置:

    rm -f .gitmodules
    git rm --cached -r ruoyi-vue-docker
    rm -rf .git/modules/ruoyi-vue-docker
    git add -f ruoyi-vue-docker/
    git commit -m "fix: 清除submodule, 全量上传"
    git push origin master
    
  • 确认每次 clone 下来 ruoyi-vue-docker 目录及全部文件都在!

七. 新电脑部署常见问题

1.端口冲突的完整排查方法

常见于新电脑部署、宿主机已装 MySQL

典型报错:

Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:3306...

排查命令:

netstat -ano | findstr 3306

若有 mysqld.exe,请关闭或改端口:

  • 修改 docker-compose.yml 映射为 3307:3306

  • 连接数据库时端口改为 3307

2.数据库初始化失败的现象与解决

现象:
启动后服务报错,日志中有:

Table 'ry-vue.sys_config' doesn't exist

原因:

  • 数据持久卷目录(如 mysql_data)已存在但内容为空或未初始化

解决办法:

docker compose down -v
rm -rf ./mysql_data
docker compose up -d

必要时手动导入 SQL 文件(docker cp + docker exec 进入 mysql 容器导入)

八. 其它常见问题与建议

1. 容器日志/服务状态调试命令

docker compose ps
docker compose logs backend
docker compose logs mysql

2. 防止“空目录/丢文件”

  • clone 后务必对照本地完整目录结构核查

  • IDE里多用“显示隐藏文件/全部文件”模式

  • 可用 ls -ltree 命令核对

3. 数据库 SQL 导入失败排查

  • 手动进入 mysql 容器,用 mysql -u root -p ry-vue < /ry-vue.sql 检查语法、路径和权限

九. 经验总结

  1. 本地打包、Docker Compose 部署、SQL初始化、Gitee管理,缺一不可

  2. clone 新环境后,第一时间检查所有必需目录和文件

  3. mysql_data/redis_data 持久化防丢失,SQL初始化最保险

  4. 遇到404/数据库报错,99%是持久化卷脏数据或SQL脚本缺失/未导入

  5. 上传 DockerHub 后新环境部署极致快,完全不用再装环境!

  6. .gitignore 只排除数据目录,配置和产物千万不要排除

十. 思维导图

RuoYi-Vue 前后端打包 + Docker部署实战全流程
│
├─ 1. 打包准备
│    ├─ Maven 打包后端 JAR
│    ├─ NPM 打包前端 dist
│    └─ 检查 SQL 文件、配置(application-docker.yml)
│
├─ 2. Docker 化部署
│    ├─ 编写 docker-compose.yml
│    │    ├─ ruoyi-backend(SpringBoot JAR)
│    │    ├─ ruoyi-frontend(Nginx + 前端dist)
│    │    ├─ mysql(挂载 ry-vue.sql 初始化、数据持久化)
│    │    └─ redis
│    ├─ 配置 .env、application-docker.yml(数据库密码一致)
│    └─ 一键启动:docker compose up -d
│
├─ 3. 容器常见问题与解决
│    ├─ 3.1 MySQL 端口/密码冲突
│    │    ├─ 修改3306为3307
│    │    └─ 数据库密码和配置必须一致
│    ├─ 3.2 SQL初始化404、sys_config不存在
│    │    ├─ 检查 ry-vue.sql 挂载路径
│    │    ├─ docker cp 手动导入SQL
│    │    ├─ 容器内执行 mysql -u root -p ry-vue < /ry-vue.sql
│    │    └─ 常见报错分析(出错日志截图/片段)
│    ├─ 3.3 .gitignore与submodule导致项目丢文件
│    │    ├─ 不要忽略 ruoyi-vue-docker/
│    │    ├─ 正确处理submodule:rm -f .gitmodules 等
│    │    └─ 强制 git add -f ruoyi-vue-docker/
│    └─ 3.4 日志分析与容器排查
│         ├─ docker logs ruoyi-backend | grep ERROR
│         ├─ 容器健康状态 docker ps
│         └─ 关键日志、常见输出(如 sys_config 表不存在)
│
├─ 4. 镜像上传 DockerHub
│    ├─ docker build -t yourname/ruoyi-backend:1.0 .
│    ├─ docker push yourname/ruoyi-backend:1.0
│    └─ pull 到新服务器一键部署
│
├─ 5. 项目上传 Gitee
│    ├─ 清理 .gitmodules、submodule、.git 目录残留
│    ├─ git add -f ruoyi-vue-docker/
│    ├─ git commit/push 全量上传
│    └─ 新环境 git clone 完整目录
│
├─ 6. 新环境迁移部署
│    ├─ git clone 仓库
│    ├─ docker compose up -d
│    └─ 必要时手动导入 ry-vue.sql
│
└─ 7. 常见踩坑总结├─ SQL表不存在/404、mysqld.sock等错误处理├─ 日志分析、端口占用、环境变量冲突├─ .gitignore 文件误写导致文件丢失└─ 部署文档/README 编写建议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916754.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916754.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916754.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言进阶】题目练习

目录 1.箭形图案 思路&#xff1a; 代码&#xff1a; 2. 公务员面试 分析&#xff1a; 代码 &#xff1a; 3. 判断结构体大小&#xff08;1&#xff09; 答案&#xff1a; 分析&#xff1a; 4.判断结构体大小&#xff08;2&#xff09; 答案: 分析: 5.宏定义计算…

Blender入门笔记——建模篇(二)

前言 在数字建模的世界中&#xff0c;快捷键和高效的操作是提高工作效率的关键。本手册为您提供了常用的建模快捷键及操作技巧&#xff0c;帮助您在各种建模软件中更加得心应手。无论是进行点、线、面操作&#xff0c;还是调整视图、切换模式&#xff0c;这些快捷方式都将成为…

sqlite3学习---基础知识、增删改查和排序和限制、打开执行关闭函数

目录 一、数据库基础知识 1.分类 2.名词 3.嵌入式数据库 4.特点 5.sqlite3的安装 5.1在线安装 5.2编译 5.3验证是否安装成功 5.4sqlite3的使用 6.创建一个数据库 7.系统维护命令 二、数据库的创建和删除 1.创建一个表 1.1用法 1.2代码示例 2.删除一个表 2.1用…

Class24AlexNet

Class24AlexNet AlexNet AlexNet于2012年ImageNet 图像识别挑战赛&#xff08;ILSVRC-2012&#xff09;中以 top-5 错误率15.3%获得冠军&#xff0c;远远领先第二名。它首次在大型图像数据集上证明了深层卷积神经网络的强大能力。 AlexNet 的总体结构 AlexNet 总共有 8 层具有学…

枚举中间位置高级篇

参考资料来源灵神在力扣所发的题单&#xff0c;仅供分享学习笔记和记录&#xff0c;无商业用途。 核心思路&#xff1a;参考枚举中间位置基础篇-CSDN博客 力扣题单练习(灵神题单中摘取题目) 447. 回旋镖的数量 核心思路&#xff1a; 因给出的点都不相同&#xff0c;所以不会…

主数据管理系统能代替数据中台吗?

目录 一、主数据管理系统≠数据中台 1. 主数据管理系统&#xff1a;管的是 “不变的核心数据” 2. 数据中台&#xff1a;管的是 “流动中的价值” 二、为什么企业更该先建 MDM&#xff1f; 1. 数据中台解决不了数据本身问题 2. MDM 可以解决常见的基础问题 3. 数字化转型…

Nmap 终极教程:安装、常用命令及法律法规指南

Nmap 终极教程&#xff1a;安装、常用命令及法律法规指南 Nmap&#xff08;Network Mapper&#xff09;是一款强大的 网络扫描和安全审计工具&#xff0c;广泛用于渗透测试、网络探测和系统管理。本教程涵盖 安装方法、常用命令详解、输出解析 以及 法律法规注意事项&#xff…

开源嵌入式数组引擎TileDB的简单使用

TileDB 是C编写的存储和访问通用多维数组引擎&#xff0c;它的官方Github网站https://github.1git.de/TileDB-Inc/TileDB 1.下载源代码和二进制库 源代码https://github.1git.de/TileDB-Inc/TileDB/archive/refs/tags/2.28.1.tar.gz 选择符合你的机器CPU架构和操作系统的库 二进…

AI对服务器行业的冲击与启示:从挑战走向重构

更多云服务器知识&#xff0c;尽在hostol.comAI&#xff08;人工智能&#xff09;技术的迅猛发展&#xff0c;已深刻影响了多个行业&#xff0c;服务器行业亦不例外。在过去&#xff0c;服务器的主要任务是简单地提供存储、计算和传输数据的服务。然而&#xff0c;随着AI的崛起…

基于三台主机搭建 Web 服务环境:Nginx、NFS 与 DNS 配置全流程

基于三台主机搭建 Web 服务环境&#xff1a;Nginx、NFS 与 DNS 配置全流程 一、引言 在当今数字化的时代&#xff0c;搭建一个稳定、高效的 Web 服务环境是许多开发者和运维人员的常见需求。本文将详细介绍如何利用三台主机搭建一个包含 Nginx、NFS 和 DNS 服务的 Web 环境&…

MySQL——MVCC

1.为什么需要MVCC在并发场景下&#xff0c;读写操作会面临严重的冲突问题&#xff1a;1.读操作如果遇到写操作&#xff0c;要么“读到未提交的脏数据”&#xff0c;要么“被写操作阻塞&#xff08;等待锁释放&#xff09;”&#xff1b;2.写操作如果遇到读操作&#xff0c;要么…

数据结构第2问:什么是算法?

算法 算法是一组用于解决具体问题的、明确的、有序的步骤或规则&#xff0c;能够在有限的时间内通过这些步骤得到问题的答案。 算法的5个重要特性&#xff1a; 有穷性&#xff1a;算法必须在有限的步骤内结束&#xff0c;不能无限循环&#xff0c;保证最终能够得到结果。确定性…

12-大语言模型—Transformer 打地基,下游任务盖出百样房,指标来验收|下游任务白话指南

目录 1、核心逻辑&#xff1a;Transformer 的 “语言处理闭环” 2、转导与感知 → 模型咋 “理解语言”&#xff1f; 2.1、 人类 vs 机器的 “语言理解逻辑” 2.2、 自注意力机制&#xff1a;模型 “理解语言” 的数学核心 2.2.1、通俗拆解 2.2.1.1、是什么&#xff1f; …

深入探索爬虫与自动化脚本:释放效率的利器

在当今信息爆炸的时代&#xff0c;高效获取和处理数据已成为核心竞争力。爬虫与自动化脚本正是解决这一痛点的关键技术——它们如同数字世界的勤劳助手&#xff0c;帮我们自动完成繁琐重复的任务。下面我们来系统了解这两项技术的核心要点、应用场景和最佳实践。一、爬虫与自动…

React函数组件的“生活管家“——useEffect Hook详解

&#x1f3af; React函数组件的"生活管家"——useEffect Hook详解 1. &#x1f31f; 开篇&#xff1a;从生活中的"副作用"说起 嘿&#xff0c;各位掘友们&#xff01;今天咱们来聊聊React函数组件里的一个“大管家”——useEffect Hook。你可能会问&#x…

python基础:request请求Cookie保持登录状态、重定向与历史请求、SSL证书校验、超时和重试失败、自动生成request请求代码和案例实践

Cookie保持登录状态cookie session鉴权机制 cookie是由web服务器保存在用户浏览器&#xff08;客户端&#xff09;上的小文本文件&#xff0c;他可以包含有关用户的信息。无论何时用户访问到服务器&#xff0c;都会带上该服务器的cookie信息&#xff0c;一般cookie都是有有效期…

Vulkan入门教程 | 第二部分:创建实例

前言&#xff1a;本教程为笔者依据教程https://docs.vulkan.net.cn/spec/latest/index.html#_about进行Vulkan学习并结合自己的理解整理的笔记&#xff0c;供大家学习和参考。 &#xff08;注意&#xff1a;代码仅为片段&#xff0c;非完整程序&#xff09; 学习前提&#xff1…

PHP云原生架构:容器化、Kubernetes与Serverless实践

引言 随着云计算的普及,PHP应用也在向云原生架构演进。本文将深入探讨PHP在云原生环境中的最佳实践,包括容器化部署、Kubernetes编排、Serverless架构以及云原生监控与日志方案,帮助开发者构建现代化、可扩展的PHP应用。 容器化PHP应用 基础Dockerfile优化 # 多阶段构建…

【华为机试】5. 最长回文子串

文章目录5. 最长回文子串描述示例 1示例 2示例 3示例 4提示解题思路方法一&#xff1a;中心扩展法&#xff08;推荐&#xff09;方法二&#xff1a;动态规划方法三&#xff1a;Manacher算法方法四&#xff1a;暴力解法代码实现复杂度分析测试用例完整题解代码5. 最长回文子串 …

【图像处理基石】如何对遥感图像进行实例分割?

遥感图像实例分割是指在遥感影像中&#xff0c;不仅要识别出不同类别的目标&#xff08;如建筑物、车辆、道路等&#xff09;&#xff0c;还要区分同一类别中的不同个体&#xff08;如建筑物1、建筑物2&#xff09;&#xff0c;并为每个实例生成精确的像素级掩码。 一、遥感图…