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

【手把手教学】利用Docker-Compose一键部署RuoYi-Cloud微服务集群

1. 为什么选择Docker-Compose部署RuoYi-Cloud?

如果你正在寻找一个快速搭建企业级微服务框架的方案,RuoYi-Cloud绝对是个不错的选择。作为一个基于Spring Cloud的权限管理系统,它集成了常用的中间件和微服务组件。而使用Docker-Compose来部署,就像把整个微服务集群装进了一个"集装箱",一键启动所有服务,再也不用担心环境配置的繁琐问题。

我去年接手一个紧急项目时,就深刻体会到了传统部署方式的痛苦。那时候需要手动安装MySQL、Redis、Nacos等一堆服务,光是版本兼容问题就折腾了两天。后来改用Docker-Compose方案后,同样的环境搭建只需要15分钟。特别是当你需要频繁重建测试环境时,这种优势会更加明显。

RuoYi-Cloud官方已经提供了完善的Docker支持,包括:

  • 预配置的docker-compose.yml文件
  • 自动化的服务启动脚本
  • 容器间的网络隔离与通信配置
  • 数据卷持久化方案

这套方案特别适合以下场景:

  1. 开发团队需要快速搭建本地开发环境
  2. 测试人员想要一键部署测试环境
  3. 中小型企业部署生产环境
  4. 需要频繁重建环境的CI/CD流程

2. 部署前的准备工作

2.1 硬件与软件要求

在开始之前,请确保你的Linux服务器满足以下条件:

最低配置

  • CPU:2核
  • 内存:4GB
  • 磁盘:40GB
  • 操作系统:CentOS 7+/Ubuntu 18.04+

推荐配置(生产环境):

  • CPU:4核+
  • 内存:8GB+
  • 磁盘:100GB+
  • 操作系统:CentOS 8/Ubuntu 20.04+

我曾在2核4GB的云服务器上测试过,能跑但比较吃力。特别是当所有服务都启动后,内存占用会飙升。如果你只是本地开发,16GB内存的笔记本会更合适。

2.2 安装必要软件

首先需要安装Docker和Docker-Compose。这里以CentOS为例:

# 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动Docker sudo systemctl start docker sudo systemctl enable docker # 安装Docker-Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker --version docker-compose --version

如果看到版本号输出,说明安装成功。我在阿里云ECS上实测这个过程大约需要5分钟。

3. 获取并准备RuoYi-Cloud项目

3.1 克隆项目代码

RuoYi-Cloud的官方仓库在Gitee上,使用以下命令克隆:

git clone https://gitee.com/y_project/RuoYi-Cloud.git cd RuoYi-Cloud

这里有个小技巧:如果你在国内,使用Gitee会比GitHub快很多。我曾经在晚上高峰期克隆GitHub仓库,速度只有几十KB/s,而Gitee能跑满带宽。

3.2 项目结构解析

克隆完成后,你会看到如下目录结构:

RuoYi-Cloud/ ├── docker/ # Docker相关配置 │ ├── copy.sh # 文件拷贝脚本 │ ├── deploy.sh # 部署脚本 │ ├── docker-compose.yml # 编排文件 │ └── ... ├── ruoyi-auth/ # 认证服务 ├── ruoyi-gateway/ # 网关服务 ├── ruoyi-modules/ # 业务模块 │ ├── ruoyi-system/ # 系统模块 │ └── ... ├── ruoyi-visual/ # 监控相关 └── ...

重点关注的docker目录包含了所有部署需要的脚本和配置文件。我第一次部署时犯的错误就是没仔细看这个目录结构,结果漏掉了关键配置。

3.3 项目打包

在部署前需要先打包Java项目:

# 使用项目提供的打包脚本 ./package.bat # Windows ./package.sh # Linux

打包过程可能会花费几分钟时间,取决于你的机器性能。我在16核32GB的服务器上测试,完整打包大约需要3分钟。

