Files
whatsapp/docker/maintenance/scripts/run-migrations.sh
T
2026-02-03 21:30:55 -05:00

49 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Script para ejecutar migraciones de base de datos
# Se ejecuta automáticamente al iniciar el contenedor de mantenimiento
LOG_FILE="/var/log/cron/migrations.log"
MIGRATIONS_DIR="/var/www/html/database"
MIGRATIONS_APPLIED="/var/www/html/logs/.migrations_applied"
echo "========================================" | tee -a "$LOG_FILE"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando migraciones..." | tee -a "$LOG_FILE"
echo "========================================" | tee -a "$LOG_FILE"
# Crear archivo de control si no existe
touch "$MIGRATIONS_APPLIED"
# Verificar conexión a BD
if ! mariadb-admin ping -h "${DB_HOST}" -u "${DB_USER}" --password="${DB_PASS}" --silent 2>/dev/null; then
echo "[ERROR] No se pudo conectar a la base de datos" | tee -a "$LOG_FILE"
exit 1
fi
# Ejecutar cada archivo .sql en orden alfabético
for migration_file in $(ls -1 "$MIGRATIONS_DIR"/*.sql 2>/dev/null | sort); do
filename=$(basename "$migration_file")
# Verificar si ya fue aplicada
if grep -q "^${filename}$" "$MIGRATIONS_APPLIED" 2>/dev/null; then
echo "[SKIP] $filename - Ya aplicada" | tee -a "$LOG_FILE"
continue
fi
echo "[RUN] Ejecutando migración: $filename" | tee -a "$LOG_FILE"
# Ejecutar la migración
if mysql -h "${DB_HOST}" -u "${DB_USER}" --password="${DB_PASS}" "${DB_NAME}" < "$migration_file" 2>&1 | tee -a "$LOG_FILE"; then
echo "[OK] $filename - Aplicada correctamente" | tee -a "$LOG_FILE"
# Marcar como aplicada
echo "$filename" >> "$MIGRATIONS_APPLIED"
else
echo "[ERROR] $filename - Falló la migración" | tee -a "$LOG_FILE"
exit 1
fi
done
echo "========================================" | tee -a "$LOG_FILE"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Migraciones completadas" | tee -a "$LOG_FILE"
echo "========================================" | tee -a "$LOG_FILE"