win11本地Docker部署&腾讯云Docker部署若依前后端分离版

发布于:2025-06-13 ⋅ 阅读:(16) ⋅ 点赞:(0)

原始教程为部署若依单体版,原始教程视频地址,文档地址
本文基于原教程部署若依前后端分离版,码云地址:https://gitee.com/y_project/RuoYi-Vue
基于docker部署mysql、nginx-vue、redis、springboot四个容器,并对容器进行编排,支持一键部署。
云服务器准备:博主使用腾讯云4U-4G

1、win11本地部署

1-1、docker环境准备

win11安装docker.desktop

官网下载win版
在这里插入图片描述

win11安装WSL

官网选择最新版本下载
在这里插入图片描述
安装完后需重启系统

win11使用docker无法下载镜像解决方案
Settings–>Docker Engine修改配置如下,Apply & restart

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://docker.hpcloud.cloud",
    "https://docker.m.daocloud.io",
    "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "http://mirrors.ustc.edu.cn",
    "https://docker.chenby.cn",
    "http://mirror.azure.cn",
    "https://dockerpull.org",
    "https://dockerhub.icu",
    "https://hub.rat.dev"
  ]
}

1-2、二进制包准备

主要用于测试构建自己的前后端镜像

前端修改&打包

在前端文件夹ruoyi-ui下新增Dockerfile.yml配置

FROM nginx:1.22  # 指定基础镜像
COPY dist /usr/share/nginx/html # 将本地的 dist 目录(Vue 项目构建后的静态文件)复制到容器内的 /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf # 将自定义的 Nginx 配置文件复制到容器内
EXPOSE 80 # 暴露容器的 80 端口
CMD ["nginx", "-g", "daemon off;"] # 以前台模式启动 Nginx

新增nginx配置

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html; # 支持 Vue Router history 模式
    }
    # 代理 /prod-api/ 到后端服务(端口 8848)
    location /prod-api/ {
        proxy_pass   http://ruoyi-backend:8848/;  # 注意结尾的 `/`(重要!)如果前后端服务都运行在 Docker 中,backend 是后端容器的服务名称,非docker环境请替换为实际的后端服务地址和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 可选:重写路径(如果后端不需要 /prod-api/ 前缀)
        # rewrite ^/prod-api/(.*)$ /$1 break;
    }
}
# 构建生产环境
npm run build:prod

构建前端docker镜像

 # -f申明需要运行的Dockerfile.yml文件 -t的作用:给镜像命名和打标签,方便后续使用
docker build -f .\Dockerfile.yml -t ruoyi-ui .

单独运行前端镜像测试:

docker run -d -p 8080:80 --name my-ruoyi-ui ruoyi-ui

查看运行日志

docker logs -f my-ruoyi-ui

重新打包

# 停止容器
docker stop my-ruoyi-ui
# 删除容器
docker rm my-ruoyi-ui
# 删除镜像
docker rmi ruoyi-ui
# 重新构建镜像
docker build -f .\Dockerfile.yml -t ruoyi-ui .
# 启动镜像,申明网络为ruoyi-net
docker run -d -p 8080:80 --network ruoyi-net --name my-ruoyi-ui ruoyi-ui

后端修改&打包

docker下载jdk

docker pull openjdk:8-jdk

ruoyi-admin包下新增Dockerfile.yml配置:

FROM openjdk:8-jdk
WORKDIR /app
COPY target/ruoyi-admin.jar .
CMD [ "java", "-jar", "ruoyi-admin.jar" ]
EXPOSE 8848

构建后端端docker镜像

 # -f申明需要运行的Dockerfile.yml文件 -t的作用:给镜像命名和打标签,方便后续使用
docker build -f .\Dockerfile.yml -t ruoyi-server .

运行后端镜像

docker run -d -p 8848:8848 --name ruoyi-backend ruoyi-server

临时使用测试环境配置启动(此处开发环境连接本地redis和mysql)

