保姆级避坑指南:在CentOS 7上用Docker Compose一键部署RuoYi-Cloud(含MySQL 8.0与Nacos 2.0.4配置)
CentOS 7实战RuoYi-Cloud微服务集群部署深度排错手册当你在深夜的服务器前面对满屏红色错误日志时是否想过——为什么同样的Docker Compose配置别人的RuoYi-Cloud能一键启动而你的却像多米诺骨牌般连环报错这份手册将直击MySQL 8.0认证变更、Nacos 2.0.4内核限制等真实痛点用20次生产环境部署经验提炼出这套错误日志→根因分析→修复方案的实战框架。1. 环境准备阶段的隐形陷阱1.1 内存分配的艺术在虚拟机中部署微服务集群时内存不足引发的OOM Killer往往表现为随机服务终止。建议采用分级配置策略# 查看当前内存使用情况单位MB free -m # 计算各服务内存需求基准值生产环境建议 echo Nacos:1024 MySQL:1024 Redis:512 Gateway:512 Other*4:2048 | awk {sum$2}END{print Total:,sum,MB}典型误判当docker-compose logs显示服务异常退出但无错误日志时需检查内核消息dmesg | grep -i killed process1.2 内核参数调优CentOS 7默认的vm.max_map_count可能导致Nacos启动失败# 临时生效 sysctl -w vm.max_map_count262144 # 永久配置 echo vm.max_map_count262144 /etc/sysctl.conf注意修改后需执行sysctl -p加载新配置该值直接影响Nacos的索引性能2. MySQL 8.0认证协议的那些坑2.1 Public Key Retrieval错误新版本MySQL默认启用caching_sha2_password认证会导致连接池初始化失败。解决方案有三客户端配置法适合应用层# application.yml spring: datasource: url: jdbc:mysql://mysql:3306/ry-cloud?useSSLfalseallowPublicKeyRetrievaltrue服务端降级法需重建用户ALTER USER root% IDENTIFIED WITH mysql_native_password BY yourpassword;容器启动参数法推荐# docker-compose.yml片段 mysql: environment: - MYSQL_DEFAULT_AUTHENTICATION_PLUGINmysql_native_password2.2 反向DNS解析阻塞MySQL日志中出现IP address could not be resolved警告时需在my.cnf中添加[mysqld] skip-name-resolve副作用授权表中的hostname将失效必须使用IP或通配符%3. Nacos 2.0.4的mbind困局3.1 内核安全限制当看到mbind: Operation not permitted错误时本质是容器权限不足# docker-compose.yml修改方案 nacos: privileged: true cap_add: - SYS_NICE安全警告此配置会降低安全性仅限测试环境使用。生产环境应# 创建自定义seccomp配置文件 echo { syscalls: [ { names: [mbind], action: SCMP_ACT_ALLOW } ] } /etc/docker/nacos-seccomp.json # 启动时加载 docker run --security-opt seccomp/etc/docker/nacos-seccomp.json ...4. 端口冲突诊断进阶技巧4.1 三维度排查法当服务端口监听失败时按以下顺序排查系统层ss -tulnp | grep :8848 # 若被占用输出示例 # tcp LISTEN 0 128 *:8848 *:* users:((java,pid1234,fd42))防火墙层firewall-cmd --list-ports # 临时开放端口 firewall-cmd --add-port8848/tcp --zonepublic --permanentDocker网络层docker network inspect bridge | grep -A 5 IPAM # 检查子网冲突4.2 容器间通信验证在MySQL容器中测试Nacos连通性docker exec -it mysql bash -c apt-get update apt-get install -y telnet telnet nacos 88485. 部署后的关键检查点5.1 服务健康诊断使用RuoYi-Cloud内置的检查接口curl -X GET http://localhost:8080/actuator/health | jq . # 理想输出 # { # status: UP, # components: { ... } # }5.2 日志关联分析通过grep实现跨服务日志追踪docker-compose logs --no-color | grep -E ERROR|WARN | sort -k 3 # 输出示例 # mysql_1 | 2023-01-01T00:00:00 ERROR [main] o.s.boot.SpringApplication - Application run failed # nacos_1 | 2023-01-01T00:00:01 WARN [com.alibaba.nacos] - No available server to connect6. 性能调优实战参数6.1 JVM内存配置在docker-compose.yml中为Java服务添加environment: - JAVA_OPTS-Xms512m -Xmx512m -XX:MaxMetaspaceSize256m容量计算公式Xmx ≤ (容器内存限制 - 256MB)6.2 MySQL容器优化mysql: deploy: resources: limits: cpus: 2 memory: 2G command: [ --innodb_buffer_pool_size1G, --innodb_log_file_size256M ]7. 故障重现实验室7.1 模拟网络分区测试微服务容错能力# 断开Nacos网络 docker network disconnect ruoyi-cloud_default nacos # 观察服务行为预期触发熔断 watch -n 1 curl -s http://gateway:8080/fallback-test7.2 强制触发GC诊断内存泄漏docker exec ruoyi-auth jcmd 1 GC.run # 配合Arthas观察 # dashboard -i 5000 -n 10