RuoYi-Cloud部署实战(手动部署)

RuoYi-Cloud部署实战 · 语雀

1. 若依源码和架构

RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本

若依项目结构

带端口号的是需要启动的服务

com.ruoyi     
├── ruoyi-ui              // 前端框架 [80]
├── ruoyi-gateway         // 网关模块 [8080]
├── ruoyi-auth            // 认证中心 [9200]
├── ruoyi-api             // 接口模块
│       └── ruoyi-api-system                          // 系统接口
├── ruoyi-common          // 通用模块
│       └── ruoyi-common-core                         // 核心模块
│       └── ruoyi-common-datascope                    // 权限范围
│       └── ruoyi-common-datasource                   // 多数据源
│       └── ruoyi-common-log                          // 日志记录
│       └── ruoyi-common-redis                        // 缓存服务
│       └── ruoyi-common-seata                        // 分布式事务
│       └── ruoyi-common-security                     // 安全模块
│       └── ruoyi-common-swagger                      // 系统接口
├── ruoyi-modules         // 业务模块
│       └── ruoyi-system                              // 系统模块 [9201]
│       └── ruoyi-gen                                 // 代码生成 [9202]
│       └── ruoyi-job                                 // 定时任务 [9203]
│       └── ruoyi-file                                // 文件服务 [9300]
├── ruoyi-visual          // 图形化管理模块
│       └── ruoyi-visual-monitor                      // 监控中心 [9100]
├──pom.xml                // 公共依赖

架构图 - doc/ruoyi-cloud.png · wind/ruoyi-cloud - Gitee.com

在这里插入图片描述

上云的架构

在这里插入图片描述

2. 准备工作

2.1 启动nacos

Nacos学习笔记-CSDN博客

数据库中执行脚本RuoYi-Cloud/sql/ry_config_20210730.sql,会创建出ry-config数据库,供nacos使用。

修改nacos的application.properties文件中的db.url.0参数,使用刚刚创建的ry_config数据库。

此处仅单节点启动演示

startup.cmd -m standalone

登录进nacos,可以看到ruoyi-cloud在nacos中存放的配置,随便打开一个看到spring.database.datasource.master.url配置的数据库名是ry-cloud

2.2 初始化数据

创建数据库ry-cloud

执行脚本RuoYi-Cloud/sql/ry_config_20210918.sql,创建RuoYi所用的一些表

执行脚本RuoYi-Cloud/sql/quartz.sql,创建任务调度所用的一些表(在nacos中可以看到,quartz所用到的表也在ry-cloud数据库下)

执行脚本RuoYi-Cloud/sql/ry_seata_20210128.sql,是seata分布式事务用到的表,该脚本中会创建新的数据库ry_seata

2.3 Nacos中修改RuoYi的数据库信息

包括Mysql和Redis的配置:url、用户名、密码

3. 本地部署步骤

3.1 启动前端ruoyi-ui

https://gitee.com/y_project/RuoYi-Cloud/tree/master/ruoyi-ui

事先安装node.js

cd ruoyi-ui
# 安装依赖
# npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev

浏览器访问http://localhost:80

3.2 启动网关ruoyi-gateway

该网关需要Redis,在nacos中配置好响应的信息。没有热更新,先改配置,再启动服务。

3.3 启动其他微服务

nacos中的数据库信息用到的都改一下。没有热更新,先改配置,再启动服务。

4. 上云部署步骤(手动)

4.1 关注的要素

关注的点详情
中间件有状态、可能要导入数据
微服务无状态、制作镜像
网络各种访问地址
配置生产配置分离、URL

4.2 迁移数据库

把先前本地的数据库(Mysql、Redis)的数据,迁移到云上的数据库里

Mysql可以在配置文件中设置忽略大小写lower_case_table_names=1

4.3 nacos上云

nacos官网 - 集群部署说明

高可用模式上云部署,架构图

在这里插入图片描述

分析

nacos要使用有状态部署。

部署3个nacos,对于上云来说,其实就是部署三个pod。

