win11本地Docker部署腾讯云Docker部署若依前后端分离版
原始教程为部署若依单体版,原始教程视频地址,文档地址。
本文基于原教程部署若依前后端分离版
,码云地址: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.7docker 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:7docker 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-jrecontainer_name: ruoyi-backendrestart: alwaysports:- "8848:8848"volumes:- /home/app/ruoyi-admin.jar:/usr/local/src/ruoyi-admin.jarcommand: java -jar /usr/local/src/ruoyi-admin.jarhealthcheck: # 健康检查配置test: [ "CMD", "curl", "-f", "http://localhost:8848" ]interval: 10stimeout: 5sretries: 5start_period: 10snetworks:- ruoyi-netdepends_on: # 依赖其他服务,注意定义为服务名称而不是容器名称ruoyi-db:condition: service_healthyruoyi-redis:condition: service_healthy# 若依前端服务ruoyi-nginx:image: nginx:1.22container_name: ruoyi-nginxrestart: alwaysports:- "80:80"volumes:- /home/app/dist:/usr/share/nginx/html- /home/app/nginx.conf:/etc/nginx/conf.d/default.confdepends_on:ruoyi-server:condition: service_healthynetworks:- ruoyi-net# 若依mysqlruoyi-db:image: mysql:5.7container_name: ruoyi-dbenvironment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=ry-vuecommand: ["--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: 10stimeout: 5sretries: 5start_period: 10sports:- "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/mysqlnetworks:- ruoyi-net# 若依redisruoyi-redis:image: redis:7container_name: ruoyi-redisnetworks:- ruoyi-netports:- "6379:6379"volumes:- ruoyi-redis-data:/datacommand: redis-server --appendonly yeshealthcheck:test: [ "CMD", "redis-cli", "ping" ]interval: 10stimeout: 5sretries: 3start_period: 5s
volumes:ruoyi-data:name: ruoyi-dataruoyi-redis-data:name: ruoyi-redis-datanetworks: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所在文件夹