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
- Ejemplo:
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
- Ejemplo:
-
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
- Instalación de
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:
- Detener el servidor web para evitar inconsistencias mientras se despliega la nueva versión.
- Hacer una copia de seguridad de los archivos actuales y la base de datos.
- Obtener la última versión del código desde el repositorio.
- Instalar dependencias.
- Configurar permisos y variables de entorno.
- 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.
- Detener el servidor web
- Hacer copia de seguridad
- Obtener la nueva versión del código
- Instalar dependencias
- Configurar permisos y variables de entorno
- 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