Vous êtes sur la page 1sur 23

W EB/ TECH

Serveur dédié : sauvegarde automatique des


fichiers avec Backup Manager sur le serveur de
sauvegarde OVH
BY M AT T BISCAY - 2 8 OCTOBRE 2 0 1 1 - 6 M IN S REA D

Aujourd’hui, nous abordons la sauvegarde des fichiers essentiels du


serveur.

Backup Manager permet d’effectuer des sauvegardes quotidiennes du


système : il crée des archives dans plusieurs formats de compression
(tar, gzip, bzip2, lzma, dar, zip) et peut les exporter vers un serveur
FTP.

Dans notre cas, nous allons l’installer et le configurer pour envoyer


tout ce qui est important sur notre serveur sur le serveur FTP externe
de sauvegarde fourni gratuitement par OVH (100 Go).

Etape 1 : installation de Backup Manager


C’est classique :
apt-get install backup-manager

A la fin de l’installation, un assistant se lance et vous permet de config-


urer des options par défaut. Ou vous pouvez configurer à la main,
comme indiqué dans l’étape suivante.

Etape 2 : configuration de Backup Manager

nano /etc/backup-manager.conf

Par défaut, les archives sont placées dans /var/archives , le


répertoire doit être détenu par l’utilisateur root afin que personne
d’autre ne puisse en consulter le contenu :

# Where to store the archives


export BM_REPOSITORY_ROOT="/var/archives"
Les archives seront conservées 5 jours :

# Number of days we have to keep an archive (Time To


Live)
export BM_ARCHIVE_TTL="5"

Méthode de compression à utiliser :

export BM_ARCHIVE_METHOD="tarball"
export BM_TARBALL_FILETYPE="tar.gz"

Les différents répertoires à sauvegarder : /etc contient les fichiers de


configuration des services serveur, /home les données des sites et
/var/lib/mysql les bases de données :

# Paths without spaces in their name:


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

Ensuite, on renseigne l’utilisateur MySQL dédié aux sauvegardes :

# The user who is allowed to read every databases


filled in BM_MYSQL_DATABASES
export BM_MYSQL_ADMINLOGIN="backupuser"

# its password
export BM_MYSQL_ADMINPASS="backuppwd"
Enfin, on s’occupe de la manière dont on traite nos fichiers de
sauvegarde. Dans notre cas, nous les uploadons sur le serveur FTP de
sauvegarde OVH donc :

export BM_UPLOAD_METHOD="ftp"

Et plus bas :

# Timeout (in seconds) for FTP transfer


# This setting only has effect when using FTP
transfer with
# secure mode disabled (BM_UPLOAD_FTP_SECURE to
"false")
export BM_UPLOAD_FTP_TIMEOUT="3600"

# the user to use for the FTP connections/transfers


export BM_UPLOAD_FTP_USER="ksXXXXXXX.kimsufi.com"

# the FTP user's password


export BM_UPLOAD_FTP_PASSWORD="FTP-PASSWORD"

# FTP specific remote hosts


export BM_UPLOAD_FTP_HOSTS="ftpback-XXXX-
XXXX.ovh.net"

# purge archives on remote hosts before uploading?


export BM_UPLOAD_FTP_PURGE="true"

# You can specify a time to live for archives


uploaded with FTP
# This can let you use different ttl's locally and
remotely
# By default, BM_ARCHIVE_TTL will be used.
export BM_UPLOAD_FTP_TTL="5"

# destination for FTP uploads (overrides


BM_UPLOAD_DESTINATION)
export BM_UPLOAD_FTP_DESTINATION="/"

Allez maintenant au bas du fichier. Nous allons exécuter un script PHP


à la fin de chaque sauvegarde qui nous avertira par email du bon
déroulement de la sauvegarde :

# Enter here some shell script.


# It will be executed after the last action of
backup-manager.
export BM_POST_BACKUP_COMMAND="/etc/backup-manager-
email"

