【后端】简化部署设计方案——内层设计方案

news/2025/2/24 12:41:19/文章来源:https://www.cnblogs.com/o-O-oO/p/18717944

根据《简化部署设计方案V2》的内容,内层部署需要提供的 .sh 脚本应覆盖部署流程的各个阶段,确保组件能够顺利安装、配置、启动、检查状态,并支持升级和卸载。

一、 部署某组件所需的内层结构

左侧是约定的内层结构,右侧的其他部署的内容物,按需存放即可。

1.1 scripts目录:存放执行的脚本

每个组件应该包含一个scripts的目录,用于存放执行的脚本。

下面是脚本的说明

脚本名称 功能
config.sh 配置脚本
install.sh 安装脚本
start.sh 启动脚本
stop.sh 停止脚本
status.sh 运行状态检查脚本
upgrade.sh 升级脚本

1.2 sqls目录:按版本存放sql脚本

每个sql版本的目录中,应具有完整的sql脚本init.sql和当前版本的升级sql脚本update.sql。
例如,当用户直接安装某个版本时,则直接调用其init.sql脚本即可。
当用户从某个版本更新的时候,就可以调用从原版本开始的之后的所有更新update.sql脚本。

1.3 services 目录:存放系统服务类

启动业务尽量采用系统服务的方式启动,这样可以便于运维、自启动等。如果确实不能以服务方式启动的,可以不使用该方法。

二、文件准备结构和功能

2.1 config.sh 配置相关的脚本

1、必要的参数要求

--read 读取所有参数配置:组件依照自己的配置,读取并返回所有的参数配置,以点分的参数方式

例如server.port=35000,按行分隔所有的配置。

例如,当调用 config.sh --read的时候会读取所有的参数配置。

这个时候,应该返回下面的示例内容

[组件名]
参数1=值1
参数2=值2

以知识库系统为例,需要输出下面的参数例子

[knowledge] #知识库组件
server.port=35000 # 后端的默认端口为35000
nginx.web.port=18080 # 平台前端访问端口
...

参数的长短格式不限,由内层组件自己确定,所有组件输出的时候「均需要带有适当的注释」。

2.2 install.sh - 安装脚本

1、必要的参数要求

--config-file 文件名 解析文件,读取所有自己的参数列表,这个文件名仅支持使用绝对路径的方式传入。
外部传入的配置文件格式为

[组件名]
参数1=
参数2=

这里的参数是内部系统自己需要的参数。以知识库系统为例:

[knowledge] #知识库组件
server.port=35000 # 后端的默认端口为35000
nginx.web.port=18081 # 平台前端访问端口
...

这里与读取出来的保持一致,组件内部需要判断是否与自己的默认配置有变化,如果由变化需要更新配置。
2、功能

解析外部参数文件,配置外部参数(如果有)执行组件安装(包括环境依赖检查)。记录安装日志。

3、要求规范

安装目录均为 /opt/module/组件名/version这样的,这样做的好处是便于后期做回滚。
例如下图所示:

nginx配置文件的存放目录为 /opt/module/nginx/conf.d/

2.3 启动脚本 start.sh

启动考虑两种方法,第一种是service启动,第二种是nohup启动。

下面是一个示例,考虑采用 service 启动的情况。这样,脚本不仅能通过 nohup 启动进程,还能支持通过 systemctl 来管理服务,确保系统能够适应不同的部署方式。

#!/bin/bashSERVICE_NAME="app.service"
JAR_PATH="/opt/module/app.jar"
LOG_PATH="/opt/module/logs/app.log"# 检查 systemd 服务是否存在
if systemctl list-units --type=service | grep -q "$SERVICE_NAME"; thenecho "通过 systemctl 启动服务..."systemctl start $SERVICE_NAME
elseecho "通过 nohup 启动服务..."nohup java -jar $JAR_PATH > $LOG_PATH 2>&1 &
fi# 检查进程是否成功启动
sleep 5
ps aux | grep app.jar | grep -v grepecho "服务已启动"

start.sh: 如果 systemd 服务已经存在且可用,则通过 systemctl start 启动服务;否则,回退到使用 nohup 启动。

2.4 停止脚本 stop.sh

#!/bin/bashSERVICE_NAME="app.service"# 检查 systemd 服务是否存在
if systemctl list-units --type=service | grep -q "$SERVICE_NAME"; thenecho "通过 systemctl 停止服务..."systemctl stop $SERVICE_NAME
elseecho "通过 pkill 停止服务..."pkill -f app.jarsleep 3# 确保进程完全终止if pgrep -f app.jar > /dev/null; thenecho "进程未成功终止,强制杀死"pkill -9 -f app.jarfi
fiecho "服务已停止"

stop.sh: 通过 systemctl stop 停止服务,如果服务未通过 systemd 启动,则通过 pkill 停止进程。

2.5 运行状态检查脚本 status.sh

#!/bin/bashSERVICE_NAME="app.service"# 检查 systemd 服务是否存在
if systemctl list-units --type=service | grep -q "$SERVICE_NAME"; thenecho "服务通过 systemctl 运行中"systemctl status $SERVICE_NAME
elseif pgrep -f app.jar > /dev/null; thenecho "服务通过 nohup 运行中"ps -eo pid,%cpu,%mem,cmd | grep app.jar | grep -v grepelseecho "服务未运行"fi
fi

