Molti servizi di hosting non garantiscono funzionalità di backup automatico: alcuni effettuano dei backup dei nostri siti con una certa regolarità, ma senza alcuna promessa e se ospitiamo i siti di clienti dobbiamo avere una sicurezza al riguardo. Esistono, è vero, servizi poco costosi di backup, ma necessitano un pieno accesso in lettura al sito e questo non mi piace, tanto più che avere degli importanti file di backup disponibili solo in un server remoto mi innervosisce: un disco sotto la scrivania mi pare un’opzione più sicura e meno “virtuale”.
D’altra parte a meno di avere una forte volontà, se non si automatizza il servizio di backup si rischia di finire con l’avere backup discontinui nel tempo. Fortunatamente l’NSLU2 può venire in nostro aiuto: per chi non lo sapesse si tratta di un mini computer piccolissimo e che consuma pochi watt, ma su cui si può installare una versione customizzata di GNU/Linux che lo trasforma in un vero e proprio mini server.
Grazie al mio NSLU” e a rsnapshot, ho a disposizione un backup giornaliero dei miei siti, su un harddisk a casa mia e senza la necessità del benché minimo intervento: ogni giorno a notte fonda mentre io mi godo il meritato riposo, il mio NSLU2 si connette a internet e scarica una copia dei miei siti. Grazie alla potenza di rsnapshot viene memorizzata una copia dei soli file modificati dalla volta precedente, e viene anche scaricata una copia del database.
Installare rsnapshot sull’NSLU2 è possibile molto semplicemente attraverso il gestore dei pacchetti integrato, ma è preliminarmente necessario abilitare il repository optware, lanciando lo script “setup-optware.sh”: questo script vi permetterà di installare rsnapshot e molti altri programmi interessanti usando il package manager “ipkg”. Installare rsnapshot diventa ora solo questione di scrivere:
ipkg install rsnapshot
A questo punto è necessario editare il file di configurazione /opt/etc/rsnapshot.conf; può sembrare complesso a prima vista ma esiste della buona documentazione che spiega come configurarlo per cui mi limiterò a mostrare i cambiamenti principali apportati al file di configurazione:
...
snapshot_root /snapshots/
...
questa riga istruisce rsnapshot a mantenere tutti i backup sotto /snapshots
...
interval daily 31
interval monthly 12
interval yearly 2
...
Queste righe istruiscono rsnapshot a effettuare tre livelli di backup, uno giornaliero (mantenendo copia degli ultimi 31 backup giornalieri), uno mensile (tenendo copia degli ultimi 12) e uno annuale (tenendo copia degli ultimi 2). “daily”,”monthly” e “yearly” non hanno alcun significato speciale: sono semplicemente delle parole chiave che ci permettono di dire a rsnapshot che tipo di backup vogliamo effettuare, cioè “snapshot daily” effettuerà un backup giornaliero etc. È però importante che i tipi di backup vengano inseriti nel file di configurazione in ordine di dimensione temporale, cioè prima quelli che vengono chiamati più spesso e poi quelli che vengono processati più raramente.
...
backup login@mydomain.org:/homedir domain/homedir
backup_script remote_mysql_backup.sh domain/mysql
...
l’istruzione backup istruisce rsnapshot di copiare i file loggandosi via ssh al nostro sito con nome utente login e di copiare tali file nella sottocartella domain/homedir. Perché ciò funzioni è necessario che si sia preventivamente configurato un sistema di accesso senza password (ad esempio un sistema di accesso tramite chiavi pubbliche).
backup_script invece istruisce rsnapshot a lanciare lo script remote_mysql_backup.sh e inserire i file generati dentro la cartella domain/mysql; lo script deve collegarsi remotamente ai nostri database e scriverne i dump nella cartella corrente. Questo è lo scheletro dello script che utilizzo io:
#!/bin/sh
umask 0077
ssh login@mydomain.org mysqldump -u dbuser --password=userpassword --all-databases > dbname.sql
# se ci sono altri utenti aggiungi altre righe simili a quella sopra
/bin/chmod 600 dbname.sql
Basterà ora inserire le righe seguenti nel file /etc/crontab:
PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin
10 5 * * * root rsnapshot daily
15 4 3 * * root rsnapshot monthly
35 3 5 1 * root rsnapshot yearly
per avere il nostro backup ogni giorno.