这三个Pod对外暴露一个SLB(Service Load Balance,服务负载均衡),并且是内网模式。这将由k8s的Service来完成,Service统一暴露一个地址或者域名。

nacos官网【配置集群配置文件】时,使用的是ip:port,而k8s内pod重启后ip会变化,因此需要配置内部的域名而不是ip。

在这里插入图片描述

在这里插入图片描述

可以把配置文件/home/nacos/conf/application.properties/home/nacos/conf/cluster.conf挂载出来,但注意该路径下并不只有这两个配置文件,还有其他的。

在这里插入图片描述

注意nacos的数据库等信息配置,然后启动3个pod。

如果要使用单击模式部署,可以在环境变量中添加MODE=standalone,参考:registry.hub.docker.com/r/nacos/nacos-server

注意:nacos的存活探针

要保证Mysql启动成功了,nacos才能启动,否则nacos的pod实际是没有在提供服务的,因为连不上database。

nacos启动成功的标识:curl http://127.0.0.1/nacos能成功

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

有了这个探针,只要探测到nacos是不存活的,k8s就会重启nacos。这样即使nacos在Mysql之前启动也没关系,等Mysql启动好之后,nacos再重启时就正常了。

4.4 部署各个微服务

4.4.1 上云优化

  • 每个微服务准备 bootstrap.properties,配置nacos地址信息。默认使用本地
  • 每个微服务准备Dockerfile,启动命令,指定线上nacos配置等。
  • 每个微服务制作自己镜像。

4.4.2 Dockerfile

FROM openjdk:8-jdk
LABEL maintainer=leifengyang

# 具体信息要改成自己的
# docker run -e PARAMS="--server.port 9090"
ENV PARAMS="--server.port=8080 --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.namespace=prod --spring.cloud.nacos.config.file-extension=yml"
# 镜像使用的时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

