Que fait rsync ?
Présentation
rsync est l'outil standard de synchronisation efficace de fichiers. Il ne transfère que les parties modifiées des fichiers (transfert delta), prend en charge SSH, gère les permissions, et fonctionne pour les sauvegardes, déploiements et miroirs de répertoires.
Instructions
Étape 1 : Utilisation de base
# Synchroniser des répertoires locaux
rsync -avz source/ destination/
# -a = archive (préserve les permissions, horodatages, liens symboliques)
# -v = verbeux
# -z = compresser pendant le transfert
# Synchroniser vers un serveur distant
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# Synchroniser depuis un serveur distant
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# Simulation (montre ce qui changerait sans agir)
rsync -avzn source/ destination/
Étape 2 : Modèles courants
# Déployer un site web (supprimer les fichiers de destination qui n'existent pas dans la source)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# Sauvegarde avec exclusion
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# Sauvegarde incrémentielle avec liens physiques (économique en espace)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# Limitation de bande passante (utile pour les gros transferts)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 Ko/s
Étape 3 : Script de déploiement
#!/bin/bash
# scripts/deploy.sh — Déployer une application avec rsync
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "Construction..."
npm run build
echo "Synchronisation des fichiers..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "Redémarrage du service..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "Déploiement terminé !"
Directives
- Toujours utiliser
-n(simulation) d'abord avec--deletepour éviter une perte accidentelle de données. - La barre oblique finale compte :
source/synchronise le contenu,sourcesynchronise le répertoire lui-même. - Pour les gros transferts, ajoutez
--progresspour voir la progression fichier par fichier. - rsync via SSH est chiffré par défaut — sûr pour les transferts internet.