187 lines
4.2 KiB
Bash
187 lines
4.2 KiB
Bash
#!/bin/bash
|
||
#
|
||
# Nginx及业务环境恢复脚本
|
||
# Author: AI Assistant
|
||
# Version: 1.0.0
|
||
# License: MIT
|
||
#
|
||
# 全局常量定义
|
||
readonly LOG_FILE="/root/wdd/ccc.log"
|
||
readonly NGINX_CONF_BACKUP="/etc/nginx/conf.d/real-proxy.conf_back"
|
||
readonly NGINX_CONF_LIVE="/etc/nginx/conf.d/real-proxy.conf"
|
||
readonly OFFLINE_CONF_LIVE="/etc/nginx/conf.d/offline.conf"
|
||
readonly OFFLINE_CONF_BACKUP="/etc/nginx/conf.d/offline.conf_back"
|
||
readonly HARBOR_COMPOSE_FILE="/root/wdd/harbor/docker-compose.yml"
|
||
readonly K8S_INGRESS_FILE="/root/wdd/install/k8s-ingress-nginx.yaml"
|
||
readonly K8S_DEPLOYMENT_FILE="/root/wdd/all-deployment-xakny.yaml"
|
||
|
||
# 依赖命令检查列表
|
||
readonly REQUIRED_COMMANDS=("systemctl" "docker-compose" "kubectl" "mv" "sleep")
|
||
|
||
# 初始化脚本执行环境
|
||
set -euo pipefail
|
||
trap 'log ERROR "脚本被中断"; exit 130' INT TERM
|
||
|
||
###
|
||
# 分级日志记录函数
|
||
# @param level string 日志级别(DEBUG/INFO/WARN/ERROR)
|
||
# @param message string 日志消息内容
|
||
# @return 无返回值
|
||
# @require 无外部依赖
|
||
###
|
||
log() {
|
||
local level="$1"
|
||
local message="$2"
|
||
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||
local log_entry="[${timestamp}] ${level}: ${message}"
|
||
|
||
# 输出到控制台和日志文件
|
||
echo "${log_entry}" | tee -a "${LOG_FILE}" >&2
|
||
}
|
||
|
||
###
|
||
# 检查命令依赖是否存在
|
||
# @param 无参数
|
||
# @return 0-检查通过 1-缺少依赖
|
||
# @require 无外部依赖
|
||
###
|
||
check_dependencies() {
|
||
for cmd in "${REQUIRED_COMMANDS[@]}"; do
|
||
if ! command -v "${cmd}" &> /dev/null; then
|
||
log ERROR "缺少必要命令: ${cmd}"
|
||
return 1
|
||
fi
|
||
done
|
||
log DEBUG "所有依赖命令检查通过"
|
||
return 0
|
||
}
|
||
|
||
###
|
||
# 恢复Nginx配置文件并重启服务
|
||
# @param 无参数
|
||
# @return 0-操作成功 1-操作失败
|
||
# @require systemctl, mv命令
|
||
###
|
||
restore_nginx() {
|
||
log INFO "开始恢复Nginx配置"
|
||
|
||
# > 恢复主配置文件
|
||
if ! mv "${NGINX_CONF_BACKUP}" "${NGINX_CONF_LIVE}"; then
|
||
log ERROR "恢复real-proxy.conf失败"
|
||
return 1
|
||
fi
|
||
log DEBUG "成功恢复real-proxy.conf"
|
||
|
||
# > 备份离线配置文件
|
||
if ! mv "${OFFLINE_CONF_LIVE}" "${OFFLINE_CONF_BACKUP}"; then
|
||
log WARN "备份offline.conf失败(可能文件不存在)"
|
||
else
|
||
log DEBUG "成功备份offline.conf"
|
||
fi
|
||
|
||
# > 重启Nginx服务
|
||
if ! systemctl restart nginx; then
|
||
log ERROR "Nginx服务重启失败"
|
||
return 1
|
||
fi
|
||
log INFO "Nginx服务重启成功"
|
||
return 0
|
||
}
|
||
|
||
###
|
||
# 启动Harbor容器服务
|
||
# @param 无参数
|
||
# @return 0-启动成功 1-启动失败
|
||
# @require docker-compose, sleep命令
|
||
###
|
||
start_harbor() {
|
||
log INFO "开始启动Harbor服务"
|
||
|
||
if ! docker-compose -f "${HARBOR_COMPOSE_FILE}" up -d; then
|
||
log ERROR "Harbor启动失败"
|
||
return 1
|
||
fi
|
||
|
||
log INFO "Harbor启动完成,等待30秒初始化..."
|
||
sleep 30
|
||
log DEBUG "Harbor初始化等待完成"
|
||
return 0
|
||
}
|
||
|
||
###
|
||
# 启用K8S Ingress暴露面
|
||
# @param 无参数
|
||
# @return 0-应用成功 1-应用失败
|
||
# @require kubectl命令
|
||
###
|
||
enable_ingress() {
|
||
log INFO "开始应用K8S Ingress配置"
|
||
|
||
if ! kubectl apply -f "${K8S_INGRESS_FILE}"; then
|
||
log ERROR "Ingress配置应用失败"
|
||
return 1
|
||
fi
|
||
|
||
log INFO "Ingress配置应用成功"
|
||
return 0
|
||
}
|
||
|
||
###
|
||
# 恢复业务Deployment配置
|
||
# @param 无参数
|
||
# @return 0-应用成功 1-应用失败
|
||
# @require kubectl命令
|
||
###
|
||
restore_business() {
|
||
log INFO "开始恢复业务Deployment"
|
||
|
||
if ! kubectl apply -f "${K8S_DEPLOYMENT_FILE}"; then
|
||
log ERROR "业务Deployment应用失败"
|
||
return 1
|
||
fi
|
||
|
||
log INFO "业务Deployment恢复成功"
|
||
return 0
|
||
}
|
||
|
||
###
|
||
# 主执行函数
|
||
# @param 无参数
|
||
# @return 0-全部成功 1-任意步骤失败
|
||
# @require 所有子函数依赖
|
||
###
|
||
main() {
|
||
log INFO "===== 开始执行环境恢复脚本 ====="
|
||
|
||
# > 检查命令依赖
|
||
if ! check_dependencies; then
|
||
log ERROR "依赖检查失败,脚本终止"
|
||
return 1
|
||
fi
|
||
|
||
# 函数执行序列
|
||
local steps=(
|
||
restore_nginx
|
||
start_harbor
|
||
enable_ingress
|
||
restore_business
|
||
)
|
||
|
||
for step in "${steps[@]}"; do
|
||
if ! ${step}; then
|
||
log ERROR "执行步骤 ${step} 失败"
|
||
return 1
|
||
fi
|
||
done
|
||
|
||
log INFO "===== 环境恢复脚本执行完成 ====="
|
||
return 0
|
||
}
|
||
|
||
# 执行主函数并捕获退出状态
|
||
if main; then
|
||
exit 0
|
||
else
|
||
exit 1
|
||
fi
|