容器化部署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 DesktopLinux环境下需单独安装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: RuoYi123 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_onhealthcheck确保启动顺序数据持久化所有关键数据通过volume映射到宿主机时区统一所有容器强制使用Asia/Shanghai时区资源隔离每个服务运行在独立容器中3. 构建自定义镜像与配置优化标准镜像往往不能满足特定需求我们需要为前后端分别构建定制化镜像。后端DockerfileDockerfile.backendFROM 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 --interval30s --timeout3s \ CMD curl -f http://localhost:8080/ || exit 1 EXPOSE 8080 ENTRYPOINT [java, -jar, /app/ruoyi-admin.jar, --spring.config.location/config/application-dev.yml]前端DockerfileDockerfile.frontendFROM 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.sqlCREATE USER ruoyi% IDENTIFIED BY RuoYi123; GRANT ALL PRIVILEGES ON ry_vue_plus.* TO ruoyi%; FLUSH PRIVILEGES;Redis自定义配置compose/redis/redis.confbind 0.0.0.0 protected-mode no daemonize no requirepass RuoYi123 timeout 0 tcp-keepalive 3004. 部署流程与运维管理完整的部署过程可分为准备、构建、运行三个阶段每个阶段都有其最佳实践。阶段一准备构建产物克隆项目仓库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 --registryhttps://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: 2GRedis配置优化maxmemory 1gb maxmemory-policy allkeys-lru5. 故障排查与常见问题容器化环境的问题诊断有其特殊性掌握正确的排查方法能极大提高效率。典型问题与解决方案MySQL连接失败现象后端启动时报数据库连接异常排查步骤docker exec -it ruoyi-mysql mysql -uroot -pRuoYi123 SHOW GRANTS FOR ruoyi%;解决方案确保初始化脚本正确执行Redis认证失败现象后端日志中出现NOAUTH错误验证命令docker exec -it ruoyi-redis redis-cli -a RuoYi123 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-backend6. 进阶配置与生产建议当准备将容器化部署方案应用于生产环境时需要考虑更多高可用和安全因素。安全加固措施修改所有默认密码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: Replica123 mysql-slave: image: mysql:8.0 depends_on: - mysql-master environment: MYSQL_REPLICATION_USER: replica MYSQL_REPLICATION_PASSWORD: Replica123 MYSQL_REPLICATION_MODE: slaveRedis哨兵模式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.jar8081:/app/prometheus/config.yamlCI/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
保姆级教程:用Docker Compose一键部署RuoYi-Vue-Plus(含MySQL 8和Redis 7)
发布时间:2026/5/26 8:49:30
容器化部署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 DesktopLinux环境下需单独安装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: RuoYi123 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_onhealthcheck确保启动顺序数据持久化所有关键数据通过volume映射到宿主机时区统一所有容器强制使用Asia/Shanghai时区资源隔离每个服务运行在独立容器中3. 构建自定义镜像与配置优化标准镜像往往不能满足特定需求我们需要为前后端分别构建定制化镜像。后端DockerfileDockerfile.backendFROM 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 --interval30s --timeout3s \ CMD curl -f http://localhost:8080/ || exit 1 EXPOSE 8080 ENTRYPOINT [java, -jar, /app/ruoyi-admin.jar, --spring.config.location/config/application-dev.yml]前端DockerfileDockerfile.frontendFROM 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.sqlCREATE USER ruoyi% IDENTIFIED BY RuoYi123; GRANT ALL PRIVILEGES ON ry_vue_plus.* TO ruoyi%; FLUSH PRIVILEGES;Redis自定义配置compose/redis/redis.confbind 0.0.0.0 protected-mode no daemonize no requirepass RuoYi123 timeout 0 tcp-keepalive 3004. 部署流程与运维管理完整的部署过程可分为准备、构建、运行三个阶段每个阶段都有其最佳实践。阶段一准备构建产物克隆项目仓库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 --registryhttps://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: 2GRedis配置优化maxmemory 1gb maxmemory-policy allkeys-lru5. 故障排查与常见问题容器化环境的问题诊断有其特殊性掌握正确的排查方法能极大提高效率。典型问题与解决方案MySQL连接失败现象后端启动时报数据库连接异常排查步骤docker exec -it ruoyi-mysql mysql -uroot -pRuoYi123 SHOW GRANTS FOR ruoyi%;解决方案确保初始化脚本正确执行Redis认证失败现象后端日志中出现NOAUTH错误验证命令docker exec -it ruoyi-redis redis-cli -a RuoYi123 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-backend6. 进阶配置与生产建议当准备将容器化部署方案应用于生产环境时需要考虑更多高可用和安全因素。安全加固措施修改所有默认密码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: Replica123 mysql-slave: image: mysql:8.0 depends_on: - mysql-master environment: MYSQL_REPLICATION_USER: replica MYSQL_REPLICATION_PASSWORD: Replica123 MYSQL_REPLICATION_MODE: slaveRedis哨兵模式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.jar8081:/app/prometheus/config.yamlCI/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