Saltar al contenido principal

Capítulo 12.1 - Administración en producción

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Aplicar las mejores prácticas de producción
  • Configurar el mantenimiento del sistema
  • Gestionar las actualizaciones
  • Implementar alta disponibilidad
  • Documentar los procedimientos
  • Crear runbooks

Mejores Prácticas de Producción​

Seguridad​

# 1. Usuarios y permisos
# - Menor privilegio
# - Sin root directo
# - sudo configurado

# 2. Firewall
# - Reglas restrictivas
# - Solo puertos necesarios
# - Monitoreo de conexiones

# 3. Actualizaciones
# - Regulares
# - Probadas en staging
# - Planificadas

# 4. Monitoreo
# - Supervisión continua
# - Alertas configuradas
# - Logs centralizados

Rendimiento​

# 1. Recursos
# - Monitoreo CPU, RAM, disco
# - Alertas de umbral
# - Escalado planificado

# 2. Optimización
# - Solo servicios necesarios
# - Caché configurado
# - Compresión activada

# 3. Mantenimiento
# - Limpieza regular
# - Rotación de logs
# - Archivado de datos

Mantenimiento del Sistema​

Planificación​

# Ventana de mantenimiento
# - Horas de baja actividad
# - Comunicación con el equipo
# - Rollback planificado

# Checklist de mantenimiento
# 1. Backup antes
# 2. Pruebas en staging
# 3. Notificación a usuarios
# 4. Ejecución del mantenimiento
# 5. Verificación post-mantenimiento
# 6. Documentación de cambios

Scripts de Mantenimiento​

#!/bin/bash
# Script de mantenimiento semanal

LOG="/var/log/maintenance-$(date +%Y%m%d).log"

{
echo "=== Mantenimiento $(date) ==="

# Actualización del sistema
echo "Actualización de paquetes..."
apt update && apt upgrade -y

# Limpieza
echo "Limpieza..."
apt autoremove -y
apt autoclean

# Rotación de logs
echo "Rotación de logs..."
logrotate -f /etc/logrotate.conf

# Limpieza de logs antiguos
echo "Limpieza de logs antiguos..."
find /var/log -name "*.log" -mtime +30 -delete

# Verificación de espacio en disco
echo "Espacio en disco:"
df -h

echo "=== Fin de mantenimiento ==="
} | tee "$LOG"

Estrategias de Backup​

Tipos de Backup​

# 1. Full (Completo)
# - Todos los datos
# - Lento, mucho espacio
# - Restauración rápida

# 2. Incremental (Incremental)
# - Solo cambios
# - Rápido, poco espacio
# - Restauración más lenta

# 3. Differential (Diferencial)
# - Desde el último full
# - Equilibrio tiempo/espacio

Script de Backup​

#!/bin/bash
# Backup automático

BACKUP_DIR="/backup"
SOURCE_DIR="/data"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup-$DATE.tar.gz"

# Crear backup
tar -czf "$BACKUP_FILE" "$SOURCE_DIR"

# Verificar
if [ $? -eq 0 ]; then
echo "Backup exitoso: $BACKUP_FILE"

# Eliminar backups > 7 días
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +7 -delete
else
echo "ERROR: Fallo en backup" | mail -s "Alerta Backup" admin@example.com
exit 1
fi

Backup con Cron​

# Crontab
# Backup diario a las 2h
0 2 * * * /usr/local/bin/backup.sh

# Backup semanal completo
0 1 * * 0 /usr/local/bin/backup-full.sh

Alta Disponibilidad​

Redundancia​

# 1. Múltiples servidores
# - Load balancing
# - Failover automático
# - Replicación de datos

# 2. Monitoreo
# - Health checks
# - Detección de fallos
# - Conmutación automática

# 3. Backup
# - Múltiples copias
# - Sitios diferentes
# - Pruebas de restauración

Health Checks​

#!/bin/bash
# Health check servidor

CHECKS_FAILED=0

# Verificar servicios
for service in nginx mysql redis; do
if ! systemctl is-active --quiet "$service"; then
echo "ERROR: $service inactivo"
CHECKS_FAILED=$((CHECKS_FAILED + 1))
fi
done

# Verificar espacio en disco
DISK=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK" -gt 90 ]; then
echo "ERROR: Disco al ${DISK}%"
CHECKS_FAILED=$((CHECKS_FAILED + 1))
fi

# Alerta si hay problema
if [ "$CHECKS_FAILED" -gt 0 ]; then
echo "ALERTA: $CHECKS_FAILED check(s) fallido(s)" | \
mail -s "Alerta Health Check" admin@example.com
exit 1
fi

Documentación​

Runbooks​

Procedimientos operativos:

# Runbook: Reinicio de Servicio

## Objetivo
Reiniciar un servicio en producción

## Prerrequisitos
- Acceso SSH
- Permisos sudo

## Procedimiento
1. Verificar estado actual
systemctl status service-name

2. Notificar al equipo
# Slack/Email

3. Reiniciar
sudo systemctl restart service-name

4. Verificar
systemctl status service-name
journalctl -u service-name -n 50

5. Documentar
# Log de incidente

Documentación del Sistema​

# Archivos a documentar:
# - Configuración de servicios
# - Procedimientos de mantenimiento
# - Contactos del equipo
# - Contraseñas (gestionadas de forma segura)
# - Arquitectura del sistema

Automatización​

Scripts de Automatización​

#!/bin/bash
# Automatización de tareas de producción

# 1. Monitoreo
/usr/local/bin/monitor.sh

# 2. Backup
/usr/local/bin/backup.sh

# 3. Limpieza
/usr/local/bin/cleanup.sh

# 4. Reportes
/usr/local/bin/report.sh

Cron Producción​

# /etc/cron.d/production
# Monitoreo cada 5 minutos
*/5 * * * * root /usr/local/bin/monitor.sh

# Backup diario
0 2 * * * root /usr/local/bin/backup.sh

# Limpieza semanal
0 3 * * 0 root /usr/local/bin/cleanup.sh

# Reporte diario
0 8 * * * root /usr/local/bin/report.sh

Resumen​

En este capítulo, usted ha aprendido:

Mejores prácticas: Seguridad, rendimiento, mantenimiento
Mantenimiento: Planificación, scripts, procedimientos
Backup: Estrategias, scripts, automatización
HA: Redundancia, health checks, failover
Documentación: Runbooks, procedimientos
Automatización: Scripts, cron producción


Próximos Pasos​

Capítulo 12.2: Performance Tuning
Capítulo 12.3: Automatización Completa


Capítulo creado el: Diciembre 2024