【手把手教学】利用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文件
- 自动化的服务启动脚本
- 容器间的网络隔离与通信配置
- 数据卷持久化方案
这套方案特别适合以下场景:
- 开发团队需要快速搭建本地开发环境
- 测试人员想要一键部署测试环境
- 中小型企业部署生产环境
- 需要频繁重建环境的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 *.sh4. 配置与部署微服务集群
4.1 修改关键配置
在部署前,有几个关键配置需要检查:
- docker-compose.yml:这是整个部署的核心文件,定义了所有服务和它们的依赖关系
- nacos配置:需要确保服务能正确注册到Nacos
- 数据库连接:检查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: root4.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 服务健康检查
部署完成后,需要验证各服务是否正常运行:
Nacos:访问http://服务器IP:8848/nacos,默认账号nacos/nacos
- 检查所有服务是否注册成功
- 确认配置是否正确加载
MySQL:
docker exec -it ruoyi-mysql mysql -uroot -p show databases; use ry-cloud; show tables;业务服务:
- 检查网关:
curl http://localhost:8080 - 检查系统模块:
curl http://localhost:8080/system/version
- 检查网关:
5.2 性能优化建议
对于生产环境,我建议做以下优化:
资源限制: 在docker-compose.yml中为每个服务设置资源限制:
services: ruoyi-gateway: deploy: resources: limits: cpus: '1' memory: 1G日志管理: 配置日志轮转和大小限制:
services: ruoyi-system: logging: driver: "json-file" options: max-size: "100m" max-file: "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-redis6. 日常维护与扩展
6.1 服务监控
RuoYi-Cloud自带了监控模块,但你可能还需要:
容器监控:
docker stats日志收集: 考虑使用ELK或Grafana Loki来集中管理日志。
健康检查: 在docker-compose.yml中添加健康检查:
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3
6.2 扩展新模块
当需要添加新模块时:
- 在ruoyi-modules下创建新模块
- 修改docker-compose.yml添加新服务
- 更新copy.sh脚本包含新模块
- 重新打包部署
6.3 版本升级
升级RuoYi-Cloud版本时:
- 拉取最新代码
- 备份数据库
- 检查配置变更
- 重新打包部署
- 执行数据库迁移脚本(如果有)
我在升级时总会先在新环境测试,确认无误后再更新生产环境。这个习惯避免了很多潜在问题。
