1、什么是微服务?
传统项目特点:传统项目就是把所有的业务功能写在一个项目中,最终打包成一个war包,然后进行部署运行。如下图:

传统项目是一个进程包含了所有的业务功能,功能越多,项目就复杂。随着代码的增多,构建和部署的时间也会增加,每次功能的变更或Bug的修复,甚至添加一个简单的功能,都需要重新打包整个项目代码。某个功能出现问题可能影响整个应用。
微服务项目特点:微服务是一种将一个完整的项目拆分成一个个独立的小应用(微服务)每个应用运行在自己进程中。如下图:

一个微服务只关注一个特定的业务功能,所以它业务清晰、代码量较少,易于维护,启动更快。 传统项目只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。
主流微服务架构图:https://www.processon.com/view/5ec290195653bb6f2a18504e

1.通过接入层接收用户请求前端UI界面;
2.前端UI通过API调用Gateway网关,Gateway网关通过Nacos获取到各个微服务的地址、端口、URL等注册信息,将用户请求路由到正确的微服务。
4.存储层提供微服务的数据存储。
5.微服务治理层是微服务架构中用于协调、管理和监控各个微服务的层。
2、微服务项目介绍
RuoYi-Cloud 是通过 Java EE (Java企业版) 开发的微服务架构权限管理系统。基于经典技术组合(Spring Boot、Spring Cloud & Alibaba),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。
简单来说:基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统。
文档地址:http://doc.ruoyi.vip/ruoyi-cloud/
代码下载:https://gitee.com/y_project/RuoYi-Cloud
Spring是什么?是一个开源的Java开发框架,用于简化Java程序的开发。
Spring Boot是什么?是基于Spring的全新框架,对比于Spring框架更加的简洁高效,目的是以最快的速度来启动和运行Java项目。
Spring Cloud是什么?是一套微服务开发框架。
Spring Cloud Alibaba是什么?是阿里巴巴推出的微服务一站式开发框架。
3、微服务组件介绍
Gateway网关组件:在微服务架构中,网关起到了路由的作用,例如,用户需要请求一个特定的微服务,而这个请求会先通过网关,然后网关会将其路由到正确的微服务。
Auth认证组件:负责处理身份认证和权限授权,在微服务架构中,起到以下作用:
身份认证(Authentication):在用户使用系统之前,系统需要验证用户的身份,以确保他们是谁。身份认证通常通过用户名和密码、令牌(Token)、多因素认证等方式进行。认证成功后,用户可以进一步使用系统。
权限授权(Authorization):在用户的身份被认证后,系统还需要确定用户可以访问哪些资源,执行哪些操作。这就是授权的过程。授权是基于用户的角色、权限列表等进行的。
在微服务架构中,通常会有一个专门的Auth服务,负责处理所有微服务的认证和授权。这样,每个微服务不需要自己处理认证和授权,只需要向Auth服务询问用户是否已经认证,以及他们是否有权限访问特定的资源或执行特定的操作。
Nacos服务注册组件:由阿里巴巴开发并开源的服务发现和服务配置平台,在微服务架构中,起到以下作用:
服务发现和服务注册:在微服务架构中,由于有大量的微服务,并且它们都需要互相通信,因此服务发现和服务注册成为必不可少的部分。Nacos提供了一个服务注册中心,可以让微服务在启动时注册自己的信息,例如服务的名称、IP地址、端口号等。同时,Nacos也提供了服务发现的功能,允许微服务找到并调用其他的微服务。
动态服务配置:在微服务架构中,微服务的配置信息(如数据库连接参数、外部API接口地址等)可能需要根据环境或业务需求进行变动。Nacos允许将这些配置信息集中存储和管理,并在配置信息发生变动时,动态地推送给相应的微服务,无需重启服务即可更新配置。
Nacos在微服务架构中起到了至关重要的作用,它让服务之间的通信和配置管理变得更加简单、灵活和高效。
Sentinel熔断和降级组件:由阿里巴巴开源的一款轻量级的流量控制、熔断和降级组件,在微服务架构中,起到以下作用:
流量控制:在微服务环境中,由于服务之间存在大量的通信,因此需要对这些通信的流量进行控制,以防止因为流量过大而导致服务崩溃。Sentinel可以通过定义一些流量控制规则(例如,限制单位时间内的请求次数)来实现流量控制。
熔断机制:当某个服务出现问题(例如,响应时间过长或者失败率过高)时,为了防止问题扩大,可以通过熔断机制将这个服务“断开”,即停止向这个服务发送请求。这可以避免问题服务影响到其他服务或整个系统。
降级处理:降级处理是指当某个服务出现问题或者系统负载过高时,暂时停止提供部分功能,只提供核心功能,以此来保护系统的稳定。Sentinel可以通过定义一些降级规则来实现降级处理。
Sentinel在微服务架构中起到了保护系统稳定性和可用性的重要作用,它可以帮助微服务系统在面临流量过大、服务出问题等情况时,做出相应的处理,防止整个系统的瘫痪。
Ribbon服务调用组件:是开源的一个云中间件,在微服务架构中,一个微服务可能会有多个实例在运行。Ribbon可以将客户端的请求分发到不同的微服务实例上,实现负载均衡。
Sidecar是一种架构的设计模式,是指为主应用程序提供了额外的附加功能,如监控、配置、网络通信、代理等。
异构服务:在微服务架构中,"异构服务"指的是使用不同的技术栈(如编程语言、数据库、框架等)创建的服务。因为它可以让每个微服务根据自己的业务需求和技术需求选择最适合的技术栈。
例如,一些服务可能更适合使用Java和Spring Boot来开发,而其他服务可能更适合使用Python和Django。同样,一些服务可能更适合使用关系型数据库如MySQL,而其他服务可能更适合使用非关系型数据库如MongoDB。
异构性的优点包括更大的灵活性。开发团队可以根据每个服务的具体需求选择最适合的技术,而不是被迫使用一个统一的技术栈。
Zipkin/SkyWalking链路追踪组件:Apache SkyWalking在微服务架构中提供了链路追踪的功能,起到以下作用:
分布式追踪:SkyWalking可以为微服务架构中的每个服务调用提供追踪数据,帮助开发者理解各个服务之间的交互和依赖关系,找出性能瓶颈或故障源头。
性能监控:SkyWalking收集各种性能指标,包括服务、服务实例和端点的响应时间、吞吐量等,使开发者能够实时掌握系统的性能状态。
拓扑图分析:SkyWalking能够展示微服务架构中服务之间的拓扑关系,使系统的调用关系一目了然。
告警:SkyWalking可以根据预设的规则生成告警,及时通知开发者系统存在的问题。
度量聚合:SkyWalking不仅可以收集和展示实时的监控数据,还可以聚合这些数据,提供更长时间范围内的性能趋势分析。
支持服务网格:SkyWalking可以与服务网格(如Istio等)集成,为服务网格提供观察性分析。
总的来说,SkyWalking是一个强大的观察性工具,能够帮助开发者更好地理解和优化微服务系统的性能和稳定性。
Spring Boot Admin服务监控组件:用于管理和监控Spring Boot应用程序,但是Spring Boot Admin Server并不适用于生产环境,因为它会暴露一些敏感信息,可能会带来安全风险。在生产环境中,应该使用更专业的监控系统,如Prometheus、Grafana等。
Quartz任务调度组件:主要用于管理和调度后台任务,可以集成到任何Java应用程序中,在微服务架构中,起到以下作用:
定时任务:Quartz可以用于执行定时任务,例如每天凌晨清理日志,每小时汇总统计数据等。
重复任务:Quartz也可以用于执行重复的任务,例如每隔5分钟检查系统状态,每隔10分钟同步数据等。
长时间运行的任务:对于一些需要运行很长时间的任务,例如数据处理和分析,也可以使用Quartz来调度和管理。
集群任务调度:Quartz还提供了集群支持,可以在多个节点上均衡执行任务,提高系统的可用性和性能。
作业持久化:Quartz支持作业的持久化,即使应用程序重启,持久化的作业也不会丢失,会在合适的时候继续执行。
灵活的调度策略:Quartz提供了丰富的调度策略,例如简单的定时调度,也可以使用Cron表达式进行复杂的调度。
因此,在微服务架构中,Quartz可以作为一个重要的组件,帮助你管理和调度各种后台任务。
RabbitMQ、KAFKA消息队列:在高并发场景下,直接的服务调用可能会导致被调用服务的负载过大,而消息队列可以作为一个缓冲,暂存大量的请求,通过调整消费者的处理能力,实现流量的平滑处理。 在微服务架构中,各个服务可能需要共享一些数据,这些数据可以通过消息队列进行传递,实现数据的共享。
ELK:日志收集、过滤、展示。
Minio和FastDFS都是分布式文件存储系统, 主要用于处理大量的非结构化数据,例如图片、视频、日志文件等。
Elasticsearch数据库:任何需要进行快速搜索和分析的数据都可以存储在Elasticsearch中,例如:电子邮件、论坛帖子、文章、、网站访问记录等等。
Redis提供数据的缓存,加速用户的访问。
Apache NiFi是一个开源的数据流自动化工具,在微服务架构中,可以帮助数据流动于不同的系统之间,帮助各个服务之间进行数据的交互。
MySQL提供关系型数据的持久化存储。
4、微服务部署思路
先部署微服务治理层,比如:Nacos、sentinel、Skywalking等;在部署微服务层各个模块,最后接入前端UI;