COPY target/*.jar /app.jar
EXPOSE 8080

#
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

4.4.3 上云流程

打包

使用maven打成可执行jar(clean、pakage),上传到服务器

制作镜像

服务器使用Docker根据dockerfile把包打成指定的镜像

服务器上的路径,以ruoyi-auth为例

/root/docker/ruoyi-auth
├── target
│     └── ruoyi-auth.jar
├─ Dockerfile

执行命令

docker build -t ruoyi-auth:v1 -f Dockerfile .
docker images | grep ruoyi
推送镜像

将镜像推送给镜像仓库(以阿里云为例)

开通阿里云“容器镜像服务(个人版)”,创建一个名称空间(lfy_ruoyi)

# 以下命令在阿里云的页面上有提示
$ docker login --username=forsum**** registry.cn-hangzhou.aliyuncs.com

#把本地镜像,改名,成符合阿里云名字规范的镜像。
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/镜像名:[镜像版本号]
## docker tag 461955fe1e57 registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v1

$ docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/镜像名:[镜像版本号]
## docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v1
应用部署

k8s部署应用

后端

应用一启动会获取到 “应用名-激活的环境标识.yml”

每次部署应用的时候,需要提前修改nacos线上配置,确认好每个中间件的连接地址是否正确

把后端各微服务模块上云:ruoyi-visual-monitor、ruoyi-system、ruoyi-job、ruoyi-gateway、ruoyi-file、ruoyi-auth

前端

https://gitee.com/y_project/RuoYi-Cloud/tree/master/ruoyi-ui

ruoyi-ui是用vue写的前端项目,打包方式跟Java项目不一样。

打生产环境的包前,注意/RuoYi-Cloud/ruoyi-ui/vue.config.js中devServer中有target配置,要改成云上的gateway地址。

/RuoYi-Cloud/ruoyi-ui/package.json中有运行的脚本:

// 以下为部分内容
    "scripts": {
    "dev": "vue-cli-service serve",
    "build:prod": "vue-cli-service build",
    "build:stage": "vue-cli-service build --mode staging",
    "preview": "node build/index.js --preview",
    "lint": "eslint --ext .js,.vue src"
  },

运行打包命令,会在前端项目路径下生成dist文件夹。

# 构建测试环境
# npm run build:stage
# 构建生产环境
npm run build:prod

/RuoYi-Cloud/docker/nginx中有对应nginx的dockerfile,将上一步生成的dist文件夹替换/RuoYi-Cloud/docker/nginx/html/dist。以下是dockerfile内容

# 基础镜像
FROM nginx
# author
MAINTAINER ruoyi

# 挂载目录
VOLUME /home/ruoyi/projects/ruoyi-ui
# 创建目录
RUN mkdir -p /home/ruoyi/projects/ruoyi-ui
# 指定路径
WORKDIR /home/ruoyi/projects/ruoyi-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

修改/RuoYi-Cloud/docker/nginx/confi/nginx.conf

server_name要由localhost改为“_”,代表无论是什么地址的80端口,来到这个nginx就都给处理

代理的网关地址也要改成对应的云上的地址。

在这里插入图片描述

/RuoYi-Cloud/docker/nginx替换dist并修改完配置之后,传到服务器上,执行命令

docker build -t registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-ui:v2 -f dockerfile .
docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-ui:v2

在k8s中拉取镜像部署服务,并且将服务暴露给外网。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

各大厂都推出鸿蒙APP了,你就一定要学习一下鸿蒙APP测试了!

2023年8月,华为推出鸿蒙4.0,由于其广泛的用户基础和品牌传播力,在短短几个月的时间,使用鸿蒙4.0系统的设备就达到千万级别,并且在9月份发售Mate 6之后,还在装机量的增长更加迅猛。 基于此,11月…

德立电子授权世强先进代理分销,加速车规级磁性元器件产品拓展

为提供先进、可靠的磁性元件产品,世强先进(深圳)科技有限公司与惠州市德立电子有限公司(下称“德立电子”,英文名:DDY) 签署授权代理合作协议,旨在为汽车电子、工业、消费、通信、医…

Java GUI制作双人对打游戏(上)

文章目录 前言什么是Java GUI一、打开IDEA 新建一个Maven项目(后续可以打包、引入相关依赖也很容易)二、引入依赖三.绘制UI界面四.绘制JPanel面板总结 前言 什么是Java GUI Java UI,即Java用户界面,是指使用Java编程语言创建的图形用户界面&#xff08…

实现分布式锁

实现分布式锁的两个核心: 一、获取锁 1、获取锁线程互斥性 为了实现只有一个线程能继续执行业务代码,必须保证获取锁具有互斥性,即只有一个线程能获取到锁。 Redis中操作数据是单线程的,可以使用Redis提供的set nx ex命令获取锁。…

鸿蒙原生应用元服务-访问控制(权限)开发等级和类型

一、权限等级说明 根据接口所涉数据的敏感程度或所涉能力的安全威胁影响,ATM模块定义了不同开放范围的权限等级来保护用户隐私。 应用APL等级说明 元能力权限等级APL(Ability Privilege Level)指的是应用的权限申请优先级的定义,…

Ubuntu 22.04 安装 zabbix

Ubuntu 22.04 安装 zabbix 1,Install Zabbix repository2,安装Zabbix server,Web前端,agent3,安装mysql数据库3.1 创建初始数据库3.2 导入初始架构和数据,系统将提示您输入新创建的密码。3.3 在导入数据库架…

课题学习(二十一)----姿态更新的四元数算法推导

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    最近需要使用AEKF对姿态进行结算,所以又对四元数进了深入的学习,本篇博客仅对四元数进行推导,后续会对基于四元数的…

kafka学习笔记03

SpringBoot2.X项目搭建整合Kafka客户端依赖配置 用自己对应的jdk版本。 先加上我们的web依赖。 添加kafka依赖: SpringBoot2.x整合Kafka客户端adminApi单元测试 设置端口号。 新建一个kafka测试类: 创建一个初始化的Kafka服务。 设置kafka的名称。 测试创建kafka。…

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地,修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库,设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

数据库SQL语言实战(三)

删除操作 本篇文章重点在于SQL中的各种删除操作 题目一 删除表中的学号不全是数字的那些错误数据,学号应该是数字组成,不能够包含字母空格等非数字字符。方法之一:用substr函数,例如Substr(sid,1,1)返回学号的第一位&#xff0…

数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;) 博主首页,更多redis、java等优质好文以及各种保姆级教程等您挖掘! 目录 需求分析 常用案例举例 加盐加密逻辑如何对比原数据&…

分布式光纤测温解决方案

安科瑞电气股份有限公司 祁洁 15000363176 一、方案介绍 分布式光纤测温(DTS)集光电信号检测、计算机技术等为一体,具有实时监测、测温精度高、测量距离长、可精确定位、采用光纤作为传感器和传输介质,具有抗电磁干扰、本征防…

GVRP协议与动态、静态vlan

一、GVRP协议使用场景 1、当实际组网复杂到网络管理员无法短时间内了解网络的拓扑结构,或者是整个网络的VLAN太多时,工作量会非常大,而且非常容易配置错误。在这种情况下,用户可以通过GVRP的VLAN自动注册功能完成VLAN的配置。 2、…

【Vue3】setup语法糖的使用

文章目录 setup简介使用vite-plugin-vue-setup-extend插件 指定组件名字 setup简介 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖 相比较普通的<script> ,它有以下优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯…

【教程】如何使用ArcPy快速批量的处理数据

前面介绍了如何构建自己的ArcGIS工具箱&#xff0c;能够极大地减轻繁琐重复的工作&#xff0c;可查看&#xff1a; 【教程】如何自制一个ArcGIS工具箱&#xff08;ArcPy和模型构建器的使用&#xff09; 除了制作工具箱来实现自动处理重复性的工作&#xff0c;还可以使用ArcPy…

解决Error (169281)、Error (169282)报错问题,QuartusII设置Virtual Pin虚拟管脚的详细操作方法

解决Error(169281)、Error(169282)报错问题,QuartusII设置Virtual Pin虚拟管脚的详细操作方法 1,QuartusII报错信息2,解决办法3,重新编译,成功参考文献: 1,Quartus如何设置虚拟管脚Virtual Pin(具体设置方法) 1,QuartusII报错信息 报错原因:    为了验证FPGA工…

vr兽医设备操作模拟仿真教学平台提升教学效果

在兽医教育的传统领域中&#xff0c;动物诊疗一直是一项不可或缺的实践环节。然而&#xff0c;传统的解剖教学方式受限于动物数量、种类以及安全隐患&#xff0c;无法充分满足学生的学习需求。随着VR虚拟仿真技术的不断精进&#xff0c;VR动物诊疗仿真实训系统为兽医教育带来了…

福州复式装修,115平四室三厅现代简约风。福州中宅装饰,福州装修

设计亮点 设计理念&#xff1a; 静享时光谧境 克制的优雅&#xff0c;简约的沉淀 以光为引&#xff0c;以意为境 案例简介&#xff1a; 该方案现代风格为整个设计带来现代的舒适感&#xff0c;各种材质相互碰撞的设计&#xff0c;即保持着整齐的视感&#xff0c;又将高级气质凸…

所有人记住!电商选品千万别学会这6个步骤!我怕你流量池爆掉!

电商选品是一个非常重要的环节&#xff0c;它直接关系到店铺的流量、销售以及客户的满意度&#xff0c;做好选品才能打造爆款产品&#xff0c;提升流量和销售。因此&#xff0c;正确的电商选品步骤是至关重要的。以下是一些店雷达帮大家梳理的关键电商选品步骤以及运营建议&…

全国产化无风扇嵌入式车载电脑在救护车远端诊断的行业应用

救护车远端诊断的行业应用 背景介绍 更加快速的为急症病人在第一时间开始进行诊断和治疗,是提高病人救助成功率的关键。因此&#xff0c;先进的救护系统正在思考&#xff0c;如何在病人进入救护车之后&#xff0c;立刻能够将救护车中各种检查仪器的信息快速的传回医院&#xf…