Docker Compose 部署若依前后端分离版
- Linux
- 2024-09-30
- 51热度
- 0评论
本次操作系统:Ubuntu20.04 ,4核/4G,确保能连接互联网。
一、安装 dokcer、docker-compose-plugin(此处省略)
docker version
docker compose version
二、打若依后端的镜像
1、修改配置文件



2、编写 Dockerfile 文件
# 使用官方的 OpenJDK 8 镜像作为基础镜像
FROM openjdk:8-jdk-alpine
# 创建存放上传文件的目录
RUN mkdir -p /opt/jzsoft/upload-file-path
# 创建存放日志的目录
RUN mkdir -p /opt/jzsoft/logs
# 安装字体文件
RUN mkdir -p /etc/apk/
RUN touch /etc/apk/repositories
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories
RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
# 设置工作目录
WORKDIR /opt/jzsoft
# 将构建好的 JAR 文件复制到容器中
COPY ./jzsoft-web/target/jzsoft-web.jar jzsoft-web.jar
# 暴露应用程序端口
EXPOSE 8089
# 启动应用程序
CMD ["nohup","java","-jar","/opt/jzsoft/jzsoft-web.jar", ">", "/opt/jzsoft/logs/nohup.log", "&"]
3、IDEA 连接虚拟机中的 Docker 并打镜像
首先,检查 IDEA 是否安装了 Docker 插件:

版本比较新的 IDEA 默认都安装了这个插件,如果没有安装,安装一下。
确保我们虚拟机上安装了 Docker 和 Docker-compose,并启动了 Docker。
找到 IDEA 下方的 Services tab 栏,按照如下操作新建一个 Docker 连接:


移除路径映射后点击 OK,右键我们创建的 Docker 连接,点击 “connection”,就连接成功了:

找到我们的 Dockerfile,右键这个文件,点击"Modify Run Configuration":

这里我们修改 Image tag,也就是镜像名称:

在打镜像前将我们的项目打包:


在 Dockerfile 文件的头部左侧的箭头位置点击 “Build image for dockerfile”,就会自动按照 Dockerfile 为我们打镜像:

打镜像完成后,就可以看到我们打的镜像了:

三、打若依前端的镜像
1、编写 nginx.conf 文件
在项目的根目录下创建 nginx.conf 配置文件,这个配置文件会拷贝到 ruoyi 前端镜像中,作为 Nginx 的配置文件:
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name 127.0.0.1;
charset utf-8;
location / {
root /opt/jzsoft/vue;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://ruoyi-backend-service:8089/;
# proxy_pass http://192.169.5.226:8089/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2、编写 Dockerfile 文件
# 使用 Nginx 作为基础镜像
FROM nginx:1.12.2
# 将 nginx.conf 拷贝到容器中
COPY nginx.conf /etc/nginx/nginx.conf
# 创建存放前端编译后代码的目录
RUN mkdir -p /opt/jzsoft/vue
# 将构建好的应用拷贝到 Nginx 的默认 web 目录
COPY dist /opt/jzsoft/vue
# Expose 端口
EXPOSE 8081
# 启动 Nginx 服务器
CMD ["nginx", "-g", "daemon off;"]
3、IDEA 连接虚拟机中的 Docker 并打镜像(同后端打包一样)

四、准备 docker compose 启动的所有容器需要的文件以及文件夹
1、准备 Redis 配置文件
找到本次部署的 Redis 7.2.0 的 redis.conf 文件,编辑其中的以下内容:
# 修改连接 redis 的密码为 123456
requirepass 123456
# 注释掉 bind 127.0.0.1,bind 用于限制访问 Redis 的机器 ip,直接关掉
# bind 127.0.0.1
2、准备初始化 SQL 文件
容器首次启动的时候,我们需要执行这些初始化文件来建表、导入数据。
quartz.sql 和 ry_20231130.sql 在 ruoyi 后端代码根目录的 sql 文件夹中就有,直接拷贝即可,但是,需要在这两个 SQL 文件的第一行添加一行使用指定数据库的 SQL 语句:
use ry-vue;
初始化的 SQL 文件在 Ruoyi 后端项目的如下位置:

create-database-user.sql 负责创建用户、数据库和为用户赋权:
-- 创建数据库
CREATE DATABASE `ry-vue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 应先创建新用户
create user 'ruoyi'@'%' identified by '123456';
-- 执行授权
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'%';
-- 刷新
flush privileges;
-- 授权远程
ALTER USER 'ruoyi'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 刷新
flush privileges;
arrange-sql.sql 负责调用其他 SQL 文件,起到对 SQL 文件进行编排的作用:
source /opt/mysql-service/create-database-user.sql;
SET NAMES utf8;
source /opt/mysql-service/quartz.sql;
source /opt/mysql-service/ry_20231130.sql;
3、在宿主机中创建文件夹以及上传需要文件
/opt/project 目录的目录结构如下:
project/
└── ruoyi
├── docker-compose.yml -- 下面我们要编写的 docker-compose 文件
├── mysql-service -- 存放 mysql-service 相关文件的目录
│ ├── other
│ │ ├── children-sql -- 子 sql 文件存放目录
│ │ │ ├── create-database-user.sql
│ │ │ ├── quartz.sql
│ │ │ └── ry_20231130.sql
│ │ └── init -- mysql 初始化执行目录,会挂载到 docker-entrypoint-initdb.d
│ │ └── arrange-sql.sql -- sql 编排文件,会依次调用 children-sql 文件夹中的 sql 文件
│ └── volumes -- mysql-service 挂载的容器卷
│ └── mysql
└── redis-service
└── volumes -- redis-service 挂载的容器卷
└── redis.conf
五、编写 docker-compose.yml 文件
version: '3.8'
services:
mysql-service:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- /opt/jzsoft/mysql-service/volumes/mysql:/var/lib/mysql
- /opt/jzsoft/mysql-service/other/init:/docker-entrypoint-initdb.d/
- /opt/jzsoft/mysql-service/other/children-sql:/opt/mysql-service/
redis-service:
image: redis:7.2.0-alpine3.18
restart: always
ports:
- "6379:6379"
volumes:
- /opt/jzsoft/redis-service/volumes/redis.conf:/usr/local/etc/redis/redis.conf
command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
jzsoft-web-service:
image: jzsoft-web:1.0
networks:
- jzsoft-network
ports:
- "8089:8089"
depends_on:
- mysql-service
- redis-service
jzsoft-vue-service:
image: jzsoft-vue:1.0
networks:
- jzsoft-network
ports:
- "8081:8081"
depends_on:
- jzsoft-web-service
networks:
jzsoft-network:
driver: bridge
使用如下命令启动 docker-compose 文件中的容器:
docker compose up -d
六、常见问题:
http://doc.ruoyi.vip/ruoyi/other/faq.html#linux系统验证码乱码解决方法

鲁ICP备19063141号
鲁公网安备 37010302000824号