提交 115f635d authored 作者: 陈泽健's avatar 陈泽健

feat(middleware): 重构中间件部署脚本支持Docker优先部署

- 将docker_x86函数从auto_deploy_services.sh迁移至auto_middleware_install.sh
- 修改docker版本从29.1.3为20.10.7以符合离线包要求
- 在install_middleware函数中添加Docker环境优先部署逻辑
- 实现Docker部署失败时立即返回错误码停止后续部署
- 更新需求文档明确调用顺序和错误处理机制
- 完善部署日志输出和错误提示信息
上级 84a3102d
...@@ -9,6 +9,12 @@ ...@@ -9,6 +9,12 @@
### 需求描述 ### 需求描述
#### 调用逻辑 #### 调用逻辑
- **优先部署Docker环境**:无条件优先执行`docker_x86`函数部署docker服务,该调用与`middleware_type`参数无关。
- **Docker部署失败处理**:如果`docker_x86`函数部署失败(返回非0值),则立即返回失败状态,主脚本应停止执行,不再继续后续部署流程。
- **Docker版本要求**
- 离线包路径:`/data/temp/docker-20.10.7.tgz`
- 版本号:`20.10.7`
- 服务配置文件:`/data/temp/docker.service`
- 设置一个字段`middleware_type`,接收需部署的中间件服务名称,字段支持数组,支持多个中间件服务同时部署 - 设置一个字段`middleware_type`,接收需部署的中间件服务名称,字段支持数组,支持多个中间件服务同时部署
- redis:`redis` - redis:`redis`
- mysql:`mysql` - mysql:`mysql`
...@@ -37,10 +43,16 @@ ...@@ -37,10 +43,16 @@
- 1:部署失败,使用`log "ERROR"`打印错误日志,使用`return 1`退出当前函数部署操作 - 1:部署失败,使用`log "ERROR"`打印错误日志,使用`return 1`退出当前函数部署操作
- 执行时机: - 执行时机:
- 暂时先跟在docker_x86之后再执行 - 主脚本调用当前auto_middleware_install.sh,传入参数`$middleware_type`
#### 脚本设计要求 #### 脚本设计要求
- **函数调用顺序**
1. `install_middleware()`函数开始时,首先初始化`sudoset``SUDO`变量
2. 然后调用`docker_x86()`函数部署Docker环境
3. 检查`docker_x86()`返回值,失败则返回1
4. 解析`middleware_type`参数,部署指定中间件
- 主入口函数: - 主入口函数:
-`auto_middleware_install.sh`中增加主入口函数`install_middleware()` -`auto_middleware_install.sh`中增加主入口函数`install_middleware()`
- 主入口函数负责: - 主入口函数负责:
......
#==============================================================#
# 函数名: docker_x86
# 功能: 检查并安装 Docker(x86_64 离线安装)
# 说明: 用于在无网络或受限环境中自动部署 Docker 引擎
# 若 Docker 已安装则跳过;否则从本地 tar 包离线安装
# 安装内容包括:
# - 解压 docker 二进制文件到 /usr/bin
# - 配置 systemd 服务文件
# - 启动并设置开机自启
# 作者: [ubains]
# 日期: $(date +%Y-%m-%d)
#--------------------------------------------------------------#
# 参数: 无
# 返回: 0: 成功(已安装或跳过)
# 1: 安装失败
#--------------------------------------------------------------#
# 依赖: tar, systemctl, sudo(通过 $sudoset)
# 注意: 请确保以下资源已提前上传:
# - /data/temp/docker-20.10.7.tgz
# - /data/temp/docker.service
#==============================================================#
function docker_x86() {
log "INFO" "=================================================================="
log "INFO" "开始检查并安装 Docker (x86_64 离线模式)"
log "INFO" "=================================================================="
# ------------------- 定义变量 -------------------
local docker_version="29.1.3"
local temp_dir="/data/temp"
local tar_file="${temp_dir}/docker-${docker_version}.tgz"
local service_file="${temp_dir}/docker.service"
local docker_bin="/usr/bin/docker"
# ------------------- 检查 Docker 是否已安装 -------------------
log "INFO" "🔍 正在检查 Docker 是否已安装..."
if command -v docker >/dev/null 2>&1; then
local version=$(docker --version 2>&1)
log "INFO" "✅ Docker 已安装: $version"
log "INFO" "💡 若需重装,请先手动卸载。"
return 0
else
log "WARN" "❌ Docker 未安装,准备从离线包安装..."
fi
# ------------------- 检查依赖和文件是否存在 -------------------
log "INFO" "🔧 检查安装依赖和文件..."
if [[ ! -f "$tar_file" ]]; then
log "ERROR" "⛔ Docker 离线包不存在: $tar_file"
log "ERROR" "请将 docker-${docker_version}.tgz 上传至 $temp_dir 目录"
return 1
fi
if [[ ! -f "$service_file" ]]; then
log "ERROR" "⛔ Docker systemd 服务文件不存在: $service_file"
log "ERROR" "请将 docker.service 配置文件上传至 $temp_dir 目录"
return 1
fi
# ------------------- 开始安装 Docker -------------------
log "INFO" "📥 开始解压 Docker ${docker_version} ..."
if $sudoset tar -xzf "$tar_file" -C "$temp_dir"; then
log "INFO" "✅ 解压成功"
else
log "ERROR" "⛔ 解压失败,请检查压缩包完整性"
return 1
fi
log "INFO" "📦 安装 Docker 二进制文件到 /usr/bin/ ..."
if $sudoset cp "$temp_dir/docker"/* /usr/bin/ && $sudoset chmod +x /usr/bin/docker*; then
log "INFO" "✅ Docker 核心命令安装完成"
else
log "ERROR" "⛔ Docker 二进制文件复制失败"
return 1
fi
# ------------------- 配置 systemd 服务 -------------------
log "INFO" "⚙️ 配置 Docker systemd 服务 ..."
$sudoset rm -f /etc/systemd/system/docker.service
if $sudoset cp "$service_file" /etc/systemd/system/docker.service; then
$sudoset chmod 644 /etc/systemd/system/docker.service
log "INFO" "✅ 服务文件已部署"
else
log "ERROR" "⛔ 服务文件复制失败"
return 1
fi
# ------------------- 启动 Docker 服务 -------------------
log "INFO" "🚀 正在启动 Docker 服务 ..."
$sudoset systemctl daemon-reload
if $sudoset systemctl start docker; then
log "INFO" "✅ Docker 服务启动成功"
else
log "ERROR" "⛔ Docker 启动失败,请检查日志: journalctl -u docker"
return 1
fi
if $sudoset systemctl enable docker.service; then
log "INFO" "✅ Docker 已设置为开机自启"
else
log "WARN" "⚠️ 设置开机自启失败,可能影响后续使用"
fi
# ------------------- 验证安装 -------------------
log "INFO" "🔍 验证 Docker 安装结果..."
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
log "INFO" "🎉 Docker 安装并启动成功!版本信息:"
docker --version
return 0
else
log "ERROR" "⛔ Docker 安装后验证失败,请手动排查"
return 1
fi
}
# java容器部署 # java容器部署
function java_x86() function java_x86()
......
#==============================================================#
# 函数名: docker_x86
# 功能: 检查并安装 Docker(x86_64 离线安装)
# 说明: 用于在无网络或受限环境中自动部署 Docker 引擎
# 若 Docker 已安装则跳过;否则从本地 tar 包离线安装
# 安装内容包括:
# - 解压 docker 二进制文件到 /usr/bin
# - 配置 systemd 服务文件
# - 启动并设置开机自启
# 作者: [ubains]
# 日期: $(date +%Y-%m-%d)
#--------------------------------------------------------------#
# 参数: 无
# 返回: 0: 成功(已安装或跳过)
# 1: 安装失败
#--------------------------------------------------------------#
# 依赖: tar, systemctl, sudo(通过 $sudoset)
# 注意: 请确保以下资源已提前上传:
# - /data/temp/docker-20.10.7.tgz
# - /data/temp/docker.service
#==============================================================#
function docker_x86() {
log "INFO" "=================================================================="
log "INFO" "开始检查并安装 Docker (x86_64 离线模式)"
log "INFO" "=================================================================="
# ------------------- 定义变量 -------------------
local docker_version="20.10.7"
local temp_dir="/data/temp"
local tar_file="${temp_dir}/docker-${docker_version}.tgz"
local service_file="${temp_dir}/docker.service"
local docker_bin="/usr/bin/docker"
# ------------------- 检查 Docker 是否已安装 -------------------
log "INFO" "🔍 正在检查 Docker 是否已安装..."
if command -v docker >/dev/null 2>&1; then
local version=$(docker --version 2>&1)
log "INFO" "✅ Docker 已安装: $version"
log "INFO" "💡 若需重装,请先手动卸载。"
return 0
else
log "WARN" "❌ Docker 未安装,准备从离线包安装..."
fi
# ------------------- 检查依赖和文件是否存在 -------------------
log "INFO" "🔧 检查安装依赖和文件..."
if [[ ! -f "$tar_file" ]]; then
log "ERROR" "⛔ Docker 离线包不存在: $tar_file"
log "ERROR" "请将 docker-${docker_version}.tgz 上传至 $temp_dir 目录"
return 1
fi
if [[ ! -f "$service_file" ]]; then
log "ERROR" "⛔ Docker systemd 服务文件不存在: $service_file"
log "ERROR" "请将 docker.service 配置文件上传至 $temp_dir 目录"
return 1
fi
# ------------------- 开始安装 Docker -------------------
log "INFO" "📥 开始解压 Docker ${docker_version} ..."
if $sudoset tar -xzf "$tar_file" -C "$temp_dir"; then
log "INFO" "✅ 解压成功"
else
log "ERROR" "⛔ 解压失败,请检查压缩包完整性"
return 1
fi
log "INFO" "📦 安装 Docker 二进制文件到 /usr/bin/ ..."
if $sudoset cp "$temp_dir/docker"/* /usr/bin/ && $sudoset chmod +x /usr/bin/docker*; then
log "INFO" "✅ Docker 核心命令安装完成"
else
log "ERROR" "⛔ Docker 二进制文件复制失败"
return 1
fi
# ------------------- 配置 systemd 服务 -------------------
log "INFO" "⚙️ 配置 Docker systemd 服务 ..."
$sudoset rm -f /etc/systemd/system/docker.service
if $sudoset cp "$service_file" /etc/systemd/system/docker.service; then
$sudoset chmod 644 /etc/systemd/system/docker.service
log "INFO" "✅ 服务文件已部署"
else
log "ERROR" "⛔ 服务文件复制失败"
return 1
fi
# ------------------- 启动 Docker 服务 -------------------
log "INFO" "🚀 正在启动 Docker 服务 ..."
$sudoset systemctl daemon-reload
if $sudoset systemctl start docker; then
log "INFO" "✅ Docker 服务启动成功"
else
log "ERROR" "⛔ Docker 启动失败,请检查日志: journalctl -u docker"
return 1
fi
if $sudoset systemctl enable docker.service; then
log "INFO" "✅ Docker 已设置为开机自启"
else
log "WARN" "⚠️ 设置开机自启失败,可能影响后续使用"
fi
# ------------------- 验证安装 -------------------
log "INFO" "🔍 验证 Docker 安装结果..."
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
log "INFO" "🎉 Docker 安装并启动成功!版本信息:"
docker --version
return 0
else
log "ERROR" "⛔ Docker 安装后验证失败,请手动排查"
return 1
fi
}
#==============================================================# #==============================================================#
# 函数名: mysql_x86 # 函数名: mysql_x86
# 功能: 部署基于 Docker 的 MySQL 服务(x86 架构) # 功能: 部署基于 Docker 的 MySQL 服务(x86 架构)
...@@ -944,6 +1063,17 @@ install_middleware() { ...@@ -944,6 +1063,17 @@ install_middleware() {
log "INFO" "服务器IP地址: $server_ip" log "INFO" "服务器IP地址: $server_ip"
fi fi
# ------------------- 优先部署Docker环境 -------------------
# Docker是所有中间件的基础,必须无条件优先部署
log "INFO" "----------------------------------------"
log "INFO" "优先部署Docker环境"
if docker_x86; then
log "INFO" "✅ Docker环境部署成功"
else
log "ERROR" "❌ Docker环境部署失败,停止中间件部署"
return 1
fi
# ------------------- 解析参数 ------------------- # ------------------- 解析参数 -------------------
local middlewares="${middleware_type:-}" local middlewares="${middleware_type:-}"
if [[ -z "$middlewares" ]]; then if [[ -z "$middlewares" ]]; then
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论