ruoyi-cloud微服务基于docker-compose的Linux生产环境部署实战

张开发
2026/4/15 9:33:21 15 分钟阅读

分享文章

ruoyi-cloud微服务基于docker-compose的Linux生产环境部署实战
1. 环境准备与基础配置第一次在Linux生产环境部署ruoyi-cloud微服务时我特意选了台闲置的测试服务器练手。建议选择CentOS 7.6以上版本实测这个版本对Docker的兼容性最稳定。内存分配是个容易踩坑的点——我最初只给虚拟机分配了2G内存结果Nacos和MySQL同时启动时直接OOM崩溃。后来发现单个Nacos服务就需要1.5G内存加上其他组件4G内存是底线配置。安装Docker时推荐使用阿里云镜像源速度能快3-5倍。这里有个细节很多教程会直接使用官方源但在国内环境经常卡在下载环节。我常用的配置命令是这样的# 安装必要工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 设置阿里云镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装Docker引擎 yum install -y docker-ce docker-ce-cli containerd.io安装完成后别急着启动先配置镜像加速。有次我在没配加速的情况下拉取MySQL镜像速度只有50KB/s后来在/etc/docker/daemon.json加入以下配置速度直接飙升到8MB/s{ registry-mirrors: [https://mr63yffu.mirror.aliyuncs.com], log-driver: json-file, log-opts: {max-size: 100m} }注意修改daemon.json后必须执行systemctl daemon-reload和systemctl restart docker才能生效2. 关键组件独立部署2.1 Nacos配置实战ruoyi-cloud 2023年后的版本要求Nacos 2.0.4这里有个版本兼容性的大坑如果用错版本会导致服务注册失败。我推荐使用以下命令拉取指定版本镜像docker pull nacos/nacos-server:v2.0.4启动Nacos时需要特别注意端口映射。除了常见的8848端口9848和9849这两个gRPC端口也必须暴露否则客户端无法连接docker run -d --name nacos \ -p 8848:8848 -p 9848:9848 -p 9849:9849 \ -e MODEstandalone \ -e JVM_XMS1g -e JVM_XMX1g \ nacos/nacos-server:v2.0.4生产环境建议将JVM参数调大我遇到过默认512M堆内存导致频繁Full GC的情况2.2 MySQL优化配置MySQL容器部署时最容易遇到权限问题。我习惯先创建好挂载目录并设置权限mkdir -p /data/mysql/{data,logs,conf} chmod -R 755 /data/mysql启动命令中这几个参数特别关键--default-authentication-pluginmysql_native_password解决新版认证问题--character-set-serverutf8mb4支持完整unicode--lower_case_table_names1避免表名大小写问题完整启动示例docker run -d --name mysql \ -p 3306:3306 \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/logs:/var/log/mysql \ -v /data/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDyour_strong_password \ -e TZAsia/Shanghai \ mysql:8.0 \ --default-authentication-pluginmysql_native_password \ --character-set-serverutf8mb4 \ --lower_case_table_names13. Docker Compose编排艺术3.1 编写compose文件ruoyi-cloud的docker-compose.yml需要特别注意服务启动顺序。我优化后的版本增加了健康检查和依赖关系version: 3 services: nacos: image: nacos/nacos-server:v2.0.4 ports: - 8848:8848 - 9848:9848 - 9849:9849 environment: - MODEstandalone healthcheck: test: [CMD, curl, -f, http://localhost:8848/nacos] interval: 30s timeout: 10s retries: 3 mysql: image: mysql:8.0 ports: - 3306:3306 volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORDroot healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] timeout: 20s retries: 103.2 网络配置技巧默认的bridge网络会导致容器间通信问题。我建议创建自定义网络并固定IP段networks: ruoyi-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16然后在每个service中添加services: nacos: networks: ruoyi-net: ipv4_address: 172.28.1.10这样其他服务就可以直接用nacos:8848这样的域名访问避免IP变动导致配置失效。4. 部署验证与排错4.1 服务健康检查部署完成后我习惯用这个检查清单验证docker-compose ps查看所有容器状态curl http://nacos:8848/nacos测试Nacos接口mysql -h 172.28.1.11 -uroot -p测试MySQL连接redis-cli -h 172.28.1.12 ping测试Redis响应4.2 常见问题解决问题1Nacos连接MySQL报Public Key Retrieval错误 解决方法在MySQL连接字符串添加参数allowPublicKeyRetrievaltrueuseSSLfalse问题2服务注册到Nacos但显示不健康 检查项是否开放了服务自身的健康检查端口Nacos控制台命名空间是否匹配服务配置的Nacos地址是否为容器内地址问题3Docker日志占用磁盘过大 解决方案在daemon.json中配置日志轮转{ log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }记得有一次部署时所有服务都正常但前端无法访问最后发现是Nginx配置里少了这段location / { try_files $uri $uri/ /index.html; }这种细节问题往往最耗时建议部署前先准备好完整的检查清单。

更多文章