#!/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