Docker Compose方式部署Ruoyi-前后端分离版本

发布于:2024-08-02 ⋅ 阅读:(49) ⋅ 点赞:(0)

目录

一. 环境准备

二. 制作一个jdk8u202环境的镜像

三. 制作nginx镜像

四. 对项目文件做修改

五. 项目打包

1. 前端打包 

2. 后端打包 

六. 编写docker-compose.yml


一. 环境准备

 

主机名 IP 系统 软件版本 配置信息
localhost 192.168.226.25 Rocky_linux9.4

git version 2.43.5

Docker version 27.0.3

4核8G,磁盘30G

准备一台虚拟机,进行时间同步,关闭防火墙和selinux,下载docker和git可参考我的历史博文,这里不在赘述。

项目官方仓库:RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本

项目官方文档:环境部署 | RuoYi

拉取代码仓库

[root@localhost ~]# git clone https://gitee.com/y_project/RuoYi-Vue.git

二. 制作一个jdk8u202环境的镜像

 

Java Archive Downloads - Java SE 8 | Oracle 台灣

上传至虚拟机

[root@localhost ~]# mkdir java
[root@localhost ~]# ll ./java
total 174240
-rw-r--r-- 1 root root 178418154 Jul 30 15:49 jdk-8u202-linux-x64.rpm

拉取rockylinux9.3作为基础镜像

[root@localhost ~]# docker pull centos:centos7.9.2009

编写Dockerfile文件,制作java环境的系统镜像

[root@localhost ~]# vim /root/java/Dockerfile
FROM centos:centos7.9.2009

LABEL \
  version="1.0" \
  description="jdk环境" \
  maintainer="zzdict@gmail.com"

WORKDIR /root/

COPY jdk-8u202-linux-x64.rpm /root/

COPY ruoyi-admin.jar /root/

# 安装 JDK
RUN yum install -y \
    jdk-8u202-linux-x64.rpm && \
    yum clean all && \
    rm -rf /var/cache/dnf

COPY ./start.sh /

CMD [ "sh", "/start.sh" ]
[root@localhost ~]# vim /root/java/start.sh
#!/bin/bash
sleep 10 # 等待数据库初始化
ulimit -n 102400 # 解决了内存溢出
java -jar ./ruoyi-admin.jar # 启动java项目,端口是8080

三. 制作nginx镜像

自己配置一个nginx配置文件

[root@localhost ~]# mkdir ./nginx
[root@localhost ~]# vim ./nginx/default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/dist;
        try_files $uri $uri/ /index.html;
        index  index.html index.htm;
    }

    location /prod-api/{
      proxy_pass http://java.host:8080/; #注意这里的写法
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }

}

拉取nginx镜像

[root@localhost ~]# docker pull nginx:1.27.0-perl

 重新覆盖编写Dockerfile

[root@localhost ~]# vim ./nginx/Dockerfile
FROM nginx:1.27.0-perl

LABEL \
  version="1.0" \
  description="nginx环境" \
  maintainer="zzdict@gmail.com"

# 将 dist 目录复制到 /usr/share/nginx/ 目录
COPY ./dist /usr/share/nginx/dist

# 将 default.conf 文件复制到 nginx 的配置目录
COPY ./default.conf /etc/nginx/conf.d/default.conf

# 保持 Nginx 前台运行
CMD ["nginx", "-g", "daemon off;"]

四. 对项目文件做修改

 

修改地址为域名 

[root@localhost ~]# cd /root/RuoYi-Vue
[root@localhost RuoYi-Vue]#  vim ruoyi-admin/src/main/resources/application.yml
# 修改redis配置信息
  redis:
    # 地址
    host: ruoyi-redis
    # 端口,默认为6379
    port: 6379
    # 数据库索引
    database: 0
    # 密码
    password:
    # 连接超时时间
    timeout: 10s
    lettuce:

修改密码和域名 

