原始教程为部署若依单体版,原始教程视频地址,文档地址。
本文基于原教程部署若依前后端分离版
,码云地址: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所在文件夹