打包完成后,需要将生成的Jar文件拷贝到docker目录:

# 执行拷贝脚本 cd docker ./copy.sh

这个脚本会自动把各个模块的Jar包拷贝到正确位置。如果遇到权限问题,记得给脚本添加执行权限:

chmod +x *.sh

4. 配置与部署微服务集群

4.1 修改关键配置

在部署前,有几个关键配置需要检查:

  1. docker-compose.yml:这是整个部署的核心文件,定义了所有服务和它们的依赖关系
  2. nacos配置:需要确保服务能正确注册到Nacos
  3. 数据库连接:检查MySQL的用户名密码是否正确

我建议先修改docker-compose.yml中的以下部分:

services: ruoyi-mysql: environment: MYSQL_ROOT_PASSWORD: root # 生产环境务必修改 MYSQL_DATABASE: ry-cloud ruoyi-redis: # Redis默认没有密码,生产环境建议添加

对于Nacos配置,需要修改ruoyi-system-dev.yml中的Redis和MySQL连接信息:

spring: redis: host: ruoyi-redis # 使用服务名而非IP port: 6379 datasource: url: jdbc:mysql://ruoyi-mysql:3306/ry-cloud?useSSL=false username: root password: root

4.2 分阶段部署

RuoYi-Cloud的部署脚本支持分阶段部署,这是个很实用的功能:

# 先部署基础服务(MySQL, Redis, Nacos) ./deploy.sh base # 检查基础服务是否正常运行 docker ps -a # 部署业务模块 ./deploy.sh modules

为什么要分阶段部署?因为微服务之间有依赖关系。比如业务模块需要先有MySQL和Nacos才能正常启动。我在第一次部署时直接运行了完整部署,结果因为Nacos还没准备好,导致一堆服务启动失败。

4.3 常见问题排查

部署过程中可能会遇到这些问题:

问题1:Nacos无法访问

  • 检查Nacos容器是否正常运行:docker logs ruoyi-nacos
  • 确认端口8848是否暴露:netstat -tlnp | grep 8848
  • 尝试从宿主机访问:curl http://localhost:8848/nacos

问题2:MySQL连接失败

  • 检查MySQL日志:docker logs ruoyi-mysql
  • 确认密码是否正确
  • 检查数据库是否初始化:docker exec -it ruoyi-mysql mysql -uroot -p

问题3:Redis连接超时

  • 确认Redis容器IP:docker inspect ruoyi-redis | grep IPAddress
  • 检查业务模块配置中的Redis地址

我遇到过最棘手的问题是Nacos配置没生效,后来发现是因为缓存。解决方法是在Nacos控制台删除配置后重新发布。

5. 验证与优化部署

5.1 服务健康检查

部署完成后,需要验证各服务是否正常运行:

  1. Nacos:访问http://服务器IP:8848/nacos,默认账号nacos/nacos

    • 检查所有服务是否注册成功
    • 确认配置是否正确加载
  2. MySQL

    docker exec -it ruoyi-mysql mysql -uroot -p show databases; use ry-cloud; show tables;
  3. 业务服务

    • 检查网关:curl http://localhost:8080
    • 检查系统模块:curl http://localhost:8080/system/version

5.2 性能优化建议

对于生产环境,我建议做以下优化:

  1. 资源限制: 在docker-compose.yml中为每个服务设置资源限制:

    services: ruoyi-gateway: deploy: resources: limits: cpus: '1' memory: 1G
  2. 日志管理: 配置日志轮转和大小限制:

    services: ruoyi-system: logging: driver: "json-file" options: max-size: "100m" max-file: "3"
  3. 高可用: 对于关键服务如MySQL和Redis,考虑使用集群模式而非单节点。

5.3 备份与恢复

定期备份你的数据:

# 备份MySQL docker exec ruoyi-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql # 备份Redis docker exec ruoyi-redis redis-cli save docker cp ruoyi-redis:/data/dump.rdb .

