当前位置: 首页 > news >正文

保姆级教程:用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 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
http://www.rkmt.cn/news/1388949.html

相关文章:

  • 告别龟速!Windows10下WSL2安装Ubuntu 22.04保姆级教程,附换源与迁移D盘指南
  • 2026 石家庄黄金回收热门门店梳理:品牌对比与安心出手指南 - 奢侈品回收测评
  • AirPodsDesktop:在Windows上解锁苹果耳机完整功能的终极指南
  • 保姆级教程:在RK3588的Ubuntu 20.04上,用Anaconda3搞定RKNN-Toolkit-Lite2环境(含Python 3.9配置)
  • 终极指南:如何一键修复Kindle电子书封面损坏问题
  • 别再为连接报错头疼了!Windows下KingbaseES V8R6安装后,5分钟搞定JDBC和Hibernate连接配置
  • NVIDIA Profile Inspector完整教程:解锁显卡隐藏设置,提升游戏性能的终极指南
  • 如何高效使用Angry IP Scanner:全面网络扫描工具配置指南
  • 量子机器学习中的特权信息学习:利用量子特征提升经典模型性能
  • 告别虚拟机!在Ubuntu 20.04上用Wine 5.0原生运行微信和QQ的保姆级教程
  • ARM处理器分支记录缓冲区(BRB)原理与应用
  • 二维改性MXenes催化活化小分子的多尺度模拟方法【附仿真】
  • 十速自动变速箱先导电磁阀建模与测控策略实现【附程序】
  • 人机耦合动力学建模融合的康复助行机器人控制方法【附模型】
  • macOS用户福音:用Homebrew五分钟搞定MIT xv6内核环境(M1/M2/M3芯片实测)
  • 魔兽争霸3在Windows 11上频繁崩溃?5分钟终极兼容性修复指南
  • 2026年推荐高性价比的肖特基整流器FFP15S60STU生产企业 - 品牌推广大师
  • 零门槛跨平台模组下载:WorkshopDL让Steam创意工坊触手可及
  • 终极指南:3步让你的PS4/PS5手柄在Windows上完美运行
  • Steam成就管理器完全指南:3分钟掌控所有游戏成就的终极方案
  • UE4/UE5 TCP插件避坑指南:从Socket插件安装到与Python服务端稳定通信的全流程记录
  • QMCDecode:macOS平台QQ音乐加密音频格式本地化解码技术解析
  • 用LoadRunner的Virtual User Generator模拟真实用户压力?从WebTours案例看脚本设计与场景构建的5个关键细节
  • 3步掌握Seraphine:英雄联盟智能助手的完整使用指南
  • 2026年上新:专业的肖特基整流器BAT54S.7-F工厂 - 品牌推广大师
  • 2026年4月头部加气块隔墙公司推荐,轻质砖隔墙/加气块隔墙,加气块隔墙企业哪家好 - 品牌推荐师
  • Claude 3 API工程化实践:从调用接口到构建可信代理
  • DM-VIO代码实战:手把手教你用GTSAM复现这篇顶会VIO算法(附避坑指南)
  • WarcraftHelper终极指南:魔兽争霸3性能优化全攻略
  • WarcraftHelper:5个核心功能让魔兽争霸3在现代系统上重获新生