diff --git a/backup_hazard.sh b/backup_hazard.sh index 70626a3..2b19027 100755 --- a/backup_hazard.sh +++ b/backup_hazard.sh @@ -2,7 +2,7 @@ # ============================================================= # BACKUP SCRIPT PARA HAZARD (Odoo 16 en Docker) -# Respalda: Base de datos PostgreSQL + Código del módulo +# Respalda: Base de datos PostgreSQL + Módulos Enterprise + Módulos Custom + Config # Frecuencia: Cada 12 horas (cron) # Retención local: 15 días # Nota: Plesk sube estos archivos a Google Drive automáticamente @@ -15,7 +15,12 @@ set -euo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" BACKUP_NAME="backup_hazard_$(date +%Y%m%d_%H%M%S)" BACKUP_DIR="$SCRIPT_DIR/backups" -MODULE_PATH="$SCRIPT_DIR/Addons/custom/hazard_shopify" +CUSTOM_ADDONS_PATH="$SCRIPT_DIR/Addons/custom" +ENTERPRISE_ADDONS_PATH="$SCRIPT_DIR/Addons/enterprise" +CONF_PATH="$SCRIPT_DIR/Conf" +DOCKER_COMPOSE="$SCRIPT_DIR/docker-compose.yml" +DOCKERFILE="$SCRIPT_DIR/Dockerfile" +AGENTS_PATH="$SCRIPT_DIR/.agents" DB_CONTAINER="odoo-16-db-hazard-new" ODOO_CONTAINER="odoo-16-hazard-new" DB_NAME="hazard_new" @@ -31,7 +36,9 @@ log() { cleanup_on_exit() { rm -f "$LOCK_FILE" - rm -f "$BACKUP_DIR/code_$BACKUP_NAME.tar.gz" 2>/dev/null + rm -f "$BACKUP_DIR/custom_$BACKUP_NAME.tar.gz" 2>/dev/null + rm -f "$BACKUP_DIR/enterprise_$BACKUP_NAME.tar.gz" 2>/dev/null + rm -f "$BACKUP_DIR/config_$BACKUP_NAME.tar.gz" 2>/dev/null rm -f "$BACKUP_DIR/db_$BACKUP_NAME.sql" 2>/dev/null } @@ -66,16 +73,38 @@ if ! docker ps --format '{{.Names}}' | grep -q "^${ODOO_CONTAINER}$"; then log "⚠️ [$(date '+%Y-%m-%d %H:%M:%S')] ADVERTENCIA: Contenedor $ODOO_CONTAINER no está corriendo. Continuando solo con DB..." fi -# --- 1. RESPALDAR CÓDIGO DEL MÓDULO --- -log "📦 Comprimiendo código del módulo..." -if [ -d "$MODULE_PATH" ]; then - tar -czf "$BACKUP_DIR/code_$BACKUP_NAME.tar.gz" -C "$(dirname "$MODULE_PATH")" "$(basename "$MODULE_PATH")" - CODE_SIZE=$(du -sh "$BACKUP_DIR/code_$BACKUP_NAME.tar.gz" | cut -f1) - log " ✓ Código comprimido: $CODE_SIZE" +# --- 1. RESPALDAR MÓDULOS CUSTOM --- +log "📦 Comprimiendo módulos custom..." +if [ -d "$CUSTOM_ADDONS_PATH" ]; then + tar -czf "$BACKUP_DIR/custom_$BACKUP_NAME.tar.gz" -C "$(dirname "$CUSTOM_ADDONS_PATH")" "$(basename "$CUSTOM_ADDONS_PATH")" + CUSTOM_SIZE=$(du -sh "$BACKUP_DIR/custom_$BACKUP_NAME.tar.gz" | cut -f1) + log " ✓ Módulos custom comprimidos: $CUSTOM_SIZE" else - log "⚠️ ADVERTENCIA: Ruta del módulo no encontrada: $MODULE_PATH" + log "⚠️ ADVERTENCIA: Ruta de módulos custom no encontrada: $CUSTOM_ADDONS_PATH" fi +# --- 1b. RESPALDAR MÓDULOS ENTERPRISE --- +log "📦 Comprimiendo módulos Enterprise (esto puede tardar)..." +if [ -d "$ENTERPRISE_ADDONS_PATH" ]; then + tar -czf "$BACKUP_DIR/enterprise_$BACKUP_NAME.tar.gz" -C "$(dirname "$ENTERPRISE_ADDONS_PATH")" "$(basename "$ENTERPRISE_ADDONS_PATH")" + ENT_SIZE=$(du -sh "$BACKUP_DIR/enterprise_$BACKUP_NAME.tar.gz" | cut -f1) + log " ✓ Módulos Enterprise comprimidos: $ENT_SIZE" +else + log "⚠️ ADVERTENCIA: Ruta de módulos Enterprise no encontrada: $ENTERPRISE_ADDONS_PATH" +fi + +# --- 1c. RESPALDAR CONFIGURACIÓN (Docker + Odoo + Agents) --- +log "📦 Comprimiendo configuración del proyecto..." +tar -czf "$BACKUP_DIR/config_$BACKUP_NAME.tar.gz" \ + -C "$SCRIPT_DIR" \ + "$(basename "$CONF_PATH")" \ + "$(basename "$DOCKER_COMPOSE")" \ + "$(basename "$DOCKERFILE")" \ + "$(basename "$AGENTS_PATH")" \ + 2>/dev/null +CONF_SIZE=$(du -sh "$BACKUP_DIR/config_$BACKUP_NAME.tar.gz" | cut -f1) +log " ✓ Configuración comprimida: $CONF_SIZE" + # --- 2. RESPALDAR BASE DE DATOS (SQL Dump) --- log "🗄️ Extrayendo base de datos desde el contenedor Docker..." if docker exec "$DB_CONTAINER" pg_dump -U "$DB_USER" "$DB_NAME" > "$BACKUP_DIR/db_$BACKUP_NAME.sql" 2>/dev/null; then @@ -94,7 +123,11 @@ fi # --- 4. EMPAQUETAR TODO --- log "🎁 Creando paquete comprimido final..." -tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" -C "$BACKUP_DIR" "code_$BACKUP_NAME.tar.gz" "db_$BACKUP_NAME.sql" +tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" -C "$BACKUP_DIR" \ + "custom_$BACKUP_NAME.tar.gz" \ + "enterprise_$BACKUP_NAME.tar.gz" \ + "config_$BACKUP_NAME.tar.gz" \ + "db_$BACKUP_NAME.sql" FINAL_SIZE=$(du -sh "$BACKUP_DIR/$BACKUP_NAME.tar.gz" | cut -f1) log " ✓ Paquete final: $FINAL_SIZE" @@ -109,7 +142,7 @@ else fi # Limpiar archivos temporales (también se limpian en trap EXIT) -rm -f "$BACKUP_DIR/code_$BACKUP_NAME.tar.gz" "$BACKUP_DIR/db_$BACKUP_NAME.sql" +rm -f "$BACKUP_DIR/custom_$BACKUP_NAME.tar.gz" "$BACKUP_DIR/enterprise_$BACKUP_NAME.tar.gz" "$BACKUP_DIR/config_$BACKUP_NAME.tar.gz" "$BACKUP_DIR/db_$BACKUP_NAME.sql" # --- 6. POLÍTICA DE RETENCIÓN --- log "🧹 Ejecutando política de retención (Limpiando archivos de más de $MAX_RETENTION_DAYS días)..."