up
This commit is contained in:
+52
@@ -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"
|
||||
Executable
+44
@@ -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"
|
||||
Executable
+54
@@ -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"
|
||||
Executable
+48
@@ -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"
|
||||
Reference in New Issue
Block a user