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

【手把手教学】利用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服务器满足以下条件最低配置CPU2核内存4GB磁盘40GB操作系统CentOS 7/Ubuntu 18.04推荐配置生产环境CPU4核内存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?useSSLfalse username: root password: root4.2 分阶段部署RuoYi-Cloud的部署脚本支持分阶段部署这是个很实用的功能# 先部署基础服务MySQL, Redis, Nacos ./deploy.sh base # 检查基础服务是否正常运行 docker ps -a # 部署业务模块 ./deploy.sh modules为什么要分阶段部署因为微服务之间有依赖关系。比如业务模块需要先有MySQL和Nacos才能正常启动。我在第一次部署时直接运行了完整部署结果因为Nacos还没准备好导致一堆服务启动失败。4.3 常见问题排查部署过程中可能会遇到这些问题问题1Nacos无法访问检查Nacos容器是否正常运行docker logs ruoyi-nacos确认端口8848是否暴露netstat -tlnp | grep 8848尝试从宿主机访问curl http://localhost:8848/nacos问题2MySQL连接失败检查MySQL日志docker logs ruoyi-mysql确认密码是否正确检查数据库是否初始化docker exec -it ruoyi-mysql mysql -uroot -p问题3Redis连接超时确认Redis容器IPdocker inspect ruoyi-redis | grep IPAddress检查业务模块配置中的Redis地址我遇到过最棘手的问题是Nacos配置没生效后来发现是因为缓存。解决方法是在Nacos控制台删除配置后重新发布。5. 验证与优化部署5.1 服务健康检查部署完成后需要验证各服务是否正常运行Nacos访问http://服务器IP:8848/nacos默认账号nacos/nacos检查所有服务是否注册成功确认配置是否正确加载MySQLdocker exec -it ruoyi-mysql mysql -uroot -p show databases; use ry-cloud; show tables;业务服务检查网关curl http://localhost:8080检查系统模块curl http://localhost:8080/system/version5.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: 36.2 扩展新模块当需要添加新模块时在ruoyi-modules下创建新模块修改docker-compose.yml添加新服务更新copy.sh脚本包含新模块重新打包部署6.3 版本升级升级RuoYi-Cloud版本时拉取最新代码备份数据库检查配置变更重新打包部署执行数据库迁移脚本如果有我在升级时总会先在新环境测试确认无误后再更新生产环境。这个习惯避免了很多潜在问题。