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

news2025/1/11 0:36:08

目录

一. 环境准备

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

三. 制作nginx镜像

四. 对项目文件做修改

五. 项目打包

1. 前端打包 

2. 后端打包 

六. 编写docker-compose.yml


一. 环境准备

 

主机名IP系统软件版本配置信息
localhost192.168.226.25Rocky_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InfluxDB的安装与使用

目录 1.influxDB的下载地址:https://dl.influxdata.com/influxdb/releases/influxdb-1.8.3_windows_amd64.zip 2.在D盘创建一个influxDB的文件夹 3. 在安装目录输入cmd,执行influxd.exe 4.启动成功 5.下载nssm安装相关服务,下载地址https://nssm.cc/…

Xinstall全渠道统计服务,轻松掌握App用户全生命周期数据

在当今数字化时代,App的推广和运营显得尤为重要。然而,面对复杂多变的推广渠道和用户行为,如何精准地评估渠道效果、提升获客能力,成为了众多App运营者面临的难题。此时,Xinstall作为一站式App全渠道统计服务商&#x…

大麦网抢票攻略:使用Python Selenium实现

随着互联网技术的发展,在线购票已成为人们获取演出、比赛等活动门票的主要方式。然而,面对热门活动,门票往往在开售瞬间被抢购一空。为了解决这一问题,本文将介绍如何利用Python和Selenium技术实现大麦网的自动抢票。 1. 环境准备…

Linux线程1

守护进程 1.守护进程的特点 后台服务进程 独立于控制终端 周期性执行某任务 不受用户登录注销影响 一般采用以d结尾的名字(服务) 2 . 进 程 组 进程的组长 组里边的第 一 进程 进 程 组 的ID 进 程 中 的 组 长 的ID 进 程 中 组 长 的 选 择 …

SQL注入——搜索型注入

搜索型注入——原理介绍 一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在; 其中又分为 POST/GET…

实验2-5-2 生成3的乘方表

//实验2-5-2 生成3的乘方表//输入一个非负整数n&#xff0c;生成一张3的乘方表&#xff0c;输出30~3n的值。可调用幂函数计算3的乘方。 #include<stdio.h> #include<math.h> int main(){int n;int num0;scanf("%d",&n);//输入在一行中给出一个非负整…

Opencv threshold函数、adaptiveThreshold函数详解和示例

1.threshold函数 double cv::threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type ) src&#xff1a;待二值化的图像&#xff0c;图像只能是 CV_8U 和 CV_32F 两种数据类型。对于图像通道数目的要求与选择的二值化方法相关。dst&#xff1a;…

全球汽车橡胶减震支架市场规划预测:未来六年CAGR为2.5%

随着汽车行业的持续发展和消费者对驾驶舒适性的需求增加&#xff0c;汽车橡胶减震支架作为提升车辆稳定性和乘坐舒适性的关键组件&#xff0c;正逐渐受到市场的广泛关注。本文旨在通过深度分析汽车橡胶减震支架行业的各个维度&#xff0c;揭示行业发展趋势和潜在机会。 【市场…

反序列化靶机serial漏洞复现 超详细教程

环境搭建 漏洞环境&#xff1a;https://www.vulnhub.com/entry/serial-1,349/ 下载后使用Vmware打开 创建新的虚拟机&#xff1a; 选择客户机版本为Ubuntu 64位&#xff1a; 一直下一步&#xff0c;知道选择使用现有磁盘&#xff1a; 选择下载的vmdk磁盘文件&#xff1a; 开机…

生信技能55 - WisecondorX分析结果过滤和质控

WisecondorX分析CNV,对每条染色的CNV loss和gain进行分组,对每个组求ratio平均值和zscore平均值,基于该数值对CNV进行质控和过滤,并对连续的CNV进行合并,获得可信的CNV。 WisecondorX基本使用方法以及npz文件转换和reference构建参考文章: 生信技能53 - wiseconrdoX自动…

利用扩散模型的反馈优化图片理解模型

