This commit is contained in:
Lizandro Guarnizo
2026-02-03 21:30:55 -05:00
parent 44423adb32
commit 1aae148396
89 changed files with 8581 additions and 7687 deletions
+52
View File
@@ -0,0 +1,52 @@
#!/bin/bash
# Script de backup diario de base de datos
# Ejecuta a las 2:00 AM
set -e
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Iniciando backup de base de datos..."
# Variables de entorno
DB_HOST=${DB_HOST:-mysql}
DB_NAME=${DB_NAME:-usite_whatsapp_bot}
DB_USER=${DB_USER:-usite_whatsapp_user}
DB_PASS=${DB_PASS}
# Directorio de backups
BACKUP_DIR="/backups/database"
mkdir -p "$BACKUP_DIR"
# Nombre del archivo con timestamp
BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql.gz"
# Ejecutar backup comprimido
if mariadb-dump \
--host="$DB_HOST" \
--user="$DB_USER" \
--password="$DB_PASS" \
--single-transaction \
--routines \
--triggers \
--events \
"$DB_NAME" | gzip > "$BACKUP_FILE"; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ Backup creado exitosamente: $BACKUP_FILE"
# Obtener tamaño del backup
SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Tamaño del backup: $SIZE"
# Eliminar backups antiguos (más de 7 días)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Limpiando backups antiguos..."
find "$BACKUP_DIR" -name "backup_*.sql.gz" -type f -mtime +7 -delete
# Contar backups restantes
BACKUP_COUNT=$(find "$BACKUP_DIR" -name "backup_*.sql.gz" -type f | wc -l)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backups disponibles: $BACKUP_COUNT"
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ Error al crear backup"
exit 1
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup completado"
+44
View File
@@ -0,0 +1,44 @@
#!/bin/bash
# Script de limpieza de logs
# Ejecuta a las 3:00 AM
set -e
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Iniciando limpieza de logs..."
# Directorio de logs
LOGS_DIR="/var/www/html/logs"
if [ ! -d "$LOGS_DIR" ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Directorio de logs no encontrado: $LOGS_DIR"
exit 0
fi
# Contar archivos antes de limpiar
BEFORE_COUNT=$(find "$LOGS_DIR" -name "*.log" -type f | wc -l)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Archivos de log encontrados: $BEFORE_COUNT"
# Eliminar logs más antiguos de 30 días
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Eliminando logs antiguos (>30 días)..."
find "$LOGS_DIR" -name "*.log" -type f -mtime +30 -delete
# Comprimir logs entre 7-30 días
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Comprimiendo logs antiguos (7-30 días)..."
find "$LOGS_DIR" -name "*.log" -type f -mtime +7 -mtime -30 -exec gzip {} \; 2>/dev/null || true
# Limpiar logs .gz más antiguos de 30 días
find "$LOGS_DIR" -name "*.log.gz" -type f -mtime +30 -delete
# Contar archivos después de limpiar
AFTER_COUNT=$(find "$LOGS_DIR" -name "*.log" -o -name "*.log.gz" -type f | wc -l)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Archivos de log restantes: $AFTER_COUNT"
# Calcular espacio liberado
SPACE_USED=$(du -sh "$LOGS_DIR" | cut -f1)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Espacio usado por logs: $SPACE_USED"
# Truncar logs muy grandes (>100MB)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Truncando logs muy grandes..."
find "$LOGS_DIR" -name "*.log" -type f -size +100M -exec sh -c 'echo "Log truncado el $(date)" > "$1"' _ {} \;
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ Limpieza de logs completada"
+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
# Script de verificación de salud del sistema
# Ejecuta cada hora
set -e
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando salud del sistema..."
# URLs a verificar
APP_URL=${APP_URL:-http://app/health.php}
REDIS_HOST=${REDIS_HOST:-redis}
# 1. Verificar aplicación web
echo -n "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando aplicación web... "
if curl -s -f "$APP_URL" > /dev/null 2>&1; then
echo "✅ OK"
else
echo "❌ FALLO"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ La aplicación web no responde"
fi
# 2. Verificar base de datos
echo -n "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando base de datos... "
if mariadb-admin ping -h "${DB_HOST:-mysql}" -u "${DB_USER}" --password="${DB_PASS}" --silent > /dev/null 2>&1; then
echo "✅ OK"
else
echo "❌ FALLO"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ La base de datos no responde"
fi
# 3. Verificar Redis
echo -n "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando Redis... "
if echo "PING" | nc -w 2 "$REDIS_HOST" 6379 | grep -q PONG 2>/dev/null; then
echo "✅ OK"
else
echo "❌ FALLO"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Redis no responde"
fi
# 4. Verificar espacio en disco
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando espacio en disco..."
df -h / | tail -1 | awk '{print "[" strftime("%Y-%m-%d %H:%M:%S") "] Espacio usado: " $5 " (" $3 " de " $2 ")"}'
# Advertencia si el espacio usado es mayor al 85%
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 85 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ ADVERTENCIA: Espacio en disco mayor al 85%"
fi
# 5. Verificar memoria
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Uso de memoria:"
free -h | grep -E "Mem|Swap" || echo "No disponible en este contenedor"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Verificación completada"
+48
View File
@@ -0,0 +1,48 @@
#!/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"