config.sh 6.62 KB
#!/bin/bash
# ============================================================================
# H5 项目多环境部署配置
# ============================================================================
#
# 说明:
#   - 每个环境对应一个配置段
#   - 部署时通过环境名称加载对应配置
#   - 支持命令行参数覆盖配置
#
# 使用方法:
#   source deploy/config.sh
#   ./deploy/deploy.sh <env1> [env2] ...
#
# 环境命名建议:
#   - dev: 开发环境
#   - test: 测试环境
#   - staging: 预发布环境
#   - prod: 生产环境
# ============================================================================

# ============================================================================
# 环境配置段
# ============================================================================

# ----- 开发环境配置 -----
deploy_config_dev() {
    # 项目名称(用于标识)
    export PROJECT_NAME="mlaj"

    # 服务器配置 - 使用 SSH alias
    export SERVER_HOST="ipadbiz-inner"
    export SERVER_USER=""  # SSH alias 已配置用户
    export SERVER_PORT=""  # SSH alias 已配置端口

    # 远程路径配置
    export REMOTE_BASE_DIR="/opt/space-dev/f"  # 远程基础目录
    export REMOTE_DEPLOY_DIR="${REMOTE_BASE_DIR}"  # 部署目录

    # 本地路径配置
    export BUILD_DIR="dist"                          # 构建产物目录
    export BUILD_ARCHIVE="${PROJECT_NAME}.tar.gz"  # 归档文件名(固定名称)

    # 构建命令
    export BUILD_COMMAND="pnpm build"

    # 备份配置(保留备份数量,0=不备份)
    export BACKUP_ENABLED="false"
    export BACKUP_MAX_COUNT="0"

    # 部署后操作
    export DEPLOY_CLEANUP="true"       # 是否清理部署归档
    export RESTART_SERVER="false"    # 是否重启服务器

    # 健康检查配置
    export HEALTH_CHECK_ENABLED="false"  # 是否启用健康检查
    export HEALTH_CHECK_URL=""         # 健康检查 URL
    export HEALTH_CHECK_TIMEOUT="10"  # 健康检查超时(秒)

    # 通知配置
    export NOTIFY_ENABLED="false"      # 是否发送通知
    export NOTIFY_WEBHOOK=""         # 通知 Webhook URL
}

# ----- OA 服务器配置(已有 oa_upload )-----
deploy_config_oa() {
    export PROJECT_NAME="mlaj"

    # 服务器配置 - 使用 SSH alias
    export SERVER_HOST="ipadbiz-inner"
    export SERVER_USER=""  # SSH alias 已配置用户
    export SERVER_PORT=""  # SSH alias 已配置端口

    # 远程路径配置
    export REMOTE_BASE_DIR="/opt/oa/f"  # 远程基础目录
    export REMOTE_DEPLOY_DIR="${REMOTE_BASE_DIR}"  # 部署目录

    # 本地路径配置
    export BUILD_DIR="dist"                          # 构建产物目录
    export BUILD_ARCHIVE="${PROJECT_NAME}.tar.gz"  # 归档文件名(固定名称)

    # 构建命令
    export BUILD_COMMAND="pnpm build"

    # 备份配置(保留备份数量,0=不备份)
    export BACKUP_ENABLED="false"
    export BACKUP_MAX_COUNT="0"

    # 部署后操作
    export DEPLOY_CLEANUP="true"       # 是否清理部署归档
    export RESTART_SERVER="false"    # 是否重启服务器

    # 健康检查配置
    export HEALTH_CHECK_ENABLED="false"  # 是否启用健康检查
    export HEALTH_CHECK_URL=""         # 健康检查 URL
    export HEALTH_CHECK_TIMEOUT="10"  # 健康检查超时(秒)

    # 通知配置
    export NOTIFY_ENABLED="false"      # 是否发送通知
    export NOTIFY_WEBHOOK=""         # 通知 Webhook URL
}

# ----- Behalo 服务器配置(已有 behalo_upload)-----
deploy_config_behalo() {
    export PROJECT_NAME="mlaj"

    # 服务器配置 - 使用 SSH alias
    export SERVER_HOST="ipadbiz-inner"
    export SERVER_USER=""  # SSH alias 已配置用户
    export SERVER_PORT=""  # SSH alias 已配置端口

    # 远程路径配置
    export REMOTE_BASE_DIR="/opt/behalo/f"  # 远程基础目录
    export REMOTE_DEPLOY_DIR="${REMOTE_BASE_DIR}"  # 部署目录

    # 本地路径配置
    export BUILD_DIR="dist"                          # 构建产物目录
    export BUILD_ARCHIVE="${PROJECT_NAME}.tar.gz"  # 归档文件名(固定名称)

    # 构建命令
    export BUILD_COMMAND="pnpm build"

    # 备份配置(保留备份数量,0=不备份)
    export BACKUP_ENABLED="false"
    export BACKUP_MAX_COUNT="0"

    # 部署后操作
    export DEPLOY_CLEANUP="true"       # 是否清理部署归档
    export RESTART_SERVER="false"    # 是否重启服务器

    # 健康检查配置
    export HEALTH_CHECK_ENABLED="false"  # 是否启用健康检查
    export HEALTH_CHECK_URL=""         # 健康检查 URL
    export HEALTH_CHECK_TIMEOUT="10"  # 健康检查超时(秒)

    # 通知配置
    export NOTIFY_ENABLED="false"      # 是否发送通知
    export NOTIFY_WEBHOOK=""         # 通知 Webhook URL
}

# ============================================================================
# 辅助函数
# ============================================================================

# 打印带颜色的消息
log_info() {
    echo -e "\033[0;32m[INFO]\033[0m $@"
}

log_success() {
    echo -e "\033[0;32m[SUCCESS]\033[0m $@"
}

log_warning() {
    echo -e "\033[0;33m[WARNING]\033[0m $@"
}

log_error() {
    echo -e "\033[0;31m[ERROR]\033[0m $@"
}

# 打印分隔线
print_separator() {
    echo "================================================================================"
}

# 加载环境配置
# 参数: $1 - 环境名称
load_env_config() {
    local env_name="$1"

    case "$env_name" in
        dev)
            deploy_config_dev
            ;;
        oa)
            deploy_config_oa
            ;;
        behalo)
            deploy_config_behalo
            ;;
        *)
            log_error "未知环境: $env_name"
            log_info "可用环境: dev, oa, behalo"
            exit 1
            ;;
    esac
}

# ============================================================================
# 验证配置
# ============================================================================

validate_config() {
    log_info "验证配置..."

    # 检查必需变量
    required_vars=(
        "PROJECT_NAME"
        "SERVER_HOST"
        "SERVER_USER"
        "REMOTE_DEPLOY_DIR"
        "BUILD_DIR"
        "BUILD_ARCHIVE"
    )

    for var in "${required_vars[@]}"; do
        if [ -z "${!var}" ]; then
            log_error "缺少必需配置: $var"
            exit 1
        fi
    done

    # 检查本地构建目录
    if [ ! -d "$BUILD_DIR" ]; then
        log_error "构建目录不存在: $BUILD_DIR"
        log_info "请先运行: $BUILD_COMMAND"
        exit 1
    fi

    log_success "配置验证通过"
}

# 导出主函数供 deploy.sh 使用
export load_env_config
export validate_config