Sauvegardez le fichier et retournez dans le shell, la configuration est


terminée.

Etape 3 : ouverture du port 21 dans iptables


On commence par activer les deux modules du kernel qui nous sont
nécessaires pour le FTP:

modprobe ip_conntrack
modprobe ip_conntrack_ftp
Pour pouvoir communiquer avec le serveur FTP, il faut que le port 21
soit ouvert dans iptables :

iptables -A OUTPUT -p tcp --dport 21 -m state --


state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport
1024: -m state --state ESTABLISHED,RELATED,NEW -j
ACCEPT

Etape 4 : création du script PHP qui envoie un


mail après la sauvegarde
On crée le fichier précedemment renseigné :

nano /etc/backup-manager-email

Et on y ajoute :

#!/usr/bin/php
<?php
/*
Plugin Name: Backup-Manager Email
Plugin URI: https://www.skyminds.net/?p=5315
Description: Sends a recap email to sysadmin after
Backup-Manager has backed up the files.
Version: 2.0
Author: Matt Biscay
Author URI: https://www.skyminds.net/
*/
/* --- Changelog ---
v2.0 :
- PHP 7.x compatible
- switch from single recipient to recipient array
- better dir recursion
- fixed undefined variables
- new function to format file sizes
v1.0 : initial release
*/
$dest = array('ADMIN@EXAMPLE.COM');
$archives = '/var/archives';
$host = trim(file_get_contents('/etc/hostname'));
clearstatcache();
$pagetext = '';
$totalsize = 0;
// Function: Format Bytes Into TiB/GiB/MiB/KiB/Bytes
function format_filesize($rawSize) {
if($rawSize / 1099511627776 > 1) {
return number_format($rawSize/1099511627776, 1).'
TiB';
} elseif($rawSize / 1073741824 > 1) {
return number_format($rawSize/1073741824, 1).' GiB';
} elseif($rawSize / 1048576 > 1) {
return number_format($rawSize/1048576, 1).' MiB';
} elseif($rawSize / 1024 > 1) {
return number_format($rawSize/1024, 1).' KiB';
} elseif($rawSize > 1) {
return number_format($rawSize, 0).' bytes';
} else {
return 'unknown';
}
}
$dir = opendir($archives);
if($dir) {
while(false !== ($filename = readdir($dir))) {
if($filename[0]!='.' && $filename[0]!='..' &&
preg_match('/'.date('Ymd').'/',$filename)) {
$thefile = $archives.'/'.$filename;
$size = exec("ls -l '".$thefile."' | awk '{print
$5}'");
if($size>0) {
$pagetext.= $filename . " (". format_filesize($size)
.")\n";
} else {
$pagetext.= $filename . " (". format_filesize($size)
.")\n";
}
$totalsize += $size;
}
}
$pagetext.= "\nTotal : " .
format_filesize($totalsize) ."\n";
}
foreach($dest as $d) {
mail($d,'['.$host.'] Backup OK',$pagetext);
}

N’oubliez pas de modifier l’adresse email au début du


script PHP !

Il ne vous reste plus qu’à rendre le script exécutable avec :

chmod +x /etc/backup-manager-email
Etape 5 : création d’une tâche cron pour au‐
tomatiser les sauvegardes
Il ne nous reste plus qu’à automatiser tout cela, en utilisant CRON bien
sûr. Lancez la commande suivante, qui crée le fichier /etc/backup-
manager.sh :

cat << EOF > /etc/backup-manager.sh && chmod 700


/etc/backup-manager.sh
#!/bin/sh
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager
EOF

Ensuite, éditez le crontab pour y ajouter votre ficher backup-


manager.sh :

crontab -e

puis insérez la ligne :

0 5 * * * /etc/backup-manager.sh

Vos données seront alors sauvegardées chaque matin à 5h.

A lire :  Serveur dédié : impossible de se connecter à un port distant


