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