KubeSphere 核心实战之四【在kubesphere平台上部署Ruoyi-cloud项目】(实操篇 4/4)

**《KubeSphere 核心实战系列》**

KubeSphere 核心实战之一(实操篇 1/4)

KubeSphere 核心实战之二(实操篇 2/4)

KubeSphere 核心实战之三(实操篇 3/4)

KubeSphere 核心实战之四(实操篇 4/4)

**《KubeSphere 核心实战系列》**

文章目录

    • 1、Rouyi-Cloud架构
    • 2、项目上云分析
    • 3、开始部署
      • 3.1、部署中间件
        • 3.1.1 部署mysql和redis
        • 3.1.2 mysql数据库迁移到云上mysql
        • 3.1.3 部署nacos
      • 3.2、部署ruoyi-cloud微服务模块前的准备
        • 3.2.1. 云上环境Dockerfile配置
        • 3.2.1. 微服务上云分析
        • 3.2.2. 制作微服务镜像并推送给个人阿里云镜像仓库
      • 3.3、部署ruoyi-cloud微服务模块上云
        • 3.3.1、部署规则
        • 3.3.2、ruoyi-visual-monitor微服务模块上云
        • 3.3.2、ruoyi-system微服务模块上云
        • 3.3.3、ruoyi-job微服务模块上云
        • 3.3.4、ruoyi-gen微服务模块上云
        • 3.3.5、ruoyi-gateway微服务模块上云
        • 3.3.5、ruoyi-file微服务模块上云
        • 3.3.6、ruoyi-auth微服务模块上云
        • 3.3.7、所有后端微服务和中间件服务总览
      • 3.4、部署ruoyi-cloud前端vue项目上云
        • 3.4.1、修改vue.config.js
        • 3.4.2、打包前端项目
        • 3.4.3、存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问
        • 3.4.4、修改ngnix配置文件
        • 3.4.5、压缩上传到云服务器
        • 3.4.6、解压并制作镜像并推送到阿里云个人镜像仓库
        • 3.4.7、使用kubesphere平台部署ruoyi-cloud前端项目

1、Rouyi-Cloud架构

请添加图片描述

2、项目上云分析

将rouyi-cloud项目搬上云需要考虑的问题如下:

  • 1,项目中用到了多少中间件?中间件是有状态应用,有些中间件需要导入默认的数据后才能上云。

  • 2,ruoyi-cloud包含8个微服务子模块(带端口的模块对应一个微服务)

  - ruoyi-ui                  // 前端框架 [80]- ruoyi-gateway             // 网关模块 [8080]- ruoyi-auth                // 认证中心 [9200]- ruoyi-system              // 系统模块 [9201]- ruoyi-gen                 // 代码生成 [9202]- ruoyi-job                 // 定时任务 [9203]- ruoyi-file                // 文件服务 [9300]- ruoyi-visual-monitor      // 监控中心 [9100]

它们都是无状态的应用,自己写的微服务需要自己制作镜像(编写Dockerfile文件)。

  • 3,中间件和微服务上云以后,各个中间件和微服务之间的访问问题,涉及整个项目的网络拓扑模型;优先集群内网地址访问微服务中间件(使用内网ip或者内网域名)。

  • 4,每个微服务的配置如何分离(生产配置分离URL),生产环境与开发环境的配置分离。

请添加图片描述

  • 中间件:有状态、数据导入

  • 微服务:无状态、制作镜像

  • 网络:各种访问地址,各个微服务和中间件之间访问(通过集群内部网络进行)

  • 配置:生产配置分离、URL

每个微服务上云需要做的工作:

  • 1、每个微服务准备 bootstrap.properties,配置 nacos地址信息(默认使用本地链接),nacos配置中心中每个配置文件信息需要修改为上云后的mysql和redis链接地址。
  • 2、每个微服务准备Dockerfile,启动命令,指定线上nacos配置等。
  • 3、每个微服务制作自己镜像。

3、开始部署

3.1、部署中间件

根据ruoyi-cloud架构图分析得到,项目需要的中间件有三个,分别是:

  1. mysql(数据迁移:将若依的数据库迁移到云上的mysql中,共三个库)
  2. redis
  3. nacos(注册和配置中心)
3.1.1 部署mysql和redis

首先保证在kubesphere上已经部署好mysql和redis两个服务,具体部署流程参见我的上两篇博客:

  • redis部署:https://tigerhhzz.blog.csdn.net/article/details/135640662

  • mysql部署:https://tigerhhzz.blog.csdn.net/article/details/135623659

名称集群内访问地址集群外部访问地址
mysqlhis-mysql.his:3306192.168.162.31:30201
redishis-redis.his:6379192.168.162.31:30608
3.1.2 mysql数据库迁移到云上mysql

mysql数据库初始化导入,将ruoyi-cloud所需的三个数据库内容导入到部署好的mysql中;三个数据库如下:

  1. ry-cloud
  2. ry-config
  3. ry-seata

