Backup ftp incrementale con rsync

Introduzione

In questo post voglio condividere il metodo che uso per salvare su un computer locale i backup dei miei siti WordPress. Premetto da subito che probabilmente esistono modi migliori o strumenti più completi per eseguire questa operazione, ma ha volte puo tornare utile un comodo script bash per portare a termine compiti ripetitivi.

Caso di utilizzo

Nel mio caso voglio implementare una semplice soluzione di backup per alcuni siti web che gestisco. Tuttavia non sarà sufficiente salvare solo i file del sito, bisognerà salvare anche una copia del database. Per ottenere questo ho unito diversi strumenti:

  • il plugin backWPup per wordpress
  • rsync
  • CurlFtpFS

il plugin backWPup farà il grosso del lavoro salvando tutto (i file del sito e il database) in un archivio compresso in formato .zip. Io l'ho impostato per eseguire il backup una volta al mese, ed ho anche impostato la cartella dove verranno salvati i backup. Rsync e CurlFtpFS sono due pacchetti che puoi facilmente reperire dal tuo gestore di pacchetti.

Lo script

Puoi scaricare lo script a questo link. Prima di eseguirlo dovrai modificarlo, impostando le variabili di connessione al server.

NOME_SITO=miosito.it
HOST=ftp.miosito.it
UTENTE=ftpuser
PASSWORD=ftppassword
PERCORSO_LOCALE_MOUNT_FTP=/media/ftp/
PERCORSO_REMOTO_CARTELLA_BACKUP=/media/ftp/percorso_cartella_backup
PERCORSO_CARTELLA_DESTINAZIONE=/media/backup/

non aggiungere lo slash alla fine nel percorso remoto della cartella di backup. Una volta impostati correttamente questi dettagli non occorre fare altro, e il resto dello script può restare invariato, ma volendo si può aggiungere qualche opzione al comando rsync. Ma vediamo i vari passaggi:

Per prima cosa vengono fatte alcune verifiche preliminari, comincio con la verifica di una connessione a internet attiva.

# test per verificare se esiste una connessione attiva
# se non c'è la connessione esce dallo script
# è richiesto wget che normalmente è già presente in ogni distribuzione linux

WGET=$(which wget)

$WGET -q --tries=20 --timeout=10 http://www.google.com -O /tmp/google.idx &> /dev/null

if [ ! -s /tmp/google.idx ]
	then
		echo -e "- test connessione" $RED"--> connessione assente"$Z
		echo -e "- impossibile proseguire" $RED"--> uscita"$Z
		exit 1
	else
		echo -e "- test connessione:" $GREEN"--> Ok"$Z
fi

dopo verifico la presenza delle cartelle necessarie, come la cartella ftp

# verifica se esiste $CARTELLA_FTP e se non esiste la crea

if [ ! -d $PERCORSO_LOCALE_MOUNT_FTP ]; then
    mkdir $PERCORSO_LOCALE_MOUNT_FTP
		sleep 1
    echo -e "- verifica  cartella ftp" $PURPLE"--> la cartella ftp non esiste"$Z
    echo -e "- creazione cartella" $PURPLE"--> è stata creata la cartella $PERCORSO_LOCALE_MOUNT_FTP "$Z
else
	  sleep 1
    echo -e "- verifica  cartella ftp" $GREEN"--> Ok"$Z
fi

e la cartella di destinazione

# verifica se esiste $CARTELLA_DESTINAZIONE e se non esiste la crea

if [ ! -d $PERCORSO_CARTELLA_DESTINAZIONE ]; then
    mkdir $PERCORSO_CARTELLA_DESTINAZIONE
		sleep 1
		echo -e "- verifica  cartella di destinazione" $PURPLE"--> la cartella di destinazione non esiste"$Z
		echo -e "- creazione cartella" $PURPLE"--> è stata creata la cartella $PERCORSO_CARTELLA_DESTINAZIONE "$Z
else
	  sleep 1
    echo -e "- verifica  cartella di destinazione" $GREEN"--> Ok"$Z
fi

Fatti questi controlli viene montata la cartella remota (la document root del sito web) con il comando CurlFtpFS che provvederà a montare la cartella ftp nel computer locale.

# monto la cartella remota in $PERCORSO_LOCALE_MOUNT_FTP
# puoi usare anche l'opzione -v per fare in modo che libcurl stampi un output di debug dettagliato.

curlftpfs $HOST $PERCORSO_LOCALE_MOUNT_FTP -o user=$UTENTE:$PASSWORD
if [ $? -eq 0 ]; then
	  sleep 1
    echo -e "- montaggio della cartella ftp locale" $GREEN"--> Ok"$Z
else
	  sleep 1
    echo -e "- montaggio della cartella ftp locale" $RED"--> Fallito..."$Z
fi

se il montaggio della cartella fallisce verrai avvisato con un messaggio e lo script si interrompe. Il passaggio successivo è la sincronizzazione con rsync

rsync -avzh --progress --exclude={'index.php','.donotbackup','.htaccess'} $PERCORSO_REMOTO_CARTELLA_BACKUP $PERCORSO_CARTELLA_DESTINAZIONE

infine, completata la sincronizzazione smontiamo la cartella ftp con il comando fusermount.

fusermount -u $PERCORSO_LOCALE_MOUNT_FTP
if [ $? -eq 0 ]; then
    echo -e "- smontaggio della cartella ftp locale" $GREEN"--> Ok"$Z
else
    echo -e "- smontaggio della cartella ftp locale" $RED"--> Fallito..."$Z
fi

Tags

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *