RuoYi-Vue 项目 Docker 全流程部署实战教程

本文以实际项目为例,详细介绍如何用 Docker 一键部署包含前端、后端、MySQL、Redis 的 Spring Boot + Vue + Nginx 全栈项目,零环境依赖,随时迁移服务器。


0. 代码仓库与准备

推荐仓库地址

RuoYi-Vue 官方码云/Gitee仓库
https://gitee.com/y_project/RuoYi-Vue
建议直接 git clone https://gitee.com/y_project/RuoYi-Vue.git

若需第三方Docker集成项目(如你用的)可以参考:
https://gitee.com/saucesome/ruoyi-vue-docker
也可以自己新建RuoYi-Deploy等部署总目录,再分离前端、后端、数据库等子目录。

Nginx镜像构建注意

你应该不要直接用 nginx:latest 镜像挂前端静态资源,而是用自定义Dockerfile+nginx.conf来做 Vue 打包后的静态资源映射。

目录结构如下:

docker/
  nginx/
    Dockerfile
    nginx.conf
    html/    # 存放前端dist

Dockerfile 示例:

FROM nginx:latest
WORKDIR /home/ruoyi/projects/ruoyi-ui
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

nginx.conf 示例(根据实际API反向代理、静态资源路径调整):

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /home/ruoyi/projects/ruoyi-ui;
        try_files $uri $uri/ /index.html;
        index  index.html;
    }

    # 后端API反向代理
    location /dev-api/ {
        proxy_pass   http://ruoyi-backend:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

一、准备工作

1. 环境要求

  • 新机器只需安装好 Docker Desktop(Windows/Mac),或 docker-ce(Linux)。

  • 不需要单独安装 MySQL、Redis、Node、JDK 等环境。

2. 项目结构

提前准备好以下文件和文件夹,整理到一个目录(如 Docker/)下:

RuoYi-Deploy/
├─ docker/
│  ├─ mysql/
│  │  ├─ ry-vue.sql         # 你Navicat导出的sql
│  │  └─ ...(其它官方sql)
│  ├─ nginx/
│  │  ├─ Dockerfile
│  │  ├─ nginx.conf
│  │  └─ html/dist/         # 前端打包产物
│  ├─ redis/
│  └─ ruoyi/
│     ├─ ruoyi-admin.jar    # 后端jar
│     └─ application-docker.yml
├─ ruoyi-vue-docker/        # 代码目录
│  ├─ ruoyi-ui/
│  ├─ ruoyi-admin/
│  └─ ...
└─ docker-compose.yml

RuoYi-Vue 项目 Docker 全流程部署实战教程_第1张图片

3. 前端/后端代码打包

  • 前端(Vue):

  • 打包后会在 dist 目录下生成前端静态文件,把整个 dist 文件夹拷贝到 docker/nginx/html/ 下。

cd ruoyi-ui
npm install
npm run build
  • 后端(Spring Boot):

  • 生成的 ruoyi-admin.jar 通常在 target/ 目录,把它复制到 docker/ruoyi/ 目录下:

cd ruoyi-vue-docker/ruoyi-admin
# 推荐用以下命令,确保profile生效
mvn clean package -Dmaven.test.skip=true
cp target/ruoyi-admin.jar ../../docker/ruoyi/

4. 数据库SQL准备与导入

4.1 SQL准备

  • 你可以用官方 ry_20250522.sql + quartz.sql

  • 我是用自己通过Navicat导出的 ry-vue.sql(包含我所有表结构和数据)

推荐直接用 Navicat 导出的大sql(比如 ry-vue.sql),这样数据最全最稳!

4.2 导入方式

  1. 第一种(推荐):用Docker自带机制初始化

    • 把 sql 文件放到 docker/mysql/

    • docker-compose.yml 增加挂载:

- ./docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql

只有第一次新建数据库才会自动导入!

第二种(手动导入,适合数据重建/调试)

进入MySQL容器,手动导入:

docker exec -it mysql bash
mysql -u root -p ry-vue < /docker/mysql/ry-vue.sql

确保数据库为空或无表时再操作,避免主键冲突/脏数据。

5. 关键配置文件

5.1 docker-compose.yml

最终实测无坑的 docker-compose.yml 结构如下:

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: ry-vue
    ports:
      - 3306:3306
    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql

  redis:
    image: redis:7.0
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - ./redis_data:/data

  ruoyi-backend:
    image: openjdk:17-jdk
    container_name: ruoyi-backend
    working_dir: /app
    command: ["sh", "-c", "sleep 20 && java -jar ruoyi-admin.jar"]
    volumes:
      - ./docker/ruoyi/ruoyi-admin.jar:/app/ruoyi-admin.jar
      - ./docker/ruoyi/application-docker.yml:/app/application-docker.yml
    ports:
      - 8080:8080
    depends_on:
      - mysql
      - redis
    environment:
      SPRING_PROFILES_ACTIVE: docker

  ruoyi-frontend:
    build: ./docker/nginx
    container_name: ruoyi-frontend
    ports:
      - 80:80
    depends_on:
      - ruoyi-backend

5.2 application-docker.yml

要写全套数据库和Redis配置,和本地开发的配置方式不同,例如:

server:
  port: 8080

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    druid:
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      maxEvictableIdleTimeMillis: 900000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      filters: stat,wall,slf4j
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      useGlobalDataSourceStat: true
  redis:
    host: redis
    port: 6379
    database: 0
    timeout: 10s

重点是 allowPublicKeyRetrieval=true 适配MySQL 8+!

6. 一键启动全流程

每次重部署或重置,推荐流程:

# 1. 删除旧容器和数据库持久化目录(mysql_data/redis_data)
docker compose down -v
rm -rf ./mysql_data ./redis_data

# 2. 重建并启动
docker compose up --build -d

# 3. 查看后端日志确认无错
docker logs -f ruoyi-backend

7. 常见问题与排查

  • 404接口异常/端口正常:通常是 application-docker.yml 不全,或后端jar未挂载成功

  • MySQL表不存在:sql未正确导入或挂载,需重建数据卷、重启

  • 数据库连不上:请检查 url 配置,host 必须是mysql容器名

  • nginx访问404:nginx.conf配置、前端静态文件目录映射错误


8. 验证标准

  • 前端页面 http://localhost:80 可正常打开

  • 后端 http://localhost:8080/swagger-ui.html 可访问swagger接口

  • 容器健康运行,docker ps无Exited

  • MySQL内表完整(show tables;有32张表)


9. 踩坑Tips & 总结

  • 打包、导入顺序别错乱

  • application-docker.yml和docker-compose.yml配置务必配套

  • MySQL用 Navicat/命令行都可备份恢复,数据最好用.sql自定义导出

  • nginx代理、前端打包目录别乱,访问不到dist就全是白屏

  • 改yml后记得重新打包jar!

你可能感兴趣的:(前后端分离实战,vue.js,docker,前端,java,ruoyi,maven)