Niveau : Confirmé

Sauvegarde automatique (backup)

Mise en place d'une solution de sauvegarde automatique des fichiers avec Backup-manager

Tutoriel par (Alsacréations, Strasbourg)
Créé le , mis à jour le (67680 lectures)
Tags : développement

Backup-manager

Backup Manager

Post-it

Backup Manager est un outil en ligne de commande pour Linux conçu pour effectuer des sauvegardes quotidiennes de votre système. Il est écrit en bash et Perl, permet de constituer des archives dans plusieurs formats de compression (tar, gzip, bzip2, lzma, dar, zip) et de les exporter vers un serveur FTP ou de les graver automatiquement.

Dans notre cas, nous allons l'installer, et le configurer pour envoyer des archives compressées sur un serveur FTP externe de sauvegarde. Si vous utilisez une Dedibox, vous pourrez ainsi profiter du système dedibackup.

Consultez si nécessaire Configuration d'un serveur dédié de A à Z (Connexion SSH, Accès root, Edition des fichiers en ligne de commande) avant de poursuivre.

Installation

Backup-manager peut s'installer via apt (pensez à passer en root) :

apt-get install backup-manager

Il sera lancé quotidiennement grâce au démon cron de Linux.

Configuration

Editez le fichier /etc/backup-manager.conf

vi /etc/backup-manager.conf

Configuration de base

Par défaut, les archives seront placées dans le répertoire /var/archives. Ceci est modifiable par l'instruction

export BM_REPOSITORY_ROOT="/var/archives"

Ce répertoire doit être détenu par root (afin que personne d'autre ne puisse en consulter le contenu).

La durée de conservation des archives est définie (en jours) par :

export BM_ARCHIVE_TTL="5"

Il faut la moduler en fonction de l'espace de sauvegarde disponible et la quantité de données à conserver.

Des fichiers tar seront constitués :

export BM_TARBALL_FILETYPE="tar"

On peut également choisir la compression avec tar.gz

Les répertoires à sauvegarder :

export BM_TARBALL_DIRECTORIES="/etc /home /var/lib/mysql /var/www /var/mail"

Dans ce cas, nous sauvegardons l'essentiel de la configuration du système qui se trouve dans /etc, ainsi que les dossiers utilisateurs /home, puis tout le contenu hébergé par le serveur web, à savoir les bases de données MySQL dans /var/lib/mysql, les fichiers web /var/www et les e-mails de /var/mail.

Il est possible de blacklister certains types de fichiers (ne pas les sauvegarder), ceci est pratique pour ne pas faire exploser la taille des archives :

export BM_TARBALL_BLACKLIST="/var/archives *.mp3 *.avi *.rar *.zip *.ogg *.sql *.tgz *.mpg *.log *.7z"
Configuration de la sauvegarde par FTP

Dans notre cas, nous exportons les archives par FTP :

export BM_UPLOAD_METHOD="ftp"

Dont il faut renseigner l'accès avec login et mot de passe :

export BM_UPLOAD_FTP_USER="votre login"
export BM_UPLOAD_FTP_PASSWORD="votre mot de passe"
export BM_UPLOAD_FTP_HOSTS="adresse du serveur (IP ou hostname)"

Nous précisons aussi qu'il faut purger les archives trop anciennes pour être conservées :

export BM_UPLOAD_FTP_PURGE="true"

Avec un délai de 5 jours :

export BM_UPLOAD_FTP_TTL="5"

La destination d'upload sur le serveur FTP est définie par :

export BM_UPLOAD_FTP_DESTINATION="/"
Divers et conclusion

Grâce à l'option BM_POST_BACKUP_COMMAND vous pourrez exécuter un script shell une fois la sauvegarde terminée. Ceci est pratique pour envoyer une notification par e-mail lorsque la sauvegarde est terminée ou pour calculer la quantité de données sauvegardées dans /var/archives/. Laissez libre cours à votre imagination ou prenez exemple sur ce script écrit en PHP.

Nous utiliserons donc :

export BM_POST_BACKUP_COMMAND="/etc/backup-manager-post"

En créant le fichier correspondant :

vi /etc/backup-manager-post

Et en y plaçant le code suivant. N'oubliez pas de modifier les deux premières lignes relatives à l'e-mail de destination et au répertoire stockant les archives :

#!/usr/bin/php

<?php

$dest = array('monitoring@test.com');
$archives = '/var/archives';

$host = trim(file_get_contents('/etc/hostname'));

clearstatcache();

$dir = opendir($archives);
if($dir) {
        while(false !== ($filename = readdir($dir))) {
                if($filename[0]!='.' && preg_match('/'.date('Ymd').'/',$filename)) {
                        $thefile = $archives.'/'.$filename;
                        $size = exec("ls -l '".$thefile."' | awk '{print $5}'");
                        if($size>0) {
                                $pagetext.= $filename." (".round($size/1000000000,2)." Go)n";
                        } else {
                                $pagetext.= $filename." (? Go)n";
                        }
                        $totalsize += $size;
                }
        }
        $pagetext .= "nTotal : ".round($totalsize/1000000000,2)." Gon";
}

foreach($dest as $d) {
        mail($d,'['.$host.'] Backup OK',$pagetext);
}

?>

Attribuez le droit d'exécution :

chmod +x /etc/backup-manager-post

Pour des informations plus détaillées, consultez aussi la documentation officielle de Backup Manager