¿Qué hace rsync?
Resumen
rsync es la herramienta estándar para sincronización eficiente de archivos. Solo transfiere las partes modificadas de los archivos (transferencia delta), soporta SSH, maneja permisos y funciona para copias de seguridad, despliegues y reflejo de directorios.
Instrucciones
Paso 1: Uso básico
# Sincronizar directorios locales
rsync -avz source/ destination/
# -a = archivo (preserva permisos, marcas de tiempo, enlaces simbólicos)
# -v = verbose (detallado)
# -z = comprimir durante la transferencia
# Sincronizar a servidor remoto
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# Sincronizar desde servidor remoto
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# Simulación (muestra lo que cambiaría sin ejecutarlo)
rsync -avzn source/ destination/
Paso 2: Patrones comunes
# Desplegar sitio web (eliminar archivos en destino que no existan en origen)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# Copia de seguridad con exclusión
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# Copia de seguridad incremental con enlaces duros (eficiente en espacio)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# Limitación de ancho de banda (útil para transferencias grandes)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 KB/s
Paso 3: Script de despliegue
#!/bin/bash
# scripts/deploy.sh — Desplegar aplicación con rsync
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "Construyendo..."
npm run build
echo "Sincronizando archivos..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "Reiniciando servicio..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "¡Despliegue completado!"
Directrices
- Usa siempre
-n(simulación) primero cuando uses--deletepara evitar pérdida accidental de datos. - La barra inclinada final importa:
source/sincroniza el contenido,sourcesincroniza el directorio en sí. - Para transferencias grandes, agrega
--progresspara ver el progreso por archivo. - rsync sobre SSH está cifrado por defecto — seguro para transferencias por internet.