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-reloadsystemctl 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 MODE=standalone \
  -e JVM_XMS=1g -e JVM_XMX=1g \
  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-plugin=mysql_native_password 解决新版认证问题
  • --character-set-server=utf8mb4 支持完整unicode
  • --lower_case_table_names=1 避免表名大小写问题

完整启动示例:

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_PASSWORD=your_strong_password \
  -e TZ=Asia/Shanghai \
  mysql:8.0 \
  --default-authentication-plugin=mysql_native_password \
  --character-set-server=utf8mb4 \
  --lower_case_table_names=1

3. 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:
      - MODE=standalone
    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_PASSWORD=root
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

3.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 服务健康检查

部署完成后我习惯用这个检查清单验证:

  1. docker-compose ps查看所有容器状态
  2. curl http://nacos:8848/nacos测试Nacos接口
  3. mysql -h 172.28.1.11 -uroot -p测试MySQL连接
  4. redis-cli -h 172.28.1.12 ping测试Redis响应

4.2 常见问题解决

问题1:Nacos连接MySQL报Public Key Retrieval错误 解决方法:在MySQL连接字符串添加参数:

allowPublicKeyRetrieval=true&useSSL=false

问题2:服务注册到Nacos但显示不健康 检查项:

  • 是否开放了服务自身的健康检查端口
  • Nacos控制台命名空间是否匹配
  • 服务配置的Nacos地址是否为容器内地址

问题3:Docker日志占用磁盘过大 解决方案:在daemon.json中配置日志轮转:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

记得有一次部署时所有服务都正常但前端无法访问,最后发现是Nginx配置里少了这段:

location / {
    try_files $uri $uri/ /index.html;
}

这种细节问题往往最耗时,建议部署前先准备好完整的检查清单。

更多推荐