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

news2024/11/25 10:06:23

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中拉取镜像部署服务,并且将服务暴露给外网。

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

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

相关文章

(亲测有效)win7安装nodejs高版本(18.8.0)

现在学习vue3,vite,使用pnpm创建项目都需要高版本的nodejs了,win7最高只能安装13版本,好多已经不支持了。当然此篇只是以安装18.8.0为例,可以替换成更高的18或者20版本,只是太高的话可能出现冲突,够用就好。希望对各位…

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色,因才施用,需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好,而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才,才能高效配合…

【深度学习】Fine-Grained Face Swapping via Regional GAN Inversion高保真换脸范式

文章目录 代码介绍实践效果 帮助、问询 代码 https://github.com/e4s2022/e4s 介绍 Fine-Grained Face Swapping via Regional GAN Inversion 提出一种新的高保真换脸范式,能够保留期望的微妙几何和纹理细节。从微观面部编辑的角度重新思考换脸任务,基…

IO基础-传统I/O模型

关于IO数据流有两种形式,来源于网络和磁盘分别叫做网络IO、磁盘IO。 客户端通过TCP和UDP协议将数据流发往服务端,服务端接收数据这个过程称为网络IO。 服务端读取本地文件数据到服务中的过程称为磁盘IO。 基于 Linux 一切皆文件的理念,在内…

【Docker】Linux开放2735端口实现远程访问Docker

【Docker】Linux开放2735端口实现远程访问Docker 大家好 我是寸铁👊 总结了一篇【Docker】Linux开放2735端口实现远程访问Docker ✨ 喜欢的小伙伴可以点点关注 💝 前言 今天需要远程操作Linux服务器的docker,这时就需要开放出docker的端口给我…

TQ15EG开发板教程:在MPSOC上运行ADRV9371(vivado2018.3)

首先需要在github上下载两个文件,本例程用到的文件以及最终文件我都会放在网盘里面, 地址放在本文最后。首先在github搜索hdl选择第一个,如下图所示 GitHub网址:https://github.com/analogdevicesinc/hdl/releases 点击releases…

h2o-3机器学习平台连接mysql数据库

Getting Data into Your H2O Cluster — H2O 3.46.0.1 documentation 官方文档是这么说的! 具体实操发现: java -jar build/h2o.jar 以上命令只能正常运行平台,无法连接数据库。 想要连接mysql数据集,首先需要自己下载mysql的…

【InternLM 实战营第二期-笔记3】茴香豆:搭建你的 RAG 智能助理

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营,我也将会通过笔记博客的方式记录学习的过程与遇到的问题,并为代码添加注释,希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 茴香豆:搭建…

损失函数:Cross Entropy Loss (交叉熵损失函数)

损失函数:Cross Entropy Loss (交叉熵损失函数) 前言相关介绍Softmax函数代码实例 Cross Entropy Loss (交叉熵损失函数)Cross Entropy Loss与BCE loss区别代码实例 前言 由于本人水平有限,难免出现错漏&am…

安全开发实战(2)---域名反查IP

目录 安全开发专栏 前言 域名与ip的关系 域名反查ip的作用 1.2.1 One 1.2.2 Two 1.2.3 批量监测 ​总结 安全开发专栏 安全开发实战http://t.csdnimg.cn/25N7H 这步是比较关键的一步,一般进行cdn监测后,获取到真实ip地址后,或是域名时,然后进行域名反查IP地址,进行进…

【剪映专业版】10时间线工具:主轨磁吸、自动吸附、联动、预览轴、全局缩放预览

视频课程:B站有知公开课【剪映电脑版教程】 主轨:有封面标志的轨道才是主轨。 主轨磁吸:开启后,在主轨上移动素材,自动向前磁吸,在其他轨道上移动无此效果;关闭后,不自动向前磁吸&…

python教学入门:字典和集合

字典(Dictionary): 定义: 字典是 Python 中的一种数据结构,用于存储键值对(key-value pairs)。字典使用花括号 {} 定义,键值对之间用冒号 : 分隔,每对键值对之间用逗号…

150个 HTML5 成体系的网站模版 量大慢选 持续更新中

目录 HTML5 网站模版 No.1HTML5 网站模版 No.2HTML5 网站模版 No.3HTML5 网站模版 No.4HTML5 网站模版 No.5 HTML5 网站模版 No.1 HTML5 网站模版 No.1 HTML5 网站模版 No.2 HTML5 网站模版 No.2 HTML5 网站模版 No.3 HTML5 成体系网站模版 No.3 HTML5 网站模版…

虚拟机磁盘剩余空间不足

VMware 弹出提示: 对文件“E:\Virtual Machine\CentOS 7 1810 的克隆 (2)\CentOS 7 1810-cl1.vmdk”的操作失败。 如果该文件位于远程文件系统上,请确保网络连接以及该磁盘所在的服务器正常工作。如果该文件位于可移动介质中,请重新连接该介…

C语言-内存操作函数

C语言有一类内存函数,他们可以以字节为单位进行数据的拷贝、追加,甚至可以替代部分字符串函数。于是让我们来狠狠地学习它一百万遍吧~ 1.memcpy函数的使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 1.1mem…

单调队列(C/C++)

引言: 单调队列和单调栈都是一种数据结构,应用十分广泛,在蓝桥杯、ICPC、CCPC等著名编程赛事都是重点的算法,今天博主将自己对单调栈与单调队列的理解以及刷题的经验,用一篇博客分享给大家,希望对大家有所…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置,现在springboot新版本(小编3.2.3)在spring.data.xxx下了,如下所示,mongodb的配置在spring.data.mongodb下: 连接池相关参数配置-源码分析 拼接在…

使用CCS软件查看PID曲线

在刚开始学习PID的时候,都需要借助PID的曲线来理解比例,积分,微分这三个参数的具体作用。但是这些曲线生成一般都需要借助上位机软件或者在网页上才能实现。如果是在单片机上调试程序的话,想要看曲线,一般就是通过串口…

C语言 【基础语法】

一、编程环境搭建 编译器:gcc 集成开发环境:vscode 1.1 安装vscode 1.2 设置中文包 插件 1.3 设置C/C扩展 安装 C/C Compile Run extension 和 C/C Extension Pack 扩展 二、基础语法 2.1 第一个c语言程序 2.2 数据类型 2.2.1 变量的语法(重点) …

氯氟氰虫酰胺杀灭活性好成本低 目前全球市场规模小

氯氟氰虫酰胺杀灭活性好成本低 目前全球市场规模小 氯氟氰虫酰胺,通用名为cyhalodiamide,是一种双酰胺类杀虫剂,外观为白色固体粉末状。 氯氟氰虫酰胺属于鱼尼丁受体作用剂,为邻苯二甲酰胺结构的双酰胺类杀虫剂,作用机…