恢复数据也很简单:

# 恢复MySQL cat backup.sql | docker exec -i ruoyi-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" # 恢复Redis docker cp dump.rdb ruoyi-redis:/data/ docker restart ruoyi-redis

6. 日常维护与扩展

6.1 服务监控

RuoYi-Cloud自带了监控模块,但你可能还需要:

  1. 容器监控

    docker stats
  2. 日志收集: 考虑使用ELK或Grafana Loki来集中管理日志。

  3. 健康检查: 在docker-compose.yml中添加健康检查:

    healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3

6.2 扩展新模块

当需要添加新模块时:

  1. 在ruoyi-modules下创建新模块
  2. 修改docker-compose.yml添加新服务
  3. 更新copy.sh脚本包含新模块
  4. 重新打包部署

6.3 版本升级

升级RuoYi-Cloud版本时:

  1. 拉取最新代码
  2. 备份数据库
  3. 检查配置变更
  4. 重新打包部署
  5. 执行数据库迁移脚本(如果有)

我在升级时总会先在新环境测试,确认无误后再更新生产环境。这个习惯避免了很多潜在问题。

http://www.cnnetsun.cn/news/1347011.html

相关文章:

  • Qwen3-0.6B-FP8快速入门Git:命令解释与工作流指导
  • 避开这5个坑!Unity背景音乐优化实战(含Audio Mixer配置)
  • 从基准测试到创新:利用生成先验构建鲁棒图像水印以抵御深度编辑攻击
  • 正运动控制器:视觉纠偏与找孔的高效实现
  • OpenCore Legacy Patcher实战:零基础15分钟打造macOS启动盘
  • all-MiniLM-L6-v2参数详解:6层Transformer结构如何平衡精度与效率?
  • Stata实战:工具变量法(IV)处理内生性问题,从原理到操作全解析
  • 智能客服测试实战:从自动化到性能优化的全链路解决方案
  • VMware虚拟机中搭建MogFace-large开发测试环境教程
  • 避坑指南:BERT微调时90%人会遇到的5个典型错误及解决方案
  • 电商运营必备:RMBG-2.0一键移除商品背景,1秒出透明图
  • 期货量化策略验证的核心工具:天勤量化TqSdk历史回测系统全解析
  • OpenAI Whisper-base.en语音识别技术全解析:从部署到生产级应用
  • STM32CubeMX+FreeRTOS实战:如何用Tracealyzer可视化任务调度(附J-Link避坑指南)
  • Meta-Llama-3-8B-Instruct新手入门:vLLM+WebUI环境搭建与快速测试
  • cv_unet_image-colorization从部署到应用:政务档案馆黑白文档智能着色实施路径
  • 从零开始:用C语言模拟中断控制器与CPU交互(含调试技巧)
  • 基于AI多源数据融合的美联储“三重门”困境分析与政策响应研究
  • 从ERA5小时数据到日均数据:一个高效批量处理的Python实践
  • Android关机流程深度解析:从用户触发到内核执行
  • Stable Diffusion 3.5新手教程:输入文字就能出图,AI绘画原来这么简单
  • 阿里云MQTT连接失败?可能是你的Client ID没设对!最新避坑指南
  • 兴通物联工厂用扫码器的技术优势与产线赋能价值
  • MusePublic批量生成教程:脚本化调用WebUI API生成百张人像素材
  • Dify私有化部署实战:从零构建企业级AI开发环境
  • LaTeX参考文献排版避坑指南:特殊符号$引发的缩进问题解决方案
  • UE5 无插件实战:构建本地JSON配置与HTTP API数据获取系统
  • GME-Qwen2-VL-2B-Instruct 集成SpringBoot实战:构建智能图片内容审核微服务
  • 【零基础掌握CAPL测试】——testStepPass/Fail:自动化测试结果判定与报告生成
  • PADS Layout VX.2.2元件列表导出全攻略:从脚本选择到WPS表格配置