Erreurs courantes et solutions
Si vous obtenez l’erreur Error reported by backup-manager-upload
for method "ftp", check "/tmp/bmu-log.xxxxxx" qui renvoie vers
Timeout at /usr/share/perl/5.20/Net/FTP.pm line 771 , il faut
impérativement augmenter la valeur de BM_UPLOAD_FTP_TIMEOUT .

Par défaut, BM_UPLOAD_FTP_TIMEOUT est de 120 secondes, ce qui est


sous-dimensionné : si votre fichier de sauvegarde fait plus d’1 Go, cela
risque de déclencher un timeout. Augmentez donc la valeur, j’ai mis
3600 secondes (1h) chez moi :

export BM_UPLOAD_FTP_TIMEOUT="3600"

Conclusion
Voilà, vous êtes parés : toutes les données vitales du serveur sont
maintenant sauvegardées automatiquement sur le serveur de sauveg-
arde OVH.

Il ne vous reste plus qu’à vous connecter sur le serveur de sauvegarde


via le serveur et vérifier que les fichiers sont effectivement uploadés.
Un pas de plus vers la redondance/intégrité des données.

Vous souhaitez réaliser un nouveau projet WordPress ou


WooCommerce, ajouter de nouvelles fonctionnalités, ou
améliorer les performances de votre site?
Parlons de votre projet »

Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en


sélectionnant le texte en question et en appuyant sur Ctrl + Entrée.

Sommaire de la série Monter un serveur dédié


de A à Z

Serveur dédié : installation d’Apache, PHP, MySQL et Webmin

Serveur dédié : créer la base de données MySQL et importer


WordPress

Serveur dédié : créer et activer un Virtual Host sous Apache

Serveur dédié : changer les DNS du nom de domaine et le faire


pointer vers le serveur

Serveur dédié : sécurisation des services avec iptables et fail2ban

Serveur dédié : sécurisation de la couche TCP/IP

