Saltar al contenido principal

11. Integración y Automatización

Introducción a la Automatización con Bash

  • Automatización de tareas repetitivas: Uso de scripts Bash para automatizar procesos que se ejecutan frecuentemente.
    • Ejemplo:
      #!/bin/bash
      # Script para respaldar archivos importantes
      tar -czvf respaldo.tar.gz /ruta/a/respaldo

Cron y Crontab

  • Cron: Herramienta para programar la ejecución de comandos en intervalos regulares.
    • Sintaxis de crontab:

      * * * * * comando

      Donde cada asterisco representa:

      • Minuto (0 - 59)
      • Hora (0 - 23)
      • Día del mes (1 - 31)
      • Mes (1 - 12)
      • Día de la semana (0 - 6) (0 es domingo)
    • Ejemplo de crontab para ejecutar un script diariamente a las 2 AM:

      0 2 * * * /ruta/a/tu_script.sh
    • Comandos útiles:

      • crontab -e: Editar el archivo crontab.
      • crontab -l: Listar tareas programadas en el crontab.
      • crontab -r: Eliminar el archivo crontab.
    • Ejemplo de crontab para ejecutar un script cada lunes a las 8 AM:

      0 8 * * 1 /ruta/a/tu_script.sh

Interacción con otros Servicios y Herramientas

  • Interacción con APIs: Uso de curl para interactuar con APIs RESTful desde un script Bash.

    • Ejemplo:
      #!/bin/bash
      # Script para obtener datos de una API y guardarlos en un archivo
      curl -s "https://api.ejemplo.com/datos" > datos.json
  • Envío de correos electrónicos: Uso de mail para enviar correos electrónicos desde un script Bash.

    • Instalación de mail:
      sudo apt-get install mailutils
    • Ejemplo:
      #!/bin/bash
      # Script para enviar un correo electrónico
      echo "Este es el cuerpo del correo" | mail -s "Asunto del correo" destinatario@ejemplo.com

Automatización de Despliegues y Tareas Comunes

Contexto de Despliegue de Aplicaciones Web

Imagina que trabajas en una empresa que tiene una aplicación web basada en un stack LAMP (Linux, Apache, MySQL, PHP). Cada vez que hay una nueva versión del código, debes desplegarla en el servidor de producción. Normalmente, este proceso incluye tareas como:

  1. Detener el servidor web para evitar inconsistencias mientras se despliega la nueva versión.
  2. Hacer una copia de seguridad de los archivos actuales y la base de datos.
  3. Obtener la última versión del código desde el repositorio.
  4. Instalar dependencias.
  5. Configurar permisos y variables de entorno.
  6. Reiniciar el servidor web.

Ejemplo de Script de Despliegue

Vamos a crear un script que automatice este proceso de despliegue. Este script debe ejecutarse con permisos de administrador (root) para realizar todas las tareas necesarias.

  1. Detener el servidor web
  2. Hacer copia de seguridad
  3. Obtener la nueva versión del código
  4. Instalar dependencias
  5. Configurar permisos y variables de entorno
  6. Reiniciar el servidor web
#!/bin/bash

# Ruta de la aplicación
APP_DIR="/var/www/tu_aplicacion"

# Detener el servidor web
echo "Deteniendo el servidor web..."
systemctl stop apache2

# Hacer copia de seguridad de los archivos y base de datos
echo "Haciendo copia de seguridad..."
tar -czvf $APP_DIR/backup_$(date +%Y%m%d%H%M).tar.gz $APP_DIR
mysqldump -u usuario -pcontraseña basedatos > $APP_DIR/backup_db_$(date +%Y%m%d%H%M).sql

# Obtener la nueva versión del código
echo "Obteniendo la nueva versión del código..."
cd $APP_DIR
git pull origin main

# Instalar dependencias (ejemplo para PHP Composer)
echo "Instalando dependencias..."
composer install

# Configurar permisos y variables de entorno
echo "Configurando permisos y variables de entorno..."
chown -R www-data:www-data $APP_DIR
chmod -R 755 $APP_DIR
cp $APP_DIR/.env.example $APP_DIR/.env
php artisan key:generate

# Reiniciar el servidor web
echo "Reiniciando el servidor web..."
systemctl start apache2

echo "Despliegue completado con éxito."

Backups de Bases de Datos

