Sauvegarder automatiquement son serveur avec sitecopy
Notre serveur Debian peut crasher, et de manière irrécupérable. Shit happens.
Si vous n'avez pas une arborescence d'une centaine de Gigas de petits fichiers à sauvegarder, alors l'utilitaire sitecopy est une solution plutôt pratique que j'utilise régulièrement. Son principal défaut est de maintenir l'état des fichiers sauvegardés dans un fichier xml, ce qui est de la dernière crétinerie puisque ce format n'est clairement pas fait pour ça, et finira par planter sitecopy à partir d'une certaine taille de "base". Reste que pour les cas courants il est extrêmement pratique.
Commençons par installer l'outil en question:
apt-get install sitecopy
Il faut maintenant créer un fichier de config dans '/root/':
cd /root
mkdir -m 700 .sitecopy
touch .sitecopyrc
chmod 600 .sitecopyrc
Puis on va configurer les sauvegardes. Il nous faut pour cela un compte FTP distant qui accueillera nos sauvegardes. Pour les besoins de l'exemple, j'utiliserai le serveur FTP 'ftp.monbackup.com' avec pour identifiant 'ftpbackup' et mot de passe 'FTPass123'. Ce compte est bien sûr fictif.
Je veux d'abord sauvegarder le répertoire regroupant mes vhosts Apache, ainsi que mes exports automatiques MySQL (décrits dans une autre section). Le tout est situé localement dans '/home/www/', et je veux en dupliquer le contenu dans un répertoire '/www/' de mon serveur FTP. Je rajoute donc au fichier de config '/root/.sitecopyrc' les lignes suivantes:
site www
  server ftp.monbackup.com
  remote /www/
  local /home/www/
  username ftpbackup
  password FTPass123
Le répertoire '/www/' distant doit être déjà créé sur le serveur FTP, et ouvert en écriture pour l'utilisateur 'ftpbackup'.
Nous avons déclaré une entrée de configuration nommée 'www' (en référence au nom du répertoire à synchroniser), il faut maintenant initialiser la sauvegarde en disant au moteur que le répertoire distant de sauvegarde est vide, et que la sauvegarde initiale reste à faire. Cela se fait à l'aide de la commande suivante:
sitecopy --init www
Puis nous effactuons la première sauvegarde à l'aide de la commande suivante:
sitecopy --update www
Chaque nouvel appel de cette commande d'update se contentera de mettre à jour les fichiers modifiés, répercuter les suppressions et créations.
Faisons la même chose pour le répertoire /etc de notre serveur, en ajoutant cette fois au fichier de config '/root/.sitecopyrc' les lignes suivantes:
site etc
  server ftp.monbackup.com
  remote /etc/
  local /etc/
  username ftpbackup
  password FTPass123
On aura créé le répertoire nécessaire (avec droits d'écriture) sur le serveur distant. Lançons maintenant les commandes d'initialisation:
sitecopy --init etc
sitecopy --update etc
A ce stade, j'ai envie d'automatiser mes sauvegardes, je crée donc un script shell '/root/sitecopy.sh' qui contiendra mes commandes quotidiennes d'update. Pensez à rendre le scrpit exécutable au niveau des droits.
Le fichier '/root/sitecopy.sh' contient donc:
sitecopy --update www
sitecopy --update etc
Ajoutez maintenant la ligne suivante au fichier système '/etc/crontab':
0 4 * * * root /root/sitecopy.sh
Nous avons terminé, chaque matin à 4h00 les deux répertoires '/home/www/' et '/etc/' seront mis à jour sur l'espace ftp de sauvegarde. On peut compléter le dispositif par l'envoi d'un rapport de sauvegarde, ce sera peut-être l'objet d'un futur article.