Tareas Rex: configurar base de datos y servidor web
Introducción
Aquí verás un flujo práctico para: 1) añadir repositorios externos en SVN, 2) crear Rexfiles que reutilicen módulos comunes (Common::NTP, Service::MySQL/Service::Apache), y 3) ejecutar tareas para preparar y desplegar servidores.
Importante: los bloques de código contienen los comandos tal y como deben ejecutarse en la máquina. Los comentarios dentro de los bloques pueden aparecer en español para aclarar su propósito.
Crear las tareas para la base de datos
Cambia al repositorio de la base de datos:
wks01 Service# cd ../database
wks01 database# touch RexfileAñadiremos ahora nuestros dos repositorios comunes como repositorios externos de SVN:
wks01 database# svn propedit svn:externals .Agrega las siguientes líneas en el editor, guarda y cierra:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Después de configurar los externals, ejecuta una actualización y confirma los nuevos ajustes:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"El comando svn up ahora revisa ambos repositorios externos para actualizaciones. Si alguien añade nuevos servicios en uno de estos repositorios, los obtendrás al ejecutar svn up. Ahora puedes empezar a crear tu Rexfile para configurar un servidor de base de datos.
set user => "root";
set password => "f00b4r";
include qw/
Common::NTP
Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
# ejecutar la tarea común ntp "prepare"
Common::NTP::prepare();
# instalar mysql
Service::MySQL::prepare();
# configurar mysql
Service::MySQL::configure({
key_buffer => "32M",
max_allowed_packet => "32M",
});
# reiniciar mysql
service mysql => "restart";
};
Explicación breve de puntos clave:
- Las líneas 1 y 2 configuran la autenticación que Rex usará contra el host objetivo (db01). También puedes usar autenticación por clave (ver http://rexify.org/howtos/start.html para más información).
- include qw/ … / carga los módulos Common::NTP y Service::MySQL; cada tarea definida en esos módulos queda disponible también como función Perl y puede invocarse directamente.
- set group define el grupo de servidores “srvdb” y añade el host “db01”. Puedes añadir múltiples hosts usando comas o rangos:
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";- task “prepare” se ejecuta en todos los servidores del grupo “srvdb” y realiza la instalación, configuración y reinicio de MySQL.
Una vez listo, añade y confirma el Rexfile en SVN:
wks01 database# svn add Rexfile
wks01 database# svn ci -m "inital commit of Rexfile"Para configurar el servidor de base de datos ejecuta:
wks01 database# rex preparePara listar las tareas dentro de un Rexfile:
wks01 database# rex -TCrear las tareas para el sitio web
Cambia al directorio del proyecto web:
wks01 database# cd ../website
wks01 website# touch RexfileDefine también los externals en este repositorio:
wks01 website# svn propedit svn:externals .Agrega las mismas líneas al editor, guarda y cierra:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Actualiza y confirma los cambios:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"Ahora crea el Rexfile para configurar un servidor web:
# Rexfile
set user => "root";
set password => "test";
include qw/
Common::NTP
Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
# ejecutar la tarea común ntp "prepare"
Common::NTP::prepare();
# instalar apache
Service::Apache::prepare();
# configurar apache
Service::Apache::configure({
timeout => 60,
});
# reiniciar apache
service apache2 => "restart";
};
Guarda el archivo y añádelo al repositorio:
wks01 website# svn add Rexfile
wks01 website# svn ci -m "initial Rexfile"Para configurar el servidor web ejecuta:
wks01 website# rex prepareDespués de configurar la base de datos y el servidor web, puedes desplegar una aplicación añadiendo una segunda tarea al Rexfile. Por ejemplo, para subir y extraer un archive ZIP/TAR proporcionado por el equipo de desarrollo:
task "deploy", group => "srvweb", sub {
upload "your-web-application.tar.gz", "/tmp";
extract "/tmp/your-web-application.tar.gz",
owner => "www-data",
group => "www-data",
to => "/var/www";
rm "/tmp/your-web-application.tar.gz";
};
Cuándo puede fallar este enfoque
- Dependencias externas faltantes: si los módulos listados en los repositorios externos no están presentes o cambian de API, rex fallará al incluirlos.
- Permisos y autenticación: usar usuario root y password en texto claro funciona en entornos de laboratorio, pero en producción debes migrar a autenticación por clave y gestionar secretos (Vault, Ansible Vault, etc.).
- Versiones de paquetes: diferencias entre distribuciones (Debian/Ubuntu vs. CentOS/RHEL) pueden requerir adaptaciones en los módulos Service::MySQL o Service::Apache.
Enfoques alternativos
- Ansible/Chef/Puppet: si prefieres un sistema declarativo con amplio ecosistema, considera migrar a Ansible para tareas idempotentes y playbooks YAML.
- Contenedores: para despliegues modernos, empaqueta la aplicación y la base de datos en contenedores (Docker + Kubernetes), y usa Rex/CI solo para tareas de infraestructura fuera del clúster.
- Pipelines CI/CD: integra las tareas Rex en un pipeline (Jenkins/GitLab CI) para ejecuciones automatizadas y controladas.
Checklist por rol
Administrador de Infraestructura
- Validar accesos SSH y política de claves.
- Comprobar repositorios externos y permisos SVN.
- Ejecutar rex prepare en entorno de staging.
Desarrollador
- Proveer artefactos (tar.gz/zip) con estructura esperada (/var/www).
- Tests de integración básicos después del despliegue.
Operaciones / SRE
- Supervisar servicios (uptime, logs) tras el despliegue.
- Documentar procedimientos de rollback y backups de BD.
Mini-hoja de referencia (cheat sheet)
- Añadir externals:
svn propedit svn:externals .
svn up
svn ci -m "added external repositories"- Añadir Rexfile y confirmar:
touch Rexfile
svn add Rexfile
svn ci -m "initial Rexfile"- Ejecutar tarea Rex:
rex prepare
rex -T # listar tareasPruebas básicas y criterios de aceptación
Criterios de aceptación para “prepare”:
- MySQL/Apache están instalados y activos.
- El archivo de configuración resultante contiene los parámetros especificados (por ejemplo key_buffer o timeout).
- Los servicios se reinician sin errores.
Casos de prueba:
- Ejecutar rex prepare en un host limpio y verificar que los puertos estén escuchando (3306 para MySQL, 80/443 para Apache).
- Subir y extraer un paquete web; comprobar permisos y propietario de ficheros.
Glosario rápido
- Rexfile: archivo que define tareas y grupos para Rex (herramienta de automatización basada en Perl).
- externals (SVN): referencia a repositorios externos que se traen al checkout local.
- Task: unidad de trabajo ejecutable por Rex.
Resumen
Este flujo muestra cómo reutilizar módulos comunes para mantener Rexfiles concisos y repetibles. Usa los externals de SVN para compartir código entre proyectos y define tareas claras (prepare, deploy) para automatizar la instalación y el despliegue.
Notas: en entornos de producción, sustituye contraseñas en texto por métodos seguros y considera pruebas automatizadas y rollbacks documentados.
Materiales similares
Podman en Debian 11: instalación y uso
Apt-pinning en Debian: guía práctica
OptiScaler: inyectar FSR 4 en casi cualquier juego
Dansguardian + Squid NTLM en Debian Etch
Arreglar error de instalación Android en SD