docker run -d -p 8848:8848 -e SPRING_PROFILES_ACTIVE=dev --network ruoyi-net --name ruoyi-backend ruoyi-server
重新打包
```bash
# 停止容器
docker stop ruoyi-backend
# 删除容器
docker rm ruoyi-backend
# 删除镜像
docker rmi ruoyi-server
# 重新构建镜像
docker build -f .\Dockerfile.yml -t ruoyi-server .
# 启动镜像,申明网络为ruoyi-net
docker run -d -p 8848:8848 -e SPRING_PROFILES_ACTIVE=dev --network ruoyi-net --name ruoyi-backend ruoyi-server

本地开发机器运行测试

# 确保容器全部启动
PS F:\Development-files\deploy-demo\RuoYi-Vue\ruoyi-ui> docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                    NAMES
42b37c47246e   ruoyi-ui       "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp     my-ruoyi-ui
d39ff3341588   ruoyi-server   "java -jar ruoyi-adm…"   5 hours ago         Up 5 hours         0.0.0.0:8848->8848/tcp   ruoyi-backend

访问测试:
在这里插入图片描述

2、腾讯云Docker部署

2-1、docker安装

sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

下面验收基于docker手动安装mysql 5.7 redis7,用于后续编写docker-compose参考用

docker创建网络和存储卷

docker network create ruoyi-net
# mysql存储卷
docker volume create ruoyi-data
# redis存储卷
docker volume create ruoyi-redis-data

docker创建自定义网络和存储卷有什么作用?
自定义网络:容器可以通过服务名称直接通信
存储卷:数据持久化&共享配置数据

docker安装mysql 5.7

拉取&启动mysql镜像
拉取mysql5.7镜像,在启动容器时指定容器名称:--name,网络:--network,端口映射:-p 3306:3306、密码:-e MYSQL_ROOT_PASSWORD、数据库:-e MYSQL_DATABASE、附加配置-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro 、初始化sql:v /home/app/sql:/docker-entrypoint-initdb.d、数据存储卷-v ruoyi-data:/var/lib/mysql。

docker pull mysql:5.7

docker run -d \
  --name ruoyi-db \
  --network ruoyi-net \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=ry-vue \
  -v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \
  -v /home/app/sql:/docker-entrypoint-initdb.d \
  -v ruoyi-data:/var/lib/mysql \
  mysql:5.7

若需用docker重新安装mysql

## 停止mysql容器
docker stop ruoyi-db
## 删除mysql容器
docker rm ruoyi-db
## 删除卷
docker volume rm ruoyi-data
## 新增卷
docker volume create ruoyi-data
## 验证卷是否成功
docker volume inspect ruoyi-data
## 重新创建docker容器&启动
docker run -d \
  --name ruoyi-db \
  --network ruoyi-net \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=ry-vue \
  -v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \
  -v /home/app/sql:/docker-entrypoint-initdb.d \
  -v ruoyi-data:/var/lib/mysql \
  mysql:5.7

使用Navicat验证docker安装成功(使用账号:ruoyi-db,密码:123456进行登录):
在这里插入图片描述

docker安装redis7

拉取&启动redis

docker pull redis:7

docker run -d \
  --name ruoyi-redis \
  --network ruoyi-net \
  -v ruoyi-redis-data:/data \
  -p 6379:6379 \
  redis:7 \
  redis-server --appendonly yes

2-2、准备docker-compose

删除之前创建的容器和卷

docker stop ruoyi-db ruoyi-redi
docker volume rm ruoyi-data ruoyi-redis-data

参考二进制包准备以及docker安装mysql&redis,以及菜鸟教程Docker Compose、以及docker compose容器编排

# docker-compose.yml
services:
  # 若依后端服务
  ruoyi-server:
    image: openjdk:8-jre
    container_name: ruoyi-backend
    restart: always
    ports:
      - "8848:8848"
    volumes:
      - /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jar
    command: java -jar /usr/local/src/ruoyi-admin.jar
    healthcheck: # 健康检查配置
      test: [ "CMD", "curl", "-f", "http://localhost:8848" ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    networks:
      - ruoyi-net
    depends_on: # 依赖其他服务,注意定义为服务名称而不是容器名称
      ruoyi-db:
        condition: service_healthy
      ruoyi-redis:
        condition: service_healthy

  # 若依前端服务
  ruoyi-nginx:
    image: nginx:1.22
    container_name: ruoyi-nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - /home/app/dist:/usr/share/nginx/html
      - /home/app/nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      ruoyi-server:
        condition: service_healthy
    networks:
      - ruoyi-net

  # 若依mysql
  ruoyi-db:
    image: mysql:5.7
    container_name: ruoyi-db
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=ry-vue
    command: [
      "--character-set-server=utf8mb4",
      "--collation-server=utf8mb4_general_ci",
      "--skip-character-set-client-handshake"
    ]
    healthcheck:
      test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', 'root', '-p$$MYSQL_ROOT_PASSWORD' ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    ports:
      - "3306:3306"
    volumes:
      - /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
      - /home/app/sql:/docker-entrypoint-initdb.d
      - ruoyi-data:/var/lib/mysql
    networks:
      - ruoyi-net
  # 若依redis
  ruoyi-redis:
    image: redis:7
    container_name: ruoyi-redis
    networks:
      - ruoyi-net
    ports:
      - "6379:6379"
    volumes:
      - ruoyi-redis-data:/data
    command: redis-server --appendonly yes
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 5s
volumes:
  ruoyi-data:
    name: ruoyi-data
  ruoyi-redis-data:
    name: ruoyi-redis-data

networks:
  ruoyi-net:

2-3、二进制文件准备

初始化脚本

/home/app/sql中新增初始化sql,将若依的的初始化脚本移动到/home/app/sql
在这里插入图片描述
补充初始化脚本init.sql,用于创建远程访问账号,也转移至/home/app/sql

-- 创建用户 'ruoyi-db',密码 '123456',并允许从任何主机('%')访问
CREATE USER 'ruoyi-db'@'%' IDENTIFIED BY '123456';
-- 授予所有数据库的所有权限(生产环境建议缩小权限范围)
GRANT ALL PRIVILEGES ON *.* TO 'ruoyi-db'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;

初始化mysql配置

创建附加的mysql配置:

mkdir -p /home/mysql
vi mysql.cnf
## 补充如下配置
[mysqld]
bind-address=0.0.0.0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

初始化nginx配置

/home/app中新增nginx.conf

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html; # 支持 Vue Router history 模式
    }
    # 代理 /prod-api/ 到后端服务(端口 8848)
    location /prod-api/ {
        proxy_pass   http://ruoyi-backend:8848/;  # 注意结尾的 `/`(重要!)如果前后端服务都运行在 Docker 中,backend 是后端容器的服务名称,非docker环境请替换为实际的后端服务地址和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 可选:重写路径(如果后端不需要 /prod-api/ 前缀)
        # rewrite ^/prod-api/(.*)$ /$1 break;
    }
}

前后端打包文件压缩&上传&解压

/home/app文件夹中
在这里插入图片描述

移动docker-compose文件至云服务器

/home/app文件夹中
在这里插入图片描述

2-4、执行docker-compose进行部署

执行docker compose up -d部署4个容器

[root@VM-12-11-opencloudos app]# docker compose up -d
[+] Running 5/5
 ✔ Network app_ruoyi-net    Created                                                                     0.1s 
 ✔ Container ruoyi-redis    Healthy                                                                     5.8s 
 ✔ Container ruoyi-db       Healthy                                                                     5.8s 
 ✔ Container ruoyi-backend  Healthy                                                                    26.5s 
 ✔ Container ruoyi-nginx    Started 

访问云服务器测试 √
在这里插入图片描述
重新部署容器:

# 删除容器
docker compose down
# 删除mysql卷(不删除可能会导致mysql运行失败)
docker volume rm ruoyi-data
# 部署容器
docker compose up -d

docker-compose其余指令:

# 启动/停止服务
docker compose start/stop
# 停止并删除容器,不会删除存储卷volume
docker compose down

注意:需移动到docker-compose.yml所在文件夹