提交 470c849b authored 作者: 陈泽健's avatar 陈泽健

feat(scripts): 主脚本模块化拆分函数,新增中间件自动化部署脚本

- 创建了新的中间件部署脚本 auto_middleware_install.sh
- 实现了 MySQL 数据库的 Docker 部署功能,包括初始化和定时备份
- 实现了 EMQX 消息队列的 Docker 部署功能
- 实现了 Redis 缓存的 Docker 部署功能
- 实现了 FastDFS 文件存储的 Docker 部署功能
- 实现了 ngrok 内网穿透的 Docker 部署功能
- 实现了 Nacos 配置中心的 Docker 部署功能
- 实现了 Nginx 反向代理的 Docker 部署功能
- 添加了需求文档说明模块化拆分方案
上级 50a5ba3c
# 主脚本模块化拆分中间件
## 代码路径
- 需调用代码路径:[自动化部署脚本/x86架构/新统一平台/auto_middleware_install.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
## 功能需求
### 功能目标
**目标:** 当前主脚本代码量过于庞大,不利于维护,现需将中间件的相关部署函数拆分出来,通过在主脚本中调用auto_middleware_install.sh,带上中间件服务的传参实现部署。
### 需求描述
#### 调用逻辑
- 设置一个字段`middleware_type`,接收需部署的中间件服务名称,字段支持数组,支持多个中间件服务同时部署
- redis:`redis`
- mysql:`mysql`
- emqx:`emqx`
- fdfs:`fdfs`
- ngrok:`ngrok`
- nacos:`nacos`
- nginx:`nginx`
- 调用方式:
- 获取脚本所在目录,使用绝对路径调用
- 使用环境变量传递中间件类型,多个服务用空格分隔
```bash
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 单个服务部署
middleware_type=redis "$SCRIPT_DIR/auto_middleware_install.sh"
# 多个服务部署(空格分隔)
middleware_type="redis mysql emqx" "$SCRIPT_DIR/auto_middleware_install.sh"
```
- 接收脚本执行的返回参数,并使用log函数打印日志
- 0:部署成功,使用`log "INFO"`打印日志
- 1:部署失败,使用`log "ERROR"`打印错误日志,使用`return 1`退出当前函数部署操作
- 执行时机:
- 暂时先跟在docker_x86之后再执行
#### 脚本设计要求
- 主入口函数:
-`auto_middleware_install.sh`中增加主入口函数`install_middleware()`
- 主入口函数负责:
- 解析`middleware_type`环境变量
- 根据参数调用对应的中间件部署函数
- 返回部署结果
- log函数依赖:
- 脚本中的log函数与主脚本保持一致
- 在主脚本中先source导入`auto_middleware_install.sh`,再调用`install_middleware`函数
- 变量初始化:
- 在主入口函数中初始化以下变量:
- `sudoset`:sudo命令前缀(根据用户权限判断)
- `SUDO`:sudo命令(兼容不同函数中的变量名)
- `server_ip`:服务器IP地址(由主脚本传入)
#### 中间件部署函数列表
- `mysql_x86()` - MySQL数据库部署
- `emqx_x86()` - EMQX消息队列部署
- `redis_x86()` - Redis缓存部署
- `fastfds_x86()` - FastDFS文件存储部署
- `ngrok_x86()` - ngrok内网穿透部署
- `nacos_x86()` - Nacos配置中心部署
- `nginx_x86()` - Nginx反向代理部署
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# 主脚本模块化拆分中间件计划执行文档
## 需求来源
- 需求文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_主脚本模块化拆分中间件_需求文档.md`
---
## 实现计划
### 1. 代码结构设计
```bash
auto_middleware_install.sh
├── mysql_x86() # 已有函数
├── emqx_x86() # 已有函数
├── redis_x86() # 已有函数
├── fastfds_x86() # 已有函数
├── ngrok_x86() # 已有函数
├── nacos_x86() # 已有函数
├── nginx_x86() # 已有函数
└── install_middleware() # 新增主入口函数
├── 初始化变量(sudoset/SUDO/server_ip)
├── 解析middleware_type环境变量
├── 遍历调用对应的中间件函数
└── 返回部署结果
```
### 2. 实现步骤
- [ ] 在auto_middleware_install.sh末尾增加install_middleware()主入口函数
- [ ] 实现变量初始化逻辑(sudoset/SUDO/server_ip)
- [ ] 实现middleware_type参数解析
- [ ] 实现中间件函数映射和调用逻辑
- [ ] 实现返回值处理和日志打印
- [ ] 在主脚本new_auto.sh中source导入auto_middleware_install.sh
- [ ] 在主脚本docker_x86后调用install_middleware函数
### 3. 技术要点
#### 3.1 变量初始化
```bash
# 初始化sudo相关变量
if [[ $(id -u) -ne 0 ]]; then
sudoset="sudo"
SUDO="sudo"
else
sudoset=""
SUDO=""
fi
# 获取服务器IP
server_ip=$(ip -4 addr show scope global | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n1)
if [[ -z "$server_ip" ]]; then
server_ip=$(hostname -I | awk '{print $1}')
fi
```
#### 3.2 参数解析
```bash
# 解析middleware_type环境变量
local middlewares="${middleware_type:-}"
if [[ -z "$middlewares" ]]; then
log "ERROR" "未指定中间件类型"
return 1
fi
```
#### 3.3 中间件函数映射
```bash
# 中间件名称到函数的映射
declare -A middleware_map=(
["mysql"]="mysql_x86"
["emqx"]="emqx_x86"
["redis"]="redis_x86"
["fdfs"]="fastfds_x86"
["ngrok"]="ngrok_x86"
["nacos"]="nacos_x86"
["nginx"]="nginx_x86"
)
```
#### 3.4 主脚本调用方式
```bash
# 导入中间件部署脚本
source "$SCRIPT_DIR/auto_middleware_install.sh"
# 调用部署函数
middleware_type="redis mysql" install_middleware
```
### 4. 函数位置
- auto_middleware_install.sh:在所有中间件函数之后添加install_middleware主入口
- new_auto.sh:在docker_x86函数之后添加source导入和调用
### 5. 返回值定义
| 返回值 | 含义 | 处理方式 |
|--------|------|----------|
| 0 | 全部部署成功 | 继续执行 |
| 1 | 存在部署失败 | log ERROR + return 1 |
### 6. 中间件部署顺序
```
建议部署顺序:mysql → redis → emqx → nacos → fdfs → ngrok → nginx
(MySQL数据库应优先部署,其他中间件可能依赖它)
```
---
## 代码修改
### 修改文件
1. `自动化部署脚本/x86架构/新统一平台/auto_middleware_install.sh` - 添加主入口函数
2. `自动化部署脚本/x86架构/新统一平台/new_auto.sh` - 添加source导入和调用
---
## 测试计划
- [ ] 测试单个中间件部署(middleware_type=redis)
- [ ] 测试多个中间件部署(middleware_type="redis mysql")
- [ ] 测试全部中间件部署
- [ ] 测试无效中间件名称
- [ ] 测试空参数场景
- [ ] 测试部署失败场景
---
## 优化功能回填
> 本章节用于记录实现过程中发现的优化点和改进措施
| 日期 | 优化项 | 状态 | 备注 |
|------|--------|------|------|
| - | - | - | - |
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论