5、微服务注册中心Nacos
部署Nacos注册中心组件,Nacos需要MySQL数据库,先安装MySQL数据库
#下载MySQL仓库
[root@ruoyi-base ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
#导入GPG密钥文件
[root@ruoyi-base ~]# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
#安装MySQL
[root@ruoyi-base ~]# yum install mysql-server mysql -y
#启动MySQL
[root@ruoyi-base ~]# systemctl enable mysqld --now
#查看MySQL的root初始密码
[root@ruoyi-base ~]# grep -i password /var/log/mysqld.log
#通过初始密码登录到数据库进行修改
[root@ruoyi-base ~]# mysql -uroot -p'&W)Copu&<3HC'
#设置密码策略只验证长度
[root@ruoyi-base ~]# set global validate_password_policy=0;
#设置root本机登录密码(长度须满足8位)
[root@ruoyi-base ~]# alter user root@"localhost" identified by "admin123456";退出数据库,修改my.cnf文件,在文件中定义密码策略,让策略永久生效
[root@ruoyi-base ~]# vim /etc/my.cnf
#...
[mysqld]
validate_password_policy=0#重启MySQL
[root@ruoyi-base ~]# systemctl restart mysqld项目地址:https://github.com/alibaba/nacos
配置文件修改参考地址:http://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html#%E5%90%8E%E7%AB%AF%E8%BF%90%E8%A1%8C
#Nacos需要Java环境,安装jdk 1.8+
[root@ruoyi-base ~]# yum install java-1.8.0-openjdk.x86_64 -y
#需要通过maven打包nacos,下载maven 3.2.x+版本
[root@ruoyi-base ~]# wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-7/x86_64/apache-maven-3.5.2-1.el7.noarch.rpm --no-check-certificate
#安装maven
[root@ruoyi-base ~]# yum install -y apache-maven-3.5.2-1.el7.noarch.rpm下载nacos-server项目包
[root@ruoyi-base ~]# wget https://github.com/alibaba/nacos/releases/download/2.1.1/nacos-server-2.1.1.tar.gz
#解压nacos
[root@ruoyi-base ~]# tar -xf nacos-server-2.1.1.tar.gz
[root@ruoyi-base ~]# cd nacos
###配置nacos连接数据库
[root@ruoyi-base nacos]# vim conf/application.properties
#...
###nacos的默认访问路径(不需要修改)
server.servlet.contextPath=/nacos
#nacos默认端口(不需要修改)
server.port=8848
###使用MySQL作为数据源(取消注释)
spring.datasource.platform=mysql
### 数据库数量(取消注释)
db.num=1
###连接数据库的信息(连接本机数据库不需要修改)
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
###连接数据库的用户名(需要指定用户名)
db.user.0=root
###连接数据库的用户密码(需要指定用户名密码)
db.password.0=admin123456在MySQL中创建nacos库,并导入nacos的表文件
#创建nacos库
[root@ruoyi-base nacos]# mysql -uroot -padmin123456 -e "create database nacos;"
#导入nacos表文件
[root@ruoyi-base nacos]# mysql -uroot -padmin123456 nacos < conf/nacos-mysql.sql启动Nacos组件
[root@ruoyi-base nacos]# bin/startup.sh -m standalone
...
/root/nacos/logs/start.out #日志文件位置
#查看日志文件(看到如下提示启动成功)
[root@ruoyi-base nacos]# cat /root/nacos/logs/start.out
...
INFO Nacos started successfully in stand alone mode. use external storage访问Nacos的web界面:http://IP:8848/nacos/,默认的用户名和密码是 nacos

6、微服务流量控制Sentinel
Sentinel在微服务架构中起到了保护系统稳定性和可用性的重要作用,它可以帮助微服务系统在面临流量过大、服务出问题等情况时,做出相应的处理,防止整个系统的瘫痪。
官方地址:http://sentinelguard.io/zh-cn/docs/introduction.html
项目地址:https://github.com/alibaba/Sentinel
下载Sentinel的jar包
#下载jar包
[root@ruoyi-base ~]# wget https://github.com/alibaba/Sentinel/releases/download/1.8.5/sentinel-dashboard-1.8.5.jar运行Sentinel组件,参考地址: http://doc.ruoyi.vip/ruoyi-cloud/cloud/sentinel.html#%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D
java -Dserver.port=8718 \
-Dcsp.sentinel.dashboard.server=localhost:8718 \
-Dproject.name=sentinel-dashboard \
-Dcsp.sentinel.api.port=8719 \
-jar sentinel-dashboard-1.8.5.jar &> /var/log/sentinel.log &
#命令解释
java //这是Java运行命令,用来启动一个Java程序
-Dserver.port //定义程序的端口号
-Dcsp.sentinel.dashboard.server //定义Sentinel控制台的主机名和端口
-Dproject.name //定义程序的项目名称
-Dcsp.sentinel.api.port //定义了Sentinel API端口
-jar sentinel-dashboard-1.8.5.jar //启动的程序jar包
提示:以上是通过程序的系统属性来定义程序的配置信息,属性名称是由应用程序或库决定,并不是随便定义的,程序会自动获取这些系统属性的值,使程序能够在运行时动态地根据这些属性的值进行配置。提示:查看日志/var/log/sentinel.log文件检查服务是否启动成功。
访问Sentinel的web界面:http://IP:8718,默认的用户名和密码是 sentinel

在网站流量中,QPS 通常用来描述服务器每秒钟能够处理的请求或查询的数量。
7、微服务链路追踪Skywalking
SkyWalking是一个强大的观察性工具,能够帮助开发者更好地理解和优化微服务系统的性能和稳定性。
Skywalking作为链路追踪组件,它所采集的数据需要存储下来提供给相关人员查看系统链路信息。支持的存储有H2、MySQL、Elasticsearch。
Skywalking自带了H2内存数据库作为存储,我们无需额外配置其他存储。

官方地址:https://skywalking.apache.org/
项目地址:https://github.com/apache/skywalking
部署文档:http://doc.ruoyi.vip/ruoyi-cloud/cloud/skywalking.html#%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D
下载skywalking服务端
[root@ruoyi-base ~]# wget https://archive.apache.org/dist/skywalking/9.0.0/apache-skywalking-apm-9.0.0.tar.gz运行skywalking
[root@ruoyi-base ~]# tar -xf apache-skywalking-apm-9.0.0.tar.gz
[root@ruoyi-base ~]# apache-skywalking-apm-bin/bin/startup.sh
#它会运行两个组件,OAP是收集器,端口11800端口,用于收集微服务的信息
SkyWalking OAP started successfully!
#web页面,端口8080
SkyWalking Web Application started successfully!访问skywalking的web界面:http://IP:8080

到此为止,微服务治理层组件部署完毕。
8、部署微服务层
安装MySQL与Redis数据库
#下载MySQL仓库
[root@ruoyi-base ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
#导入GPG密钥文件
[root@ruoyi-base ~]# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
#安装MySQL
[root@ruoyi-base ~]# yum install mysql-server mysql -y
#启动MySQL
[root@ruoyi-base ~]# systemctl enable mysqld --now
#查看MySQL的root初始密码
[root@ruoyi-base ~]# grep -i password /var/log/mysqld.log
#通过初始密码登录到数据库进行修改
[root@ruoyi-base ~]# mysql -uroot -p'&W)Copu&<3HC'
#设置密码策略只验证长度
[root@ruoyi-base ~]# set global validate_password_policy=0;
#设置root本机登录密码(长度须满足8位)
[root@ruoyi-base ~]# alter user root@"localhost" identified by "admin123456";退出数据库,修改my.cnf文件,在文件中定义密码策略,让策略永久生效
[root@ruoyi-base ~]# vim /etc/my.cnf
#...
[mysqld]
validate_password_policy=0#重启MySQL
[root@ruoyi-base ~]# systemctl restart mysqld安装Redis数据库
[root@ruoyi-demo ~]# yum install redis -y
[root@ruoyi-demo ~]# systemctl enable redis --now9、微服务RuoYi-Cloud组件部署
下载RuoYi-Cloud.zip项目
[root@ruoyi-demo ~]# yum install git -y
[root@ruoyi-demo ~]# git clone https://gitee.com/y_project/RuoYi-Cloud.git
[root@ruoyi-demo ~]# ll RuoYi-Cloud/
总用量 28
drwxr-xr-x 2 root root 220 7月 28 13:48 bin
drwxr-xr-x 7 root root 129 7月 28 13:48 docker
-rw-r--r-- 1 root root 1063 7月 28 13:48 LICENSE
-rw-r--r-- 1 root root 10627 7月 28 13:48 pom.xml
-rw-r--r-- 1 root root 8998 7月 28 13:48 README.md
drwxr-xr-x 3 root root 45 7月 28 13:48 ruoyi-api
drwxr-xr-x 4 root root 46 7月 28 13:58 ruoyi-auth
drwxr-xr-x 10 root root 240 7月 28 13:48 ruoyi-common
drwxr-xr-x 4 root root 46 7月 28 13:58 ruoyi-gateway
drwxr-xr-x 6 root root 93 7月 28 13:48 ruoyi-modules
drwxr-xr-x 6 root root 283 7月 28 13:48 ruoyi-ui
drwxr-xr-x 3 root root 42 7月 28 13:48 ruoyi-visual
drwxr-xr-x 2 root root 106 7月 28 13:48 sql在MySQL中创建RuoYi-Cloud业务数据库
[root@ruoyi-demo ~]# mysql -uroot -padmin123456
mysql> create database `ry-cloud` charset utf8;将RuoYi-Cloud项目的sql文件导入到ry-cloud库中
[root@ruoyi-demo ~]# mysql -uroot -padmin123456 ry-cloud < RuoYi-Cloud/sql/ry_20230706.sql为nacos导入RuoYi-Cloud项目所需的配置文件信息,创建ry-config库,然后导入ry_config_2022xxxx.sql 表
提示:在Nacos节点的数据库中创建库
[root@ruoyi-base ~]# mysql -uroot -padmin123456
#创建RuoYi-Cloud配置文件数据库
mysql> create database `ry-config` charset utf8;
#拷贝RuoYi-Cloud配置文件表到nacos节点并导入(在微服务节点拷贝)
[root@ruoyi-demo ~]# scp RuoYi-Cloud/sql/ry_config_20220929.sql 192.168.0.32:/root
[root@ruoyi-base ~]# mysql -uroot -padmin123456 ry-config < ry_config_20220929.sql修改nacos的application.properties文件,将默认的nacos库指向新的ry-config库,这样nacos就可以管理项目的配置文件
[root@ruoyi-base ~]# vim nacos/conf/application.properties
#...
db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=admin123456重启nacos组件
[root@ruoyi-base ~]# nacos/bin/shutdown.sh
[root@ruoyi-base ~]# nacos/bin/startup.sh -m standalone提示:查看日志文件是否启动成功。
登录nacos界面查看是否已经获取到RuoYi-Cloud相关的微服务配置文件
http://IP:8848/nacos/,默认的用户名和密码是 nacos

此时nacos已经获取到RuoYi-Cloud各个组件的配置文件,后续修改微服务的配置文件,在nacos中修改即可。
打包RuoYi-Cloud项目,需要先安装jdk和maven环境(在微服务节点)
#Nacos需要Java环境,安装jdk 1.8+
[root@ruoyi-demo ~]# yum install java-1.8.0-openjdk.x86_64 -y
#需要通过maven打包nacos,下载maven 3.2.x+版本
[root@ruoyi-demo ~]# wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-7/x86_64/apache-maven-3.5.2-1.el7.noarch.rpm --no-check-certificate
#安装maven
[root@ruoyi-demo ~]# yum install -y apache-maven-3.5.2-1.el7.noarch.rpm进入RuoYi-Cloud目录打包项目
[root@ruoyi-demo ~]# cd RuoYi-Cloud
[root@ruoyi-demo RuoYi-Cloud]# mvn clean package -Dmaven.test.skip=true
...
[INFO] ruoyi ............................................. SUCCESS [0.116s]
[INFO] ruoyi-common ...................................... SUCCESS [0.003s]
[INFO] ruoyi-common-core ................................. SUCCESS [24.848s]
[INFO] ruoyi-api ......................................... SUCCESS [0.002s]
[INFO] ruoyi-api-system .................................. SUCCESS [0.694s]
[INFO] ruoyi-common-redis ................................ SUCCESS [4.738s]
[INFO] ruoyi-common-security ............................. SUCCESS [1.525s]
[INFO] ruoyi-auth ........................................ SUCCESS [17.660s]
[INFO] ruoyi-gateway ..................................... SUCCESS [14.733s]
[INFO] ruoyi-visual ...................................... SUCCESS [0.002s]
[INFO] ruoyi-visual-monitor .............................. SUCCESS [5.329s]
[INFO] ruoyi-common-datasource ........................... SUCCESS [5.230s]
[INFO] ruoyi-common-datascope ............................ SUCCESS [0.427s]
[INFO] ruoyi-common-log .................................. SUCCESS [0.591s]
[INFO] ruoyi-common-swagger .............................. SUCCESS [0.449s]
[INFO] ruoyi-modules ..................................... SUCCESS [0.003s]
[INFO] ruoyi-modules-system .............................. SUCCESS [2.563s]
[INFO] ruoyi-modules-gen ................................. SUCCESS [2.946s]
[INFO] ruoyi-modules-job ................................. SUCCESS [2.422s]
[INFO] ruoyi-modules-file ................................ SUCCESS [10.174s]
[INFO] ruoyi-common-seata ................................ SUCCESS [19.509s]Ruoyi-Cloud系统模块介绍
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 // 公共依赖提示:如果只打包一个微服务,可以使用以下方式
[root@ruoyi-demo RuoYi-Cloud]# mvn package -Dmaven.test.skip=true -pl ruoyi-modules/ruoyi-system/ -am10、部署ruoyi-system模块
ruoyi-system是项目的系统模块,需要指定连接数据库、连接Sentinel(流量控制)的信息,信息都存储在nacos中,需要登录到nacos修改 ruoyi-system-dev.yml 文件
添加Sentinel信息参考地址:http://doc.ruoyi.vip/ruoyi-cloud/cloud/sentinel.html#%E4%B8%8B%E8%BD%BD%E6%96%B9%E5%BC%8F
# spring配置
spring:
redis:
# 定义连接Redis的主机(默认本机不需要改)
host: localhost
port: 6379
password:
# 手动添加连接Sentinel的信息
cloud:
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 192.168.0.32:8718
#...........
datasource:
# 主库数据源,连接MySQL数据库的用户名和密码需要修改
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: admin123456添加配置后,点击右下角的【发布】即可。
提前下载 SkyWalking Agent客户端程序,SkyWalking Agent用于收集应用程序的运行时信息,并进行监视,然后SkyWalking服务端通过连接客户端获取微服务信息,实现链路追踪
[root@ruoyi-demo ~]# wget https://archive.apache.org/dist/skywalking/java-agent/8.15.0/apache-skywalking-java-agent-8.15.0.tgz
[root@ruoyi-demo ~]# tar -xf apache-skywalking-java-agent-8.15.0.tgz启动ruoyi-system系统接口模块
java -javaagent:./skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi-system \
-Dskywalking.collector.backend_service=192.168.0.32:11800 \
-Dspring.profiles.active=dev \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=192.168.0.32:8848 \
-Dspring.cloud.nacos.config.server-addr=192.168.0.32:8848 \
-jar RuoYi-Cloud/ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar &> /var/log/ruoyi-system.log &
#命令解释:
-javaagent //表示这是一个Java Agent,指定SkyWalking的代理jar包
-Dskywalking.agent.service_name //表示agent所代理的服务名称叫ruoyi-system
-Dskywalking.collector.backend_service //指定skywalking服务端地址和端口
-Dspring.profiles.active //在spring中用于设置程序的配置环境(dev开发,test测试,prod生产)
-Dspring.cloud.nacos.config.file-extension //指定了程序的配置文件在Nacos中的扩展名为yml
-Dspring.cloud.nacos.discovery.server-addr //指定了Nacos服务发现的服务器地址和端口
-Dspring.cloud.nacos.config.server-addr //指定了Nacos配置服务器的地址和端口
-jar //指定ruoyi-api-system的jar包提示:查看日志文件是否启动成功。
[root@ruoyi-demo ~]# tail -f /var/log/ruoyi-system.log
(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙
.-------. ____ __
| _ _ \ \ \ / /
| ( ' ) | \ _. / '
|(_ o _) / _( )_ .'
| (_,_).' __ ___(_ o _)'
| |\ \ | || |(_,_)'
| | \ `' /| `-' /
| | \ / \ /
''-' `'-' `-..-'在nacos的服务列表中可以查看到已经注册成功,后续网关就可以通过nacos获取到该服务的信息,来调用该服务

提示:可通过详情查看服务具体的信息。
11、部署ruoyi-auth认证中心
修改ruoy-auth配置,需要指定连接Redis、连接Sentinel(限流)的信息,信息都存储在nacos组件中,需要登录nacos修改ruoyi-auth-dev.yml
spring:
redis:
host: localhost
port: 6379
password:
cloud:
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 192.168.0.32:8718添加配置后,点击右下角的【发布】即可。
启动ruoy-auth模块
java -javaagent:./skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi-auth \
-Dskywalking.collector.backend_service=192.168.0.32:11800 \
-Dspring.profiles.active=dev \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=192.168.0.32:8848 \
-Dspring.cloud.nacos.config.server-addr=192.168.0.32:8848 \
-jar RuoYi-Cloud/ruoyi-auth/target/ruoyi-auth.jar &> /var/log/ruoyi-auth.log &提示:查看日志文件是否启动成功。
[root@ruoyi-demo ~]# tail -f /var/log/ruoyi-auth.log
(♥◠‿◠)ノ゙ 认证授权中心启动成功 ლ(´ڡ`ლ)゙
.-------. ____ __
| _ _ \ \ \ / /
| ( ' ) | \ _. / '
|(_ o _) / _( )_ .'
| (_,_).' __ ___(_ o _)'
| |\ \ | || |(_,_)'
| | \ `' /| `-' /
| | \ / \ /
''-' `'-' `-..-'在nacos的服务列表中可以查看到已经注册成功

提示:可通过详情查看服务具体的信息。
12、部署ruoyi-gateway网关模块
修改ruoyi-gateway配置,需要指定连接Redis、连接Sentinel(限流)的信息,信息都存储在nacos组件中, 需要登录nacos修改ruoyi-gateway-dev.yml
spring:
redis:
host: localhost
port: 6379
password:
cloud:
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 192.168.0.32:8718
gateway:添加配置后,点击右下角的【发布】即可。
启动ruoyi-gateway网关
java -javaagent:./skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi-gateway \
-Dskywalking.collector.backend_service=192.168.0.32:11800 \
-Dspring.profiles.active=dev \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=192.168.0.32:8848 \
-Dspring.cloud.nacos.config.server-addr=192.168.0.32:8848 \
-jar RuoYi-Cloud/ruoyi-gateway/target/ruoyi-gateway.jar &> /var/log/ruoyi-gateway.log &提示:查看日志文件是否启动成功。
[root@ruoyi-demo ~]# tail -f /var/log/ruoyi-gateway.log
(♥◠‿◠)ノ゙ 若依网关启动成功 ლ(´ڡ`ლ)゙
.-------. ____ __
| _ _ \ \ \ / /
| ( ' ) | \ _. / '
|(_ o _) / _( )_ .'
| (_,_).' __ ___(_ o _)'
| |\ \ | || |(_,_)'
| | \ `' /| `-' /
| | \ / \ /
''-' `'-' `-..-'在nacos的服务列表中可以查看到已经注册成功

13、部署ruoyi-monitor监控中心
monitor配置信息存储在nacos中,文件为ruoyi-monitor-dev.yml,这个文件不需要修改。
提示:如果想修改用户名和密码,修改name、password。
# spring
spring:
security:
user:
name: ruoyi
password: 123456
boot:
admin:
ui:
title: 若依服务状态监控启动ruoyi-monitor监控
java -javaagent:./skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi-monitor \
-Dskywalking.collector.backend_service=192.168.0.32:11800 \
-Dspring.profiles.active=dev \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=192.168.0.32:8848 \
-Dspring.cloud.nacos.config.server-addr=192.168.0.32:8848 \
-jar RuoYi-Cloud/ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar &> /var/log/ruoyi-monitor.log &提示:查看日志文件是否启动成功。
[root@ruoyi-demo ~]# tail -f /var/log/ruoyi-monitor.log
(♥◠‿◠)ノ゙ 监控中心启动成功 ლ(´ڡ`ლ)゙
.-------. ____ __
| _ _ \ \ \ / /
| ( ' ) | \ _. / '
|(_ o _) / _( )_ .'
| (_,_).' __ ___(_ o _)'
| |\ \ | || |(_,_)'
| | \ `' /| `-' /
| | \ / \ /
''-' `'-' `-..-'访问ruoyi-monitor的页面,用户名:ruoyi,密码123456:http://IP:9100
14、部署ruoyi-ui前端框架
部署手册:http://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html#%E5%89%8D%E7%AB%AF%E9%83%A8%E7%BD%B2
修改ruoyi-ui连接gateway的地址(本环境网关与ruoyi-ui部署在同一节点,无需修改)
[root@ruoyi-demo ~]# vim RuoYi-Cloud/ruoyi-ui/vue.config.js
#...
devServer: {
host: '0.0.0.0',
port: port,
open: true,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`, #连接网关地址及端口构建ruoyi-ui前端框架
#构建和打包vue前端项目需要安装npm、nodejs来安装、更新和管理项目的第三方库或工具。
[root@ruoyi-demo ~]# yum install npm nodejs -y
#安装当前项目的所有依赖,指定依赖的仓库地址
[root@ruoyi-demo ~]# cd RuoYi-Cloud/ruoyi-ui/
[root@ruoyi-demo ruoyi-ui]# npm install --registry=https://registry.npmmirror.com
#构建项目
[root@ruoyi-demo ruoyi-ui]# npm run build:prod
...
Build complete. The dist directory is ready to be deployed.部署nginx参考:http://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html#nginx%E9%85%8D%E7%BD%AE
[root@ruoyi-demo ruoyi-ui]# yum install nginx -y
#准备ui的站点配置文件
[root@ruoyi-demo ruoyi-ui]# vim /etc/nginx/conf.d/ruoyi.conf
server {
listen 80;
server_name web.ruoyi.com;
charset utf-8;
root /code;
location / {
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
}创建code目录并拷贝代码
[root@ruoyi-demo ruoyi-ui]# mkdir /code
[root@ruoyi-demo ruoyi-ui]# cp -r dist/* /code
[root@ruoyi-demo ruoyi-ui]# chown -R nginx:nginx /code启动nginx
[root@ruoyi-demo ruoyi-ui]# systemctl enable nginx --now访问测试http://web.ruoyi.com/(windows配置本地解析)用户名admin,密码admin123

15、更新微服务特定模块
更新ruoyi-auth模块,修改登录时的提示信息
[root@ruoyi-demo ~]# vim /root/RuoYi-Cloud/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
#...
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("输入的用户名:" + username + " 不存在");
}重新打包ruoyi-auth模块
[root@ruoyi-demo ~]# cd RuoYi-Cloud/
[root@ruoyi-demo RuoYi-Cloud]# mvn package -Dmaven.test.skip=true -pl ruoyi-auth -am
[INFO] ruoyi .............................................. SUCCESS [ 1.266 s]
[INFO] ruoyi-common ....................................... SUCCESS [ 0.001 s]
[INFO] ruoyi-common-core .................................. SUCCESS [ 1.962 s]
[INFO] ruoyi-api .......................................... SUCCESS [ 0.001 s]
[INFO] ruoyi-api-system ................................... SUCCESS [ 0.051 s]
[INFO] ruoyi-common-redis ................................. SUCCESS [ 0.128 s]
[INFO] ruoyi-common-security .............................. SUCCESS [ 0.056 s]
[INFO] ruoyi-auth ......................................... SUCCESS [ 3.560 s]提示:同一个项目中,如果其他微服务依赖于被更新的微服务, 那么在更新这个微服务时,也会重新打包和部署那些相关的微服务。
停止ruoyi-auth重新运行
[root@ruoyi-demo RuoYi-Cloud]# jps
...
9462 ruoyi-auth.jar
[root@ruoyi-demo RuoYi-Cloud]# kill 9462重启ruoyi-auth模块(注意路径)
java -javaagent:./skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi-auth \
-Dskywalking.collector.backend_service=192.168.0.32:11800 \
-Dspring.profiles.active=dev \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=192.168.0.32:8848 \
-Dspring.cloud.nacos.config.server-addr=192.168.0.32:8848 \
-jar RuoYi-Cloud/ruoyi-auth/target/ruoyi-auth.jar &> /var/log/ruoyi-auth.log &登录ruoyi,输入一个不存在的用户来验证更新结果

评论区