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

目录

一. 环境准备

二. 制作一个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.2009LABEL \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/dnfCOPY ./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-perlLABEL \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# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password:# 连接超时时间timeout: 10slettuce:

修改密码和域名 

[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%2B8username: rootpassword: 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: rediscontainer_name: ruoyi-redis# MySQL 服务ruoyi-db:image: mysql:8.0container_name: ruoyi-dbcommand: >--character-set-server=utf8mb4--collation-server=utf8mb4_general_cienvironment:MYSQL_ROOT_PASSWORD: lzz2578+MYSQL_DATABASE: ry-vuevolumes:- ./RuoYi-Vue/sql:/docker-entrypoint-initdb.d:ro- ./ruoyi-db:/var/lib/mysql:rw# Java 后端服务ruoyi-java:build:context: ./java  # 使用 java 目录中的 Dockerfilecontainer_name: ruoyi-javaports:- 8080:8080  # 公开端口,供 Nginx 代理访问links:- ruoyi-redis:redis.server- ruoyi-db:mysql.serverdepends_on:- ruoyi-db- ruoyi-redis# Nginx 服务ruoyi-nginx:build:context: ./nginx  # 使用 nginx 目录中的 Dockerfilecontainer_name: ruoyi-nginxports:- 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

 

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

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

相关文章

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南:《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南,提供了从职前…

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…

单细胞|MEBOCOST·基于代谢物的细胞通讯预测(一)

import os,sys import scanpy as sc import pandas as pd import numpy as np from matplotlib import pyplot as plt import seaborn as sns from mebocost import mebocost 1. 创建 mebocost 对象 adata sc.read_h5ad(data/demo/raw_scRNA/demo_HNSC_200cell.h5ad) ## che…

开发无人带货直播插件

在当今快速发展的电商行业中,直播带货已成为推动销售增长的重要力量,然而,随着直播市场的日益饱和和消费者需求的不断变化,如何在保持直播互动性的同时,实现高效、低成本的运营成为许多商家关注的焦点。 无人带货直播…

springboot 微信消息推送 springboot sse推送

目录 一、springboot 微信消息推送 springboot sse推送 1、在 Spring 框架中实现 2、传统的 Servlet 中实现 一、springboot 微信消息推送 springboot sse推送 关于 SSE SSE 全程 Server Send Event,是 HTTP 协议中的一种,Content-Type 为 text/event…

Android 自定义圆形进度条样式

效果 代码 主要是设置属性indeterminateDrawable <ProgressBarandroid:id"id/iv_progress"android:layout_width"20dp"android:layout_height"20dp"android:layout_gravity"center"android:layout_marginStart"15dp"and…

清爽简洁!这可能是开源界功能最强大的项目开发管理系统

&#x1f482; 个人网站: IT知识小屋&#x1f91f; 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录 写在前面项目简介项目特点设计思想技术栈项目展示项目获取 写在前…

❤️‍FlyFlow:新增表格布局表单

FlyFlow 介绍 官网地址&#xff1a;www.flyflow.cc ElementPlus演示网址&#xff1a;pro.flyflow.cc AntDesign演示网址&#xff1a;ant.flyflow.cc FlyFlow 借鉴了钉钉与飞书的界面设计理念&#xff0c;致力于打造一款用户友好、快速上手的工作流程工具。相较于传统的基于 …

21. Hibernate 性能之数据库连接池

1. 前言 从本节课程开始&#xff0c;和大家一起聊聊 Hibernate 中的性能问题&#xff0c;面对开发者&#xff0c;Hibernate 表现出卓越的数据库操作能力。 使用框架最大的优势就是带来操作的快捷、便利。同时&#xff0c;因为框架的封装性&#xff0c;其性能往往比原生开发要…

【PostGresql】---- pgSql 将列中合并字符串拆分为多行 实例代码

-- 将 AQY_ID,AQY 中的字符串拆分为多行 SELECT"ID","AQY_ID","AQY",UNNEST ( string_to_array( "AQY_ID", , ) ) AS "AQY_ID_1",UNNEST ( string_to_array( "AQY", , ) ) AS "AQY_1" FROM"JF_SGC…

30.jdk源码阅读之ReentrantReadWriteLock

1.写在前面 ReentrantReadWriteLock 是 Java 并发包中的一个读写锁实现&#xff0c;它允许多个读线程同时访问共享资源&#xff0c;但在写线程访问时&#xff0c;所有的读线程和其他写线程都会被阻塞。不知道大家在日常工作中这个类使用的多不多&#xff0c;对于它的底层实现有…

Tooltip 文字提示

在偶然维护前端开发时,遇到页面列表中某个字段内容太长,且该字段使用了组件显示,导致不能使用纯文本得那个省略号代替显示得css样式效果,如下 所以只能另辟溪路了, 1、最开始想到是使用横向滚动得效果来实现,但是实现后,感觉还是不太理想,因为用户注意不到你这里有滚动…

【基础篇】Docker 容器操作 FOUR

嘿&#xff0c;小伙伴们&#xff01;我是小竹笋&#xff0c;一名热爱创作的工程师。在上一篇文章中&#xff0c;我们探讨了 Docker 镜像管理的相关知识。今天&#xff0c;让我们一起深入了解一下 Docker 容器的操作吧&#xff01; &#x1f4e6; 运行、停止和删除容器 Docker…

一个私有化的中文笔记工具个人知识库,极空间Docker部署中文版『Trilium Notes』

一个私有化的中文笔记工具&个人知识库&#xff0c;极空间Docker部署中文版『Trilium Notes』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 最近被很多小伙伴问到NAS上的笔记工具&#xff0c;虽说之前也出过Memos&#xff0c;刚开始用起来还不错&#xff0c;但是用了一段时间…

【JKI SMO】框架讲解(六)

接JKI SMO 框架讲解&#xff08;五&#xff09;&#xff0c;现在对代码进行一个扩展&#xff0c;当前代码仅有一路电压采集&#xff0c;现在需要扩展一路电流采集通道。 下面是对应的步骤&#xff1a; 1.打开项目&#xff0c;在工具里打开SMO Editor。 2.之前创建的SMO会自动加…

快速收集地图商户信息_百度|高德|腾讯|google

数字化营销中企业名录和商家电话号码的采集已成为营销人员日常工作的首要一环。地图平台以其海量的商家信息和实时更新的特性&#xff0c;成为我们获取数据的宝贵渠道。如何快速利用百度、高德、腾讯这三大地图平台高效采集商家联系方式是每个营销人员的必备技能。 我们整理了…

记录某次“有趣的“挖矿木马排查

挖矿木马是什么&#xff1f; 挖矿木马是一种恶意软件&#xff0c;它在用户不知情或未经同意的情况下&#xff0c;利用受害者的计算机资源进行加密货币挖矿。这类软件通过执行大量运算来挖掘数字货币&#xff0c;如比特币或门罗币等。挖矿木马通常通过漏洞利用、弱口令爆破或非…

微软蓝屏事件:全球网络安全与系统稳定性的警示

文章目录 每日一句正能量前言探讨软件更新流程中的风险管理和质量控制机制软件更新的风险风险管理策略质量控制措施测试流程缺陷识别实施质量控制结论 提供预防类似大规模故障的最佳方案或应急响应对策设计冗余系统实施灾难恢复计划建立高可用架构应急响应对策利用自动化工具和…

豆瓣9.9分!大名鼎鼎的深度学习入门书“鱼书”更新第二版了!带你深刻理解神经网络!

大家应该都知道这本非常有名的著作吧&#xff1a;《深度学习入门&#xff0c;基于python的理论与实现》。 这是更新的第二版&#xff0c;是由日本作者斋藤康毅所著的一本关于深度学习的书籍。这本书的出版社是人民邮电出版社&#xff0c;出品方是图灵教育。这本书的原名是“ゼロ…

vue给数组对象赋值改变对象里面的数据,数据没有更新this.$set

替换数组startTime的值&#xff1a; 原数据 this.serviceTimeList.push({serviceTimeName: 服务时间段,startTime: this.startTime,endTime: this.endTime,currentDateStart: this.currentDate,currentDateEnd: this.currentDate}) this.$set(this.array, index, newValue); …