具体操作可以通过navicat工具中的数据传输进行数据库的迁移。

在这里插入图片描述

在这里插入图片描述

3.1.3 部署nacos

具体参见nacos的官方文档

https://nacos.io/docs/v2/guide/admin/cluster-mode-quick-start/
请添加图片描述

配置文件 application.properties
如果是集群配置nacos多一个配置文件:cluster.conf
挂载配置文件使用子路径进行挂载。

/home/nacos/conf/application.properties
/home/nacos/conf/cluster.conf

在这里插入图片描述

在kubesphere上创建nacos服务

  1. 首先创建nacos的配置
    请添加图片描述
    请添加图片描述
    使用子路径挂载nacose的两个配置文件:
    请添加图片描述
    上面配置文件别忘了修改mysql数据库的链接地址:his-mysql.his:3306 以及登录账号和密码。

  2. 创建nacos服务:

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

镜像名称:nacos/nacos-server:v2.1.0
nacos客户端下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3

请添加图片描述
这里补充一个bug:
因为nacos启动需要连接mysql数据库,当nacos服务启动了,然而mysql服务还没有准备就绪,此时会出现服务从nacos中读取配置文件失败的情况。

解决办法:使用探针,nacos服务中增加健康检查机制,定时向nacos容器组发请求来探究运行状况,如果状态是错误的,k8s就不断的重启服务,直到服务正常。

在这里插入图片描述

请添加图片描述

在这里插入图片描述

nacos数据没有挂载的,都存在mysql数据库;

创建一个外网能访问的nacos服务,以node方式访问,暴露外网端口
请添加图片描述
游览器访问nacos: 192.168.162.31:30986请添加图片描述
至此,我们部署完成nacos,redis和mysql 三个中间件服务。

接下来我们开始部署rouyi-cloud项目的微服务模块。

3.2、部署ruoyi-cloud微服务模块前的准备

根据ruoyi-cloud架构图分析得到:
首先是前端vue项目模块,用来用户发送请求到网关服务;网关模块接受到前端的请求后分发给各个微服务模块。

在这里插入图片描述

微服务部署
请添加图片描述

3.2.1. 云上环境Dockerfile配置
  1. nacos中创建prod命名空间:
    在这里插入图片描述

  2. 克隆dev环境中配置到prod命名空间中
    在这里插入图片描述

  3. Dockerfile文件

FROM openjdk:8-jdk
LABEL maintainer=tigerhhzz#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/timezoneCOPY target/*.jar /app.jar
EXPOSE 8080#
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

启动镜像时,加一些额外的参数,每个微服务启动后对应一个pod,每个pod有不同的ip,但是端口都是8080,这样每个pod的访问地址就是唯一的。

规则:

1、容器默认以8080端口启动
2、时间为CST
3、环境变量 PARAMS 可以动态指定配置文件中任意的值,默认激活的是开发dev环境,去nacos配置中心中找xxxxx-dev.yml配置文件,应用上云打包镜像启动会自动激活生产环境pro,然后去nacos配置中心中找xxxxx-prod.yml配置文件。
4、nacos集群内地址为 his-nacos.his:8848   
5、微服务默认启动加载 nacos中  服务名-激活的环境.yml 文件,所以线上的配置可以全部写在nacos中。
3.2.1. 微服务上云分析

请添加图片描述
idea中使用maven打包jar包。
在这里插入图片描述
在这里插入图片描述
所用微服务模块打包成功。

编辑整理各个模块的jar和Dockerfile文件(每个微服务模块制作镜像的准备工作)
在这里插入图片描述
上传Dockerfile-images-ry整个文件夹到服务器(任何一个节点)
在这里插入图片描述

3.2.2. 制作微服务镜像并推送给个人阿里云镜像仓库

在这里插入图片描述

##打包镜像命令
docker build -t ruoyi-auth:v1.0  .##查看镜像
docker images|grep ruoyi

在这里插入图片描述
在这里插入图片描述

创建阿里云个人镜像仓库

开通阿里云“容器镜像服务(个人版)

阿里云镜像服务参考官网地址:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

首先创建一个命名空间,默认仓库类型设置为公开

在这里插入图片描述
然后,在自己的命名空间下,创建一个镜像仓库:
在这里插入图片描述
最后,进行镜像推送

##登录阿里云Docker Registry
docker login --username=hehu****@126.com registry.cn-hangzhou.aliyuncs.com##将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]

在这里插入图片描述

把所有微服务镜像推送到个人阿里云镜像仓库。

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-visual-monitor:v1.0

在这里插入图片描述

思考两个问题:

  1. 手动一个个制作镜像,很费力费时,有没有一个自动化制作镜像流程?
  2. 这是使用了阿里云个人镜像仓库,有没有自己搭建公司仓库?一般开发中,搭建公司的habor私有仓库;专门存放项目镜像。

3.3、部署ruoyi-cloud微服务模块上云

ruoyi-cloud所用镜像都已经推送到个人阿里云镜像仓库:

3.3.1、部署规则