Automatización del respaldo de bases de datos. Además de respaldar las bases de datos, también es importante comprimir y limpiar los respaldos antiguos para ahorrar espacio.

  • Ejemplo para MySQL:

    #!/bin/bash
    # Script para respaldar una base de datos MySQL y limpiar respaldos antiguos
    fecha=$(date +%Y%m%d%H%M)
    backup_dir="/ruta/a/respaldo"
    mysqldump -u usuario -pcontraseña basedatos | gzip > $backup_dir/respaldo_$fecha.sql.gz
    find $backup_dir -type f -mtime +30 -name '*.gz' -exec rm {} \;
  • Ejemplo para PostgreSQL:

    #!/bin/bash
    # Script para respaldar una base de datos PostgreSQL y limpiar respaldos antiguos
    fecha=$(date +%Y%m%d%H%M)
    backup_dir="/ruta/a/respaldo"
    pg_dump -U usuario -F c basedatos | gzip > $backup_dir/respaldo_$fecha.dump.gz
    find $backup_dir -type f -mtime +30 -name '*.gz' -exec rm {} \;

Limpieza de Archivos Temporales

Automatización de la limpieza de archivos temporales y logs que pueden llenar el disco con el tiempo.

  • Ejemplo:
    #!/bin/bash
    # Script para limpiar archivos temporales y logs antiguos
    find /tmp -type f -atime +10 -delete
    find /var/log -type f -name '*.log' -mtime +30 -delete

Gestión de Logs

Rotación de Logs

Uso de logrotate para gestionar la rotación y el archivo de logs. Esto ayuda a mantener los archivos de logs manejables y a liberar espacio en disco.

  • Ejemplo de configuración en /etc/logrotate.d/mi_aplicacion:
    /var/log/mi_aplicacion/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root utmp
    sharedscripts
    postrotate
    /usr/bin/systemctl reload mi_aplicacion.service > /dev/null
    endscript
    }

Monitoreo de Logs

Uso de tail y grep para monitorear logs en tiempo real. Esto es útil para detectar y responder rápidamente a problemas en el sistema.

  • Ejemplo:
    tail -f /var/log/syslog | grep "ERROR"

Ejercicios de Integración y Automatización

Ejercicio 1: Crear un script de respaldo automático

1.1 Crea un script Bash que realice un respaldo de una carpeta específica y lo guarde con una marca de tiempo.

Ejercicio 2: Programar tareas con Cron

2.1 Programa un script para ejecutarse cada día a medianoche y limpiar archivos temporales.

Ejercicio 3: Interacción con una API

3.1 Crea un script que obtenga datos de una API y los guarde en un archivo.

Ejercicio 4: Envío de notificaciones por correo electrónico

4.1 Crea un script que envíe un correo electrónico con un mensaje específico.

Ejercicio 5: Despliegue de una aplicación web

5.1 Crea un script que actualice el código de una aplicación web y reinicie el servidor web.

Ejercicios con soluciones de Integración y Automatización

Ejercicio 1: Crear un script de respaldo automático

1.1 Crea un script Bash que realice un respaldo de una carpeta específica y lo guarde con una marca de tiempo.

  • Solución:
    #!/bin/bash
    fecha=$(date +%Y%m%d%H%M)
    tar -czvf respaldo_$fecha.tar.gz /ruta/a/carpeta

Ejercicio 2: Programar tareas con Cron

2.1 Programa un script para ejecutarse cada día a medianoche y limpiar archivos temporales.

  • Solución:
    # Editar crontab con:
    crontab -e
    # Añadir la siguiente línea:
    0 0 * * * /ruta/a/tu_script_limpieza.sh

Ejercicio 3: Interacción con una API

3.1 Crea un script que obtenga datos de una API y los guarde en un archivo.

  • Solución:
    #!/bin/bash
    curl -s "https://api.ejemplo.com/datos" > datos.json

Ejercicio 4: Envío de notificaciones por correo electrónico

4.1 Crea un script que envíe un correo electrónico con un mensaje específico.

  • Solución:
    #!/bin/bash
    echo "Este es el cuerpo del correo" | mail -s "Asunto del correo" destinatario@ejemplo.com

Ejercicio 5: Despliegue de una aplicación web

5.1 Crea un script que actualice el código de una aplicación web y reinicie el servidor web.

  • Solución:
    #!/bin/bash
    cd /var/www/tu_aplicacion
    git pull origin main
    systemctl restart nginx