利用扩散模型的反馈优化图片理解模型 自从 DDPM 以来&#xff0c;扩散模型已经成为了绝对主流的图片生成模型。最近&#xff0c;有研究者开始探索如何将扩散模型的生成能力用于提升判别模型的能力。主要有三种用法&#xff1a;生成模型反演用作判别模型、生成模型用于数据增强…

案例分享—国外优秀UI设计作品

国外 UI设计作品之所以出色&#xff0c;首先在于它们对用户体验的极致追求。设计师们深入了解用户需求&#xff0c;通过细腻的界面布局、直观的交互逻辑和丰富的视觉元素&#xff0c;打造出让用户爱不释手的作品。同时&#xff0c;他们勇于创新&#xff0c;不断尝试新的设计理念…

说说你们出来打工转了几个行业?

先说说我吧&#xff0c;大学毕业出来就从事智能交通刷卡方面&#xff0c;后来又从事多年的自动化控制&#xff0c;接着又做智能停车系统&#xff0c;接着又做医疗&#xff0c;美容仪器&#xff0c;仪器仪表&#xff0c;开关电源……做的有点杂&#xff0c;你们呢&#xff1f;一…

旧版本的Oracle OCM证书怎么升级到最新版本?

一、先来说一下OCM认证&#xff0c;全称是&#xff1a;Oracle Certified Master - Oracle认证大师&#xff0c;是Oracle数据管理员的最高级别的认证。 有了OCM证书&#xff0c;可以证明你的专业能力&#xff0c;是 Oracle 数据库管理方面具备高级和全面技能的权威认证。在竞争…

好用的抠图小技巧

在ps里的抠图方法 方法一&#xff1a;直接在菜单栏里选择主体&#xff0c;选中主体后会出现蚂蚁线&#xff0c;这个时候可能选区还不够完整&#xff0c;需要借助快速选择工具细化选取&#xff0c;选好之后按ctrlj复制选区就抠好啦 方法二&#xff1a;用快速选择工具直接选取人…

jdk环境、tomcat环境

回顾复习 安装nodejs&#xff0c;和jdk一样的软件运行环境 yum -y list installed|grep epel #是否安装epel yum -y install nodejs node -v #查看版本号 下载对应的nodejs软件npm yum -y install npm npm -v #查 npm set config ....淘宝镜像 安装vue/cli…

PatchCore:工业异常检测中的全面召回

PatchCore&#xff1a;工业异常检测中的全面召回 前言相关介绍PatchCore的工作原理&#xff1a;优点&#xff1a;缺点&#xff1a; 实验环境项目地址LinuxWindows 项目结构具体用法准备数据进行训练进行测试 常见问题ModuleNotFoundError: No module named patchcore解决方法 O…

【项目实战】—— 高并发内存池

文章目录 什么是高并发内存池&#xff1f;项目介绍一、项目背景二、项目目标三、核心组件四、关键技术五、应用场景六、项目优势 什么是高并发内存池&#xff1f; 高并发内存池是一种专门设计用于高并发环境下的内存管理机制。它的原型是Google的一个开源项目tcmalloc&#xff…

数字化转型中的安全挑战:源代码加密与文档加密的重要性

深信达SDC防泄密系统在源代码加密和文档加密领域的表现能力非常出色。根据搜索结果&#xff0c;SDC沙盒防泄密系统是专门针对敏感数据防泄密的保护系统&#xff0c;尤其适用于研发型企业的数据保护。系统通过实现对数据的代码级保护&#xff0c;不影响工作效率和正常使用&#…

实现Obsidian PC端和手机端(安卓)同步

步骤 1&#xff1a;在PC端设置Obsidian 安装Obsidian和Git&#xff1a;确保你的PC上已经安装了Obsidian和Git。你可以从Obsidian官网和Git官网下载并安装。 克隆GitHub代码库&#xff1a;在PC上打开命令行&#xff08;例如Windows的命令提示符或Mac/Linux的终端&#xff09;&a…