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 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 服务健康检查
部署完成后我习惯用这个检查清单验证:
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 常见问题解决
问题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;
}
这种细节问题往往最耗时,建议部署前先准备好完整的检查清单。
更多推荐
所有评论(0)