在Ubuntu 20.04上用Docker Compose一键部署RuoYi-Vue开发环境(含MySQL 5.7和Redis 6.2)
基于Docker Compose的RuoYi-Vue全栈开发环境容器化实践
在当今快节奏的软件开发领域,如何快速搭建稳定、可复现的开发环境已成为提升团队协作效率的关键因素。传统的手动配置方式不仅耗时耗力,还容易因环境差异导致"在我机器上能运行"的经典问题。本文将介绍如何利用Docker Compose容器编排技术,在Ubuntu 20.04系统上快速部署RuoYi-Vue前后端分离框架的完整开发环境,实现真正意义上的"一键部署"。
1. 环境架构设计与准备工作
RuoYi-Vue作为基于Spring Boot和Vue.js的企业级快速开发平台,其标准环境依赖包括MySQL数据库、Redis缓存以及Node.js运行环境。传统部署方式需要分别在主机上安装配置这些组件,而容器化方案则通过隔离的环境封装解决了版本冲突和依赖管理难题。
基础环境要求:
- Ubuntu 20.04 LTS(其他Linux发行版需调整部分命令)
- Docker Engine ≥20.10.14
- Docker Compose ≥2.5.1
- 4GB以上内存(建议8GB)
- 20GB可用磁盘空间
验证Docker环境是否就绪:
# 检查Docker版本 docker --version # 检查Docker Compose版本 docker compose version若尚未安装Docker,可通过以下命令快速配置:
# 安装必要工具 sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 验证安装 sudo docker run hello-world2. Docker Compose编排文件深度解析
容器化部署的核心在于docker-compose.yml文件的编写,该文件定义了服务拓扑、网络配置和存储策略。下面是一个针对RuoYi-Vue优化的完整配置方案:
version: '3.8' services: mysql: image: mysql:5.7 container_name: ruoyi-mysql environment: MYSQL_ROOT_PASSWORD: RuoYiAdmin123 MYSQL_DATABASE: ry-vue TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql - ./init-sql:/docker-entrypoint-initdb.d ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 10s retries: 3 networks: - ruoyi-net redis: image: redis:6.2-alpine container_name: ruoyi-redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 networks: - ruoyi-net backend: build: context: ./ruoyi-admin dockerfile: Dockerfile container_name: ruoyi-backend depends_on: mysql: condition: service_healthy redis: condition: service_healthy ports: - "8080:8080" volumes: - ./ruoyi-admin:/app - ~/.m2:/root/.m2 environment: SPRING_PROFILES_ACTIVE: dev networks: - ruoyi-net frontend: build: context: ./ruoyi-ui dockerfile: Dockerfile container_name: ruoyi-frontend ports: - "80:80" volumes: - ./ruoyi-ui:/app - /app/node_modules networks: - ruoyi-net volumes: mysql_data: redis_data: networks: ruoyi-net: driver: bridge关键配置说明:
MySQL服务:
- 使用官方5.7镜像,通过volume实现数据持久化
- 自动创建
ry-vue数据库 - 将SQL初始化脚本挂载到
/docker-entrypoint-initdb.d目录实现自动执行 - 配置健康检查确保服务可用性
Redis服务:
- 选用轻量级alpine版本镜像
- 数据卷持久化缓存内容
- 自定义健康检查策略
后端服务:
- 基于自定义Dockerfile构建
- 挂载Maven仓库目录加速依赖下载
- 依赖MySQL和Redis的健康状态
前端服务:
- 单独构建Vue开发环境
- 匿名卷隔离node_modules避免主机冲突
- 开发模式热加载支持
3. 项目配置与容器化改造
3.1 后端服务容器化
在ruoyi-admin目录下创建Dockerfile:
FROM maven:3.8.6-openjdk-11 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests FROM openjdk:11-jre WORKDIR /app COPY --from=build /app/target/ruoyi-admin.jar . EXPOSE 8080 ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar"]关键配置调整:
- 修改
application.yml中的Redis连接配置:
redis: host: redis port: 6379- 更新
application-druid.yml数据库连接:
url: jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 username: root password: RuoYiAdmin123注意:容器间通信使用服务名而非IP地址,这是Docker Compose提供的DNS解析功能
3.2 前端服务容器化
在ruoyi-ui目录下创建Dockerfile:
FROM node:16 AS builder WORKDIR /app COPY package*.json ./ RUN npm install --registry=https://registry.npmmirror.com COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY ./nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80创建nginx.conf配置文件:
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/ { proxy_pass http://backend:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }4. 一键部署与开发调试
4.1 启动完整环境
# 克隆项目代码 git clone https://gitee.com/y_project/RuoYi-Vue.git cd RuoYi-Vue # 初始化SQL脚本 mkdir -p init-sql cp sql/ry_20210908.sql init-sql/1_ry.sql cp sql/quartz.sql init-sql/2_quartz.sql # 构建并启动所有服务 docker compose up -d服务启动验证:
# 查看容器状态 docker compose ps # 检查后端日志 docker compose logs -f backend # 访问前端 curl http://localhost4.2 开发模式热部署配置
对于日常开发,建议采用以下优化配置:
- 后端热加载:
# 在docker-compose.yml中修改backend服务 backend: volumes: - ./ruoyi-admin:/app - ~/.m2:/root/.m2 environment: SPRING_DEVTOOLS_RESTART_ENABLED: "true"- 前端热更新:
# 修改frontend服务 frontend: ports: - "8081:8080" command: npm run dev4.3 常见问题排查
数据库连接失败:
- 检查MySQL容器日志:
docker compose logs mysql - 验证网络连通性:
docker compose exec backend ping mysql
前端代理配置错误:
- 检查Nginx访问日志:
docker compose logs frontend - 验证API端点:
curl http://localhost/prod-api/captchaImage
内存不足问题:
# 调整Docker资源限制 sudo systemctl edit docker # 添加以下内容 [Service] MemoryLimit=4G5. 生产环境优化建议
当需要将容器化方案扩展到生产环境时,应考虑以下增强措施:
安全加固:
- 为MySQL创建专用应用用户而非使用root
- 配置Redis密码认证
- 使用HTTPS加密前端流量
性能优化:
- 为Java应用配置JVM内存参数
- 启用Redis持久化策略
- 配置MySQL查询缓存
高可用方案:
- 使用Swarm或Kubernetes替代单机Compose
- 实现数据库主从复制
- 配置Redis哨兵模式
监控方案:
# 示例:添加Prometheus监控 services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - ruoyi-net通过本文介绍的Docker Compose方案,开发者可以在几分钟内完成RuoYi-Vue全栈环境的搭建,且能保证团队所有成员的环境完全一致。这种容器化方法不仅适用于本地开发,也为后续的CI/CD流水线奠定了坚实基础。