[root@localhost RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application-druid.yml
            # 主库数据源
            master:
                url: jdbc:mysql://ruoyi-db:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: lzz2578+
            # 从库数据源

# 解决了项目菜单乱码的问题
[root@localhost RuoYi-Vue]# vim sql/ry_20240629.sql
SET NAMES "utf8";

五. 项目打包

1. 前端打包 

[root@localhost ~]# cd /root/RuoYi-Vue/ruoyi-ui
[root@localhost ruoyi-ui]# docker run --rm -v $(pwd):/opt -w /opt node:14 bash -c "npm install --registry=https://registry.npmmirror.com && npm run build:prod"

打包完成后,在当前目录下生成了两个目录,一个文件,同时在挂载的/opt目录生成了package-lock.json文件

[root@localhost ruoyi-ui]# ll
total 720
-rw-r--r--   1 root root    537 Jul 30 15:00 README.md
-rw-r--r--   1 root root    474 Jul 30 15:00 babel.config.js
drwxr-xr-x   2 root root     61 Jul 30 15:00 bin
drwxr-xr-x   2 root root     22 Jul 30 15:00 build
drwxr-xr-x   4 root root    108 Jul 30 20:17 dist
drwxr-xr-x 962 root root  28672 Jul 30 20:16 node_modules
-rw-r--r--   1 root root 666989 Jul 30 20:16 package-lock.json
-rw-r--r--   1 root root   2222 Jul 30 15:00 package.json
drwxr-xr-x   3 root root     73 Jul 30 15:00 public
drwxr-xr-x  12 root root   4096 Jul 30 15:00 src
-rw-r--r--   1 root root   4934 Jul 30 15:00 vue.config.js

[root@localhost ruoyi-ui]# ll /opt
total 4
-rw-r--r-- 1 root root 27 Jul 30 20:11 package-lock.json
  • dist 目录包含了构建后生成的静态文件。
  • node_modules 目录包含了安装的 npm 包。
  • package-lock.json 用于管理项目的依赖项和版本信息。

将前端打包好的目录拷贝到/root/nginx的配置目录中

[root@localhost ~]# cp -r /root/RuoYi-Vue/ruoyi-ui/dist /root/nginx/

2. 后端打包 

[root@localhost ruoyi-ui]# cd /root/RuoYi-Vue/
[root@localhost RuoYi-Vue]# docker run --rm -v $(pwd):/opt -v ~/.m2:/root/.m2 -w /opt maven:3.8.6-jdk-8 mvn clean package

#将代码映射到容器的/opt目录里,并指定/opt为工作目录,.m2是将打包所用到的缓存 Maven 下载的依赖项和插件映射出来。

ruoyi-admin.jar就是打好的jar包 

[root@localhost RuoYi-Vue]# ll ./ruoyi-admin/target/
total 81636
drwxr-xr-x 6 root root      149 Jul 30 20:43 classes
drwxr-xr-x 3 root root       25 Jul 30 20:43 generated-sources
drwxr-xr-x 2 root root       28 Jul 30 20:43 maven-archiver
drwxr-xr-x 3 root root       35 Jul 30 20:43 maven-status
-rw-r--r-- 1 root root 83531444 Jul 30 20:44 ruoyi-admin.jar
-rw-r--r-- 1 root root    61170 Jul 30 20:43 ruoyi-admin.jar.original
# 将java包拷贝到java的配置目录里
[root@localhost ~]# cp /root/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /root/java/

六. 编写docker-compose.yml

[root@localhost ~]# vim ./docker-compose.yml
version: '3.8'  # 根据实际需要选择合适的版本

services:
  # Redis 服务
  ruoyi-redis:
    image: redis
    container_name: ruoyi-redis

  # MySQL 服务
  ruoyi-db:
    image: mysql:8.0
    container_name: ruoyi-db
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    environment:
      MYSQL_ROOT_PASSWORD: lzz2578+
      MYSQL_DATABASE: ry-vue
    volumes:
      - ./RuoYi-Vue/sql:/docker-entrypoint-initdb.d:ro
      - ./ruoyi-db:/var/lib/mysql:rw

  # Java 后端服务
  ruoyi-java:
    build:
      context: ./java  # 使用 java 目录中的 Dockerfile
    container_name: ruoyi-java
    ports:
      - 8080:8080  # 公开端口,供 Nginx 代理访问
    links:
      - ruoyi-redis:redis.server
      - ruoyi-db:mysql.server
    depends_on:
      - ruoyi-db
      - ruoyi-redis

  # Nginx 服务
  ruoyi-nginx:
    build:
      context: ./nginx  # 使用 nginx 目录中的 Dockerfile
    container_name: ruoyi-nginx
    ports:
      - 80:80  # 将宿主机的 80 端口映射到容器的 80 端口
    links:
      - ruoyi-java:java.host  # 配置 Nginx 代理到 Java 服务
    depends_on:
      - ruoyi-java

运行

[root@localhost ~]# docker compose up --build

浏览器访问当前主机ip地址:http://192.168.226.25/

打开页面默认用户名密码已经自动填充了,如果没有自动填充账户密码的话

官方提供默认用户:admin   默认密码: admin123

 

以下为在本机环境中,容器实际使用资源情况

[root@localhost ~]# docker stats

CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
a2a268cec6af   ruoyi-nginx   0.00%     5.793MiB / 7.474GiB   0.08%     296kB / 8.29MB    16.4kB / 12.3kB   6
eed6619c156c   ruoyi-java    0.15%     746.8MiB / 7.474GiB   9.76%     80.7kB / 92kB     0B / 8.22MB       144
d86aeb131284   ruoyi-redis   0.14%     7.898MiB / 7.474GiB   0.10%     25.6kB / 13.8kB   0B / 22.5kB       5
448851bf8125   ruoyi-db      0.29%     391MiB / 7.474GiB     5.11%     29.8kB / 52.1kB   1.15MB / 32.5MB   42