保姆级教程:用Docker Compose一键部署RuoYi-Vue-Plus(含MySQL 8和Redis 7)
容器化部署RuoYi-Vue-Plus全栈解决方案:从零到生产的Docker Compose实践
在当今快速迭代的开发环境中,传统的手动部署方式正逐渐被容器化技术所取代。对于采用前后端分离架构的RuoYi-Vue-Plus这类企业级快速开发框架而言,Docker Compose提供了一种优雅的解决方案——它不仅能将复杂的依赖关系简化为声明式配置,更能确保开发、测试和生产环境的高度一致性。本文将深入探讨如何通过容器化技术,在30分钟内完成从零开始到完整可用的RuoYi-Vue-Plus环境部署。
1. 环境规划与准备工作
在开始容器化部署之前,合理的环境规划是成功的第一步。与传统部署方式不同,容器化方案需要考虑网络拓扑、存储卷映射、服务依赖关系等特殊因素。
基础环境要求 :
- Docker Engine ≥ 20.10.14(需支持Compose V2格式)
- 可用磁盘空间 ≥ 5GB(包含镜像层和持久化数据)
- 内存 ≥ 4GB(建议8GB以上以获得流畅体验)
提示:在Windows/macOS上建议使用Docker Desktop,Linux环境下需单独安装docker-compose插件
验证Docker环境是否就绪:
docker --version
docker-compose version
对于国内用户,推荐配置镜像加速以提升拉取效率。创建或修改
/etc/docker/daemon.json
:
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
2. 编写Docker Compose编排文件
容器化部署的核心在于精心设计的
docker-compose.yml
文件。我们将采用多服务架构,确保各组件既能独立运行又可协同工作。
创建项目目录结构:
ruoyi-docker/
├── compose/
│ ├── mysql/
│ │ └── init/ # 初始化SQL脚本
│ ├── redis/
│ │ └── redis.conf # Redis自定义配置
│ └── ruoyi/
│ ├── apps/ # 应用jar包目录
│ └── config/ # 应用配置文件
└── docker-compose.yml
完整的
docker-compose.yml
配置示例:
version: '3.8'
services:
mysql:
image: mysql:8.0.32
container_name: ruoyi-mysql
environment:
MYSQL_ROOT_PASSWORD: RuoYi@123
MYSQL_DATABASE: ry_vue_plus
TZ: Asia/Shanghai
volumes:
- ./compose/mysql/data:/var/lib/mysql
- ./compose/mysql/init:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 3
redis:
image: redis:7.0.11
container_name: ruoyi-redis
volumes:
- ./compose/redis/data:/data
- ./compose/redis/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
ruoyi-backend:
build:
context: .
dockerfile: Dockerfile.backend
container_name: ruoyi-backend
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./compose/ruoyi/apps:/app
- ./compose/ruoyi/config:/config
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: dev
restart: unless-stopped
ruoyi-frontend:
build:
context: .
dockerfile: Dockerfile.frontend
container_name: ruoyi-frontend
ports:
- "80:80"
depends_on:
- ruoyi-backend
restart: unless-stopped
关键配置解析:
-
服务依赖管理
:通过
depends_on+healthcheck确保启动顺序 - 数据持久化 :所有关键数据通过volume映射到宿主机
- 时区统一 :所有容器强制使用Asia/Shanghai时区
- 资源隔离 :每个服务运行在独立容器中
3. 构建自定义镜像与配置优化
标准镜像往往不能满足特定需求,我们需要为前后端分别构建定制化镜像。
后端Dockerfile(Dockerfile.backend) :
FROM eclipse-temurin:11-jdk-focal
WORKDIR /app
# 安装必要工具
RUN apt-get update && apt-get install -y \
wait-for-it \
&& rm -rf /var/lib/apt/lists/*
# 复制构建好的jar包
COPY compose/ruoyi/apps/ruoyi-admin.jar /app/ruoyi-admin.jar
COPY compose/ruoyi/config/application-dev.yml /config/application-dev.yml
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/ || exit 1
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/ruoyi-admin.jar", "--spring.config.location=/config/application-dev.yml"]
前端Dockerfile(Dockerfile.frontend) :
FROM nginx:1.23.3-alpine
# 删除默认配置
RUN rm -rf /etc/nginx/conf.d/*
# 复制构建产物和自定义配置
COPY compose/ruoyi/ui/dist /usr/share/nginx/html
COPY compose/ruoyi/config/nginx.conf /etc/nginx/conf.d/ruoyi.conf
# 设置时区
RUN apk add --no-cache tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
MySQL初始化脚本 (compose/mysql/init/01_schema.sql):
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'RuoYi@123';
GRANT ALL PRIVILEGES ON ry_vue_plus.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
Redis自定义配置 (compose/redis/redis.conf):
bind 0.0.0.0
protected-mode no
daemonize no
requirepass RuoYi@123
timeout 0
tcp-keepalive 300
4. 部署流程与运维管理
完整的部署过程可分为准备、构建、运行三个阶段,每个阶段都有其最佳实践。
阶段一:准备构建产物
-
克隆项目仓库:
git clone https://gitee.com/JavaLionLi/RuoYi-Vue-Plus.git -
后端构建:
cd RuoYi-Vue-Plus mvn clean package -DskipTests cp ruoyi-admin/target/ruoyi-admin.jar ../ruoyi-docker/compose/ruoyi/apps/ -
前端构建:
cd ruoyi-ui npm install --registry=https://registry.npm.taobao.org npm run build:prod cp -r dist ../ruoyi-docker/compose/ruoyi/ui/
阶段二:启动容器集群
cd ruoyi-docker
docker-compose up -d --build
常用运维命令 :
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 服务启停 |
docker-compose stop ruoyi-backend
| 停止指定服务 |
| 日志查看 |
docker-compose logs -f ruoyi-frontend
| 跟踪前端日志 |
| 状态检查 |
docker-compose ps
| 查看服务状态 |
| 配置重载 |
docker-compose restart ruoyi-backend
| 重启后端服务 |
| 数据备份 |
tar -czvf mysql_backup.tar.gz compose/mysql/data
| 备份MySQL数据 |
性能调优建议 :
-
对于生产环境,建议在
docker-compose.yml中添加资源限制:ruoyi-backend: deploy: resources: limits: cpus: '2' memory: 2G -
Redis配置优化:
maxmemory 1gb maxmemory-policy allkeys-lru
5. 故障排查与常见问题
容器化环境的问题诊断有其特殊性,掌握正确的排查方法能极大提高效率。
典型问题与解决方案 :
-
MySQL连接失败
- 现象:后端启动时报数据库连接异常
-
排查步骤:
docker exec -it ruoyi-mysql mysql -uroot -pRuoYi@123 SHOW GRANTS FOR 'ruoyi'@'%'; - 解决方案:确保初始化脚本正确执行
-
Redis认证失败
-
现象:后端日志中出现
NOAUTH错误 -
验证命令:
docker exec -it ruoyi-redis redis-cli -a RuoYi@123 PING -
修复方法:检查
redis.conf中的requirepass配置
-
现象:后端日志中出现
-
前端静态资源404
-
检查方法:
docker exec ruoyi-frontend ls -l /usr/share/nginx/html - 可能原因:构建产物未正确复制到镜像中
-
检查方法:
网络连通性测试 :
# 测试后端到MySQL
docker exec ruoyi-backend ping ruoyi-mysql
# 测试前端到后端API
docker exec ruoyi-frontend curl -I http://ruoyi-backend:8080
日志分析技巧 :
-
使用
grep过滤关键错误:docker-compose logs | grep -i error -
按时间范围查看日志:
docker logs --since 2023-07-01T00:00:00 ruoyi-backend
6. 进阶配置与生产建议
当准备将容器化部署方案应用于生产环境时,需要考虑更多高可用和安全因素。
安全加固措施 :
- 修改所有默认密码(MySQL root、Redis、应用账号)
-
限制容器网络访问:
networks: ruoyi_net: driver: bridge internal: true - 启用TLS加密数据库连接
高可用方案 :
-
MySQL主从复制
mysql-master: image: mysql:8.0 environment: MYSQL_REPLICATION_USER: replica MYSQL_REPLICATION_PASSWORD: Replica@123 mysql-slave: image: mysql:8.0 depends_on: - mysql-master environment: MYSQL_REPLICATION_USER: replica MYSQL_REPLICATION_PASSWORD: Replica@123 MYSQL_REPLICATION_MODE: slave -
Redis哨兵模式
redis-sentinel: image: redis:7.0 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf
监控方案集成 :
-
Prometheus配置示例:
ruoyi-backend: environment: - JAVA_TOOL_OPTIONS=-javaagent:/app/prometheus/jmx_prometheus_javaagent.jar=8081:/app/prometheus/config.yaml
CI/CD集成建议 :
# 示例GitLab CI配置
stages:
- build
- deploy
build_backend:
stage: build
script:
- mvn clean package -DskipTests
- cp target/*.jar docker/compose/ruoyi/apps/
deploy:
stage: deploy
script:
- docker-compose up -d --build
更多推荐


所有评论(0)