Serveur dédié : création d’un serveur mail Postfix (sécurisé avec


Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant
une base MySQL d’utilisateurs/domaines virtuels
Serveur dédié : sécuriser Apache 2 avec ModSecurity

Serveur dédié : CHMOD récursif sur des fichiers ou répertoires en


ligne de commande

Serveur dédié : installer APC comme système de cache et config-


urer Varnish comme reverse-proxy pour Apache pour améliorer
les performances

Serveur dédié : afficher la véritable IP derrière un reverse-proxy


comme Varnish

Serveur dédié : intégrer SSH à WordPress pour mettre à jour le


core, les plugins et les thèmes

Serveur dédié : installer la dernière version d’APC par SVN

Serveur dédié : analyse des performances du serveur

Serveur dédié : mettre à jour le noyau Debian de la Kimsufi

Serveur dédié : sauvegarde automatique des fichiers avec Backup


Manager sur le serveur de sauvegarde OVH

Serveur dédié : configurer la limite mémoire pour PHP et Suhosin


Bash : supprimer tous les fichiers et sous-répertoires d’un
répertoire

Serveur dédié : impossible de se connecter à un port distant

Rsync: rapatrier les fichiers du serveur à la maison

Bash : réparer les tables MySQL en cas de crash

Serveur dédié : création d’une seedbox avec Transmission

Serveur dédié : des paquets LAMP à jour sous Debian

Serveur dédié : mise à jour vers Debian 7 Wheezy

Serveur dédié : activer X11 forwarding pour SSH

Serveur dédié : optimiser toutes les images JPG et PNG avec Op-
tiPNG et JpegOptim

Postfix : résoudre l’erreur “fatal: www-data(33): message file too


big”

Serveur dédié : mise en place de l’IPv6

WordPress : accorder les bonnes permissions aux fichiers et


dossiers avec chown et chmod
WordPress : héberger les images sur un sous-domaine

Serveur dédié : ajouter l’authentification SPF, Sender-ID et DKIM à


Postfix et Bind9 avec opendkim

Apache : lorsque le domaine seul (sans WWW) renvoie une erreur


403

Serveur dédié : sécuriser Apache avec HTTPS (HTTP avec la


couche TLS/SSL) en Perfect Forward Secrecy

Serveur dédié : passer WordPress en HTTPS (TLS/SSL)

Serveur dédié : configurer Webmin en TLS avec un certificat SSL

Serveur dédié : configurer Transmission pour accéder au WebUI


via TLS-SSL

Serveur dédié : installer et configurer Varnish 4

Serveur dédié : passage au mod FastCGI et PHP-FPM avec Apache


MPM Worker

Récupérer un serveur Kimsufi après un plantage de kernel avec le


mode rescue OVH
Serveur dédié : configurer Postfix et Courier pour utiliser TLS-SSL
en Perfect Forward Secrecy

Serveur dédié : retirer Varnish, devenu inutile avec HTTPS

Serveur dédié : installer la dernière version d’OpenSSL sous


Debian

Serveur dédié : activer l’IP canonique du serveur sous Apache

Serveur dédié : mise à jour vers PHP 5.6

MySQL : convertir les tables MyISAM au format InnoDB

Serveur dédié : optimiser toutes les images GIF avec GIFsicle

Serveur dédié : migration de MySQL vers MariaDB

BASH : lister, bloquer et débloquer des adresses IP avec iptables

Serveur dédié : produire une meilleure réserve d’entropie avec


haveged

Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du


domaine

Serveur dédié : mise en place du protocole DANE


8 règles d’or pour bien déployer DNSSEC et DANE

Serveur dédié : installer PHP7 FPM avec FastCGI sous Debian

Serveur dédié : réduire les connexions TIME_WAIT des sockets et


optimiser TCP

Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH,


UNKNOWN et EHLO

Serveur dédié : mettre à jour Apache et configurer le mod_http2


pour HTTP/2

Serveur dédié : ajouter le domaine à la liste HSTS preload

Serveur dédié : ajouter l’authentification DMARC à Postfix et BIND

Serveur dédié : à la recherche de l’inode perdue ou comment


résoudre le problème “no space left on device”

Serveur dédié : installer NginX avec support HTTP2 et certificat


SSL, PHP, MariaDB sous Debian

A lire :  Linux : installer le plugin Flash sous Opera Developer

« Serveur dédié : mettre à jour le noyau Debian de la Kimsufi


Serveur dédié : configurer la limite mémoire pour PHP et Suhosin »

Articles en rapport

Utiliser Rsync pour sauveg- Créer son propre serveur FTP Serveur dédié : changer les
arder un serveur Linux vers avec Filezilla Server DNS du nom de domaine et le
un NAS Synology faire pointer vers le serveur

Articles en rapport:

• Migration de serveur : Kimsufi 250G

• Serveur dédié : configurer la limite mémoire pour PHP et Suhosin

• Bash : réparer les tables MySQL en cas de crash

• Migration de serveur : bonjour Kimsufi 750G

• MySQL : résoudre l’erreur “Table is marked as crashed and last


(automatic?) repair failed”

• Résoudre le non-redémarrage du serveur MySQL : le manque


d’espace sur une partition disque

• Serveur dédié : analyse des performances du serveur

• Serveur dédié : création d’un serveur mail Postfix (sécurisé avec


Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant
une base MySQL d’utilisateurs/domaines virtuels
BA SE D E D ONNÉES C RON D ISQUE D UR LIN UX MYSQL OVH

P HP ROOT SAUVEG A RD E SC RIP TS SÉCURITÉ SERV EUR

SERVEUR D ÉD IÉ TUTO

Matt Biscay

Matt est développeur expert WordPress et WooCommerce chez Codeable.

37 Comments
Écrire un commentaire

Name

Email

Website

Enter your comment here..

P OSTER LE COM M ENTA IRE