status.sh: 如果服务是通过 systemd 启动,则使用 systemctl status 来检查状态;如果不是,则使用 ps 来检查进程。

2.6 升级脚本 upgrade.sh

#!/bin/bash# 备份当前安装目录
echo "开始备份当前版本..."
cp -r /opt/module /opt/module_backup# 检查是否已经存在新的安装脚本
if [ -f "/opt/module/install.sh" ]; thenecho "开始执行安装脚本..."/opt/module/install.sh
elseecho "安装脚本不存在,无法进行升级"exit 1
fiecho "升级完成"

原创 demo123567 海燕技术栈

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

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

相关文章

H3C CX8028 GPFS并行文件系统全闪存储配置案例

H3C华三CX8028使用IBM的GPFS商业授权的一款全闪存储设备。本案中,客户机服务器与存储服务器均搭配双口200G网卡 ,配合200G的ROCE网络搭建集群。 GPRS文件系统中,存储集群不光需要把存储服务器组织在一起,客户机也需要在集群中声明身份,参与到集群之中,这并不像传统的集中…

【kali】在Kali Linux中安装Navicat17

Navicat 是笔者最喜欢的一款专业的数据库管理工具,不仅支持多种数据库类型,而且它提供了直观的用户界面和丰富的功能,帮助用户轻松管理和操作数据库,提高工作效率。 通过,Navicat我们是在Windows环境中部署的。本文以KALI为例,讲解如何在Linux环境中部署。 首先,我们从官…

URL 生成网站截图 API 数据接口

URL 生成网站截图 API 数据接口 网站工具 / 截图 高效生成网页截图 生成网页截图 / 图片输出。1. 产品功能支持全页截图和视窗截图; 支持自定义截图尺寸; 兼容移动设备截图; 支持暗黑模式截图; 固定参数请求,可以得到最新的站点截图; 快速高效的截图生成; 全接口支持 HT…

OCR识别表格中的参数及参数值

一、需求 识别固定表格中的文字,输出表格中的参数字典 二、整体思路找到一张含有表格的图片,利用mac自带的预览工具分析出图片每个单元格的对角线坐标, 使用程序根据图片文件和对角线坐标数组,分割图片为很多个小图片, 采用tesseract库识别单个单元格中的文字,并将识别出…

H800 Nvlink 基础环境配置(Ubuntu20.04 )

H100/800 SXM的8卡服务器在配置多机互联环境时,除了要安装Nvidia的GPU驱动,还需要安装FabricManager。 Nvidia 提供了在线安装和离线安装两种方式。Z项目H800 NVL 基础环境配置(Ubuntu20.04 ) 操作系统基础安装 配置源 本操作在Ubuntu 20.04下完成, 所有命令都以root身份执行…

c_note

c笔记一、变量 1、变量的声明 ​ 变量的声明是给编译器看的,告诉编译器变量的类型以及名字等相关的信息。 格式:数据类型 变量名; 变量的声明显然是一个编译时概念,所以它和程序的运行没有太大的关系。 一个变量具有声明,并不意味着该变量会在运行时期分配内存空间。 2、…

Drasi Sources SDK

什么是Drasi数据源(Source)?Source提供了与系统的连接,Drasi 可以将这些系统视为变化源。source 在 Drasi 中执行三个重要功能:处理源系统生成的更改日志/源,并将这些更改推送到使用该源作为输入的每个连续查询。 将源更改数据转换为一致的属性图数据模型,以便订阅的 Co…

【每日一题】20250216

人生就是这样,不经历鲜血淋漓的疼痛,就不会明白那些曾经让我们厌烦的说教其实是受用一生的信条。【每日一题】(多选)如图所示,在竖直半面内有一半径为 \(R\) 的圆弧轨道.半径 \(OA\) 木平、\(OB\) 竖直,一个质量为 \(m\) 的小球自 \(A\) 的正上方 \(P\) 点由静止开始自由…

数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式

数据项目,无论是数据分析、可视化,还是数据科学和机器学习相关的项目,通常都非常复杂,涉及多个组成部分,比如代码、数据、运行环境、SQL脚本以及分析报告等;与此同时,随着AI时代的到来,数据科学领域正经历重大变革。这对于数据科学团队来说,如何保持高效地工作模式一直…

SU镜像:缩放s

su没有镜像,可用:缩放s 选中要镜像的对象——复制一个——s——找到中间的点——向右拉动——输入 -1

LGP1377 [TJTS 2011] 树的序 学习笔记

LGP1377 [TJTS 2011] 树的序 学习笔记 Luogu Link 题意简述 给一个生成序列 \(p\),简单起见 \(p\) 是一个长为 \(n\) 的排列。按照这样的步骤生成一棵二叉搜索树:往空树中插入 \(p_i\),则 \(p_i\) 成为当前二叉搜索树的根。 往非空树 \(u\) 中插入 \(p_i\),若 \(p_i\) 小于…

vxe-input绑定keyup事件传递的参数

一、VUE3中 Input输入框绑定keyup事件传递的$event 代码一:<script setup>function judgeIsEnterToSerach(event){console.log(event,1111);console.log(event.key,2222);console.log(event.target,230923);console.log(event.target.value,3333);console.log(event.tar…