rsync ci aiuta quando dobbiamo trasferire molti file da un server ad un altro, o anche da una directory all’altra. Sebbene oggi con “continuous deployment” e “continuous delivery” ci siano strumenti automatizzati per lo spostamento o installazione dei file di un progetto, a volte qualche operazione viene eseguita manualmente anche senza l’utilizzo di git.
Quasi tutti i progetti web coinvolgono tre ambienti principali in cui avvengono le tre fasi principali di sviluppo software:
rsync è un sistema di sincronizzazione di file molto utile ed affidabile. rsync si usa per sincronizzare file tra directory locali o remote.
rsync funziona su ogni tipo di sistema basato su Unix, quindi certamente Linux e Mac OS
rsync risolve egregiamente alcuni classici problemi di sincronizzazione:
Il comando rsync in generale si usa in questo modo:rsync [opzioni] [sorgente] [destinazione]
In particolare, per la migrazione di un sito web usando rsync, le seguenti opzioni sono fondamentali:
Tutte queste opzioni possono essere combinate insieme: “-azvr“.
Supponiamo di avere una directory “dev.dominio.it” e di essere pronti per il suo trasferiemnto in un’altra directory “dominio.it”. Supponiamo anche che entrambe le directory si trovino nella directory “/var/www/” (directory abbastanza comune in molti web server Linux).
In questo caso è possibile utilizzare sia i path assoluti in questo modo:rsync -azvr /var/www/dev.dominio.it /var/www/dominio.it
oppure utilizzare i path relativi se ci si trova all’interno della directory /var/www/dev.dominio.itrsync -azvr . ../dominio.it
in questo secondo caso la directory sorgente è la directory corrente (.) mentre la directory di destinazione è la directory dominio.it contenuta nella directory genitore di quella corrente (..)
La “bellezza” di rsync sta nel fatto che il trasferimento remoto funziona esatttamente allo stesso modo di quello locale. L’unica accortezza necessaria è effettuare il login sull’host remoto.
rsync -azvr /var/www/dev.dominio.it user@host:/var/www/dominio.it
Dove user è il nome utente per effettuare il login sull’host remoto e host è il nome o l’indirizzo IP dell’host remoto.rsync -azvr /var/www/dev.dominio.it pippo@www.miodominio.it:/var/www/dominio.it
rsync -azvr user@host:/var/www/dominio.it /var/www/dev.dominio.it
(path assoluto)rsync -azvr user@host:/var/www/dominio.it .
(path relativo se la directory corrente è dev.dominio.it)
rsync gestisce le esclusioni, quindi è possibile trasferire tutto tranne alcuni file che non vogliamo che siano trasferiti.
Si pensi ad esempio ai file di configurazione che contengono i dati per l’accesso al database (probabilmente diversi in ambiente di sviluppo) o configurazioni particolari per l’ambiente di produzione che con il trasferimento sarebbero sovrascritti.
Basta utilizzare l’opzione –exclude per escludere file o directory che non si vogliono trasferire.
Si possono utilizzare più opzioni –exclude nella stessa riga di comando.rsync -azvr --exclude "config.php" --exclude "directoryDaEscludere" --exclude ".htaccess" --exclude "robots.txt" . /var/www/dominio.it
In questo caso stiamo sincronizzando tutto dalla directory corrente alla directory /var/www/dominio.it
tranne i file .htaccess, config.php, robots.txt e la directory directorydaEscludere.
-u | –update
Questa opzione può essere molto utile perché evita l’aggiornamento di file che nella destinazione risultano avere una data di modifica più recente di quella dei file di origine corrispondenti.
Si può utilizzare nel caso in cui anche i file presenti nella destinazione siano stati modificati (sincronizzazione bidirezionale).
-e | –rsh <comando>
Permette di specificare quale shell utilizzare per l’accesso remoto.
-c | –checksum
Utilizza per la verifica di un codice di controllo più grande di quello utilizzato di default.
In questo modo le operazioni di controllo sorgente-destinazione sono più accurate ma più lente.
–delete
ATTENZIONE, utilizzare con cautela e molta attenzione.
L’opzione infatti permette di cancellare i file nella destinazione che non si trovano nella sorgente. E’
un’opzione pericolosa da usare con cautela, ma che può aiutare a mantenere “pulito” il server
di destinazione, dal quale in questo modo sarebbero rimossi file obsoleti.
Senza utilizzare questa opzione infatti si copia dalla sorgente alla destinazione, ma i file già presenti nella destinazione e non presenti nella sorgente non vengono toccati (rimossi o modificati).
Visto il rischio insito nell’uso di questa opzione, la cancellazione dei file non presenti nella sorgente
avviene solo nel caso in cui la directory sia specificatamente indicate nella sorgente.
-n | –dry-run
Consente di simulare il comando senza che venga realmente eseguito, utile in fase di test.
Per maggiori informazioni si può consultare la man page di rsync (man rsync)
Consiglio anche questa pagina come riferimento: http://wwwcdf.pd.infn.it/AppuntiLinux/trasferimento_e_sincronizzazione_di_dati_attraverso_la_rete.htm