Seleziona una pagina

Dovendo implementare un sistema di backup sul mio server mi sono chiesto: Che strumenti posso usare?

La scelta più semplice sarebbe stata una copia quotidiana della cartella mentre quella più ovvia probabilmente sarebbe stata quella di usare rsync.

Il principale svantaggio di una semplice copia quotidiana è che, non essendo incrementale, alla lunga ha bisogno di moltissimo spazio se si vuole tenere lo storico. I vantaggi sono che, oltre ad essere molto semplice da implementare, è semplice recuperare lo snapshot di una certa data.

Rsync risolve il problema dello spazio perché effettua la copia in modo incrementale; salvando cioè solo ciò che cambia dall’ultima sincronizzazione ed è abbastanza semplice recuperare lo snapshot di una certa data. Più complesso è rendersi conto di cosa cambia e sincronizzare gli ambienti di sviluppo e produzione.

A questo punto del ragionamento mi sono chiesto: perché non usare GIT (che già usavo tra sviluppo e produzione) per creare uno stack integrato tipo sviluppo -> produzione -> backup?

La risposta è stata: “ok facciamolo”.

Sarebbe stato molto semplice usare github e non pensarci più ma a me piace complicarmi la vita perché, volendo backuppare anche file di configurazione contenenti dati privati, non potevo accontentarmi di repository pubblici e al contempo non mi sembrava valesse la pena spendere 85$ (circa 70€) all’anno per avere 5 repository privati.

Ho quindi optato per l’autarchia che mi permetteva di mantenere la privacy, di avere sempre tutto lo storico su tre ambienti diversi (abbastanza sicuro) e, con l’installazione di qualche semplice prodotto:

  • di creare semplicemente i repository git e gestire gli accessi via ssh con chiavi grazie a gitolite
  • di avere un frontend web per la navigazione dei diff e dei sorgenti grazie a gitweb

In questo modo mi è bastato aggiungere un cronjob che ogni notte da produzione committa tutto e fa push delle modifiche su backup per ottenere uno uno stack GIT integrato che parte dallo sviluppo e arriva al backup.

Chiaramente questo non comprendeva il database quindi il cronjob, prima di committare dumpa il database e lo aggiunge alla cartella.

Ho usato questa tecnica anche per il backup delle mail e della directory /etc del mio server.

L’unico problema, che dovrò affrontare quando i repository cresceranno troppo sarà: Come posso eliminare lo storico più vecchio di una certa data con GIT? Mi consola che anche con rsync non fosse immediato. Alla peggio creerò un nuovo repository dalla workingcopy. 😉