● 应用一启动会从云上nacos获取到 "应用名-激活的环境标识.yml"的配置文件

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

● 云上nacos配置文件中的中间件例如redis、mysql等链接地址一定是集群内的访问地址

在这里插入图片描述

在这里插入图片描述

3.3.2、ruoyi-visual-monitor微服务模块上云

整个操作在kubesphere云平台进行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看容器运行日志:
在这里插入图片描述

监控模块启动成功!!!

3.3.2、ruoyi-system微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
过程同3.3.1一样。

3.3.3、ruoyi-job微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
过程同3.3.1一样。

3.3.4、ruoyi-gen微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-gateway微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-file微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
过程同3.3.1一样。

3.3.6、ruoyi-auth微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
过程同3.3.1一样。

3.3.7、所有后端微服务和中间件服务总览

在这里插入图片描述
工作负载一览:
在这里插入图片描述
在这里插入图片描述

3.4、部署ruoyi-cloud前端vue项目上云

ruoyi-cloud前端是vue项目,端口是80
打包方式:其实就是ngnix镜像,将前端打包的文件夹放到ngnix指定文件夹下。

其实就是运行package.json文件中的脚本build:prod
在这里插入图片描述

3.4.1、修改vue.config.js

修改的内容是:
在这里插入图片描述
在这里插入图片描述

http://ruoyi-gateway.his:8080
3.4.2、打包前端项目

打包命令:

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

在这里插入图片描述

3.4.3、存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问

打包完毕后,会生成一个dist文件,然后将dist文件夹中的内容拷贝到如图下的位置中:

在这里插入图片描述

存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问。

3.4.4、修改ngnix配置文件

在这里插入图片描述
修改后的 nginx.conf文件如下

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  _;location / {root   /home/ruoyi/projects/ruoyi-ui;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://ruoyi-gateway.his:8080/;}# 避免actuator暴露if ($request_uri ~ "/actuator") {return 403;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}
3.4.5、压缩上传到云服务器

压缩上传到集群内任意节点机子上。
在这里插入图片描述

3.4.6、解压并制作镜像并推送到阿里云个人镜像仓库

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

制作ngnix镜像:

docker build -t registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0 -f dockerfile .

在这里插入图片描述
镜像制作成功:
在这里插入图片描述

推送到阿里云个人镜像仓库

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0
3.4.7、使用kubesphere平台部署ruoyi-cloud前端项目

创建无状态服务
需要注意的时候,前端项目云部署暴露外网访问地址nodeport。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端项目启动成功:
在这里插入图片描述

如果内存不够,(启动无顺序限制)

 Auth服务和Gateway服务必须启动system服务如果你想访问后台就启动job和gen服务这两个一个是定时任务一个是代码生成 如果你有用得到就启动 反则不需要启动

在这里插入图片描述
在这里插入图片描述
前端项目启动成功!!至此所有服务都部署完成!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

PyCharm安装教程(超详细),零基础小白也能看懂

一、简介 PyCharm是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功…

第5章 python深度学习——波斯美女

第5章 深度学习用于计算机视觉 本章包括以下内容: 理解卷积神经网络(convnet) 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

软件工程知识梳理4-详细设计

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…

聆听华为云IoT技术布道师讲解,学习如何为物联网设备注入“华为云+鸿蒙DNA”

前言 一、智能化的基础-物联网 1.1 万物互联是智能化的基础 PC时代,让更多的“人”进入互联网的世界,以获取更多的用户为主要目标。 移动互联网时代,移动设备更加受到青睐,各种“应用”如雨后春笋般“诞生”了。 智能时代&am…

基于CVITEK_CV1821+SOI_Q03P的IPC方案

方案概述: 该方案基于主控平台CVITEK_CV1821和sensor SOI_Q03P,运用于智能监控IP摄像头,可用于户外或室内。采用了2304x1296的分辨率,30的帧率,支持HDR。作为3M的监控摄像头,通过ISP图像调校技术&#xff…

电小二数据库更新936个元件数据,速来查看!

数据快报 利驰电小二数据库收录48733个系列,1001家元件品牌厂商,本期更新936个系列数据,快来看看吧! 01 价格数据更新 常熟开关制造有限公司 更新系列数据138个 价格版本更新至:2024-01-01 调价系列:…

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…

【开源】基于JAVA+Vue+SpringBoot的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

【LeetCode】235. 二叉搜索树的最近公共祖先(中等)——代码随想录算法训练营Day22

题目链接:235. 二叉搜索树的最近公共祖先 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p…

Linux常用重要命令

目录 windows与linux的区别 Linux的命令 用户配置 切换用户 退出当前用户 添加用户 删除用户 文件相关命令 当前工作目录 查看当前工作目录下的所有文件 改变当前工作目录 创建目录 删除目录 拷贝文件或者目录 移动文件或者目录 删除文件 树状目录结构显示 权…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具,能够列出库文件(.a、.lib)、目标文件(*.o)、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name:打印出每个符号属于的文件…