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

本文详细介绍了RuoYi-Cloud项目的部署过程,包括本地开发环境搭建、Nacos配置、数据库迁移、微服务启动与配置、以及上云部署策略,涵盖了SpringBoot、SpringCloud、Vue3和Kubernetes等技术的使用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值