Uso de rsync para migrar archivos de WordPress

Contents

Introducción

Migrar un sitio de WordPress entre servidores o entornos de desarrollo puede parecer una tarea compleja, especialmente cuando la cantidad de archivos y la estructura de directorios crecen con el tiempo. rsync es una herramienta de sincronización de archivos muy eficiente que minimiza el tiempo de transferencia y asegura la integridad de los datos. En este artículo, analizaremos en detalle cómo utilizar rsync para migrar los archivos de WordPress de manera segura, rápida y reproducible.

¿Qué es rsync

rsync (Remote Sync) es una utilidad de código abierto para sistemas Unix/Linux que sincroniza archivos y directorios entre dos ubicaciones, ya sean locales o remotas. Comparando bloques de datos, rsync transfiere únicamente las partes modificadas, reduciendo así el ancho de banda y el tiempo de transferencia. Más información en el sitio oficial:
https://rsync.samba.org/

Ventajas de usar rsync en migraciones de WordPress

  • Incrementalidad: Transfiere sólo los cambios, optimizando recursos.
  • Fiabilidad: Verificación de sumas de control para asegurar integridad.
  • Flexibilidad: Gran cantidad de opciones para incluir/excluir archivos.
  • Compresión: Opción -z para comprimir datos en tránsito.
  • Reanudación: Si la conexión se interrumpe, puede reanudar sin perder progreso.

Preparativos antes de la migración

  • Realizar una copia de seguridad de la base de datos y archivos con procedimientos oficiales.
  • Verificar conectividad SSH entre el servidor origen y destino.
  • Instalar rsync en ambos servidores (ejemplo en Debian/Ubuntu: sudo apt install rsync).
  • Asegurarse de contar con espacio suficiente en el destino.
  • Bloquear temporalmente el sitio (modo mantenimiento) para evitar cambios concurrentes.

Opciones de rsync más útiles

Opción Descripción Ejemplo
-a Modo archivo (recursivo, preserva permisos, dueños, fechas). rsync -a /origen/ /destino/
-v Verbose, muestra progreso detallado. rsync -av …
-z Comprime datos durante la transferencia. rsync -az …
-P Muestra progreso y permite reanudar descargas. rsync -aP …
–delete Elimina en destino archivos borrados en origen. rsync -a --delete …
-e ssh Usa SSH como transporte remoto. rsync -e ssh …

Ejemplos de comandos para migrar WordPress

  1. Desde local a servidor remoto:

    rsync -azP --delete -e ssh /ruta/a/wordpress/ usuario@servidor:/ruta/web/
  2. Entre dos servidores remotos (hostA a hostB):

    rsync -avz --delete -e ssh usuario@hostA:/var/www/html/ usuario@hostB:/var/www/html/
  3. Uso de un archivo de exclusión:

    rsync -av --exclude-from=excludes.txt /origen/ /destino/

    excludes.txt puede contener carpetas temporales, cachés y archivos de registro.

Excluyendo archivos y directorios innecesarios

Al migrar WordPress, es habitual omitir archivos que no deben copiarese. Ejemplos:

  • wp-content/cache/
  • wp-content/backups/
  • .htaccess (si se recrea automáticamente)
  • logs, archivos tmp y .DS_Store

Archivo excludes.txt de ejemplo:

cache/
/backups/
/.log
.tmp
.DS_Store

Preservación de permisos y enlaces simbólicos

El modificador -a implica -rlptgoD, que preserva:

  • r: enlaces simbólicos
  • l: archivos regulares
  • p: permisos
  • t: marcas de tiempo
  • g: grupo
  • o: propietario
  • D: dispositivos y especiales

Para usuarios no root, podría omitirse la preservación de propietarios con –no-o.

Consideraciones de seguridad

  • No exponer puertos rsync sin SSH • use siempre -e ssh.
  • Configurar autenticación por clave pública/privada para SSH sin contraseña.
  • Revisar permisos de archivos tras la migración.
  • Bloquear el modo mantenimiento en producción (plugins como WP Maintenance Mode).

Validación y comprobaciones posteriores

  • Comparar conteo de archivos: find /origen wc -l vs find /destino wc -l.
  • Verificar checksums con md5sum o sha256sum en muestras de archivos.
  • Probar el sitio en entorno destino antes de cambiar DNS o levantar en producción.

Automatización con scripts

Se puede encapsular el comando en un script shell que incluya variables y registro de logs:

#!/bin/bash
ORIGEN=/var/www/html/
DEST=usuario@servidor:/var/www/html/
EXCLUDE=/home/user/excludes.txt
LOG=/var/log/rsync-wordpress.log

echo Iniciando sincronización: (date) >> LOG
rsync -azP --delete -e ssh --exclude-from=EXCLUDE ORIGEN DEST >> LOG 2>1
echo Finalizado: (date) >> LOG

Recursos adicionales

Publicado el: 2024-06



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *