Guía de tecnologías

Tareas Rex: configurar base de datos y servidor web

5 min read DevOps Actualizado 18 Sep 2025
Tareas Rex: configurar base de datos y servidor web
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 Rexfile

Añ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 prepare

Para listar las tareas dentro de un Rexfile:

wks01 database# rex -T

Crear las tareas para el sitio web

Cambia al directorio del proyecto web:

wks01 database# cd ../website  
wks01 website# touch Rexfile

Define 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 prepare

Despué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 tareas

Pruebas 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.

Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach