====== Self-hosting for teams - 6 - Sauvegarde chiffrée distante ======
Le but des backups est de conserver une copie des bases de données de chaque services qui pourra servir en cas de corruption de données ou de pertes de données sur le serveur.
===== Configuration du backup automatique régulier avec duplicity et cron =====
Nous allons donc générer des clés SSH pour transmettre les fichiers de manière chiffrée, puis des clés GPG pour que les fichiers soient chiffrés au repos. Duplicity est un logiciel basé sur ''%%rsync%%'' qui gère précisément ce type de copie.
==== Duplicity ====
Ouvrez un terminal vers votre home server et un autre vers votre serveur de backup. Le tutoriel de [[https://www.digitalocean.com/community/tutorials/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu|DigitalOcean]] explique comment installer ''duplicity'', préparer les clés SSH et GPG.
Commencez [[https://www.digitalocean.com/community/tutorials/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu#how-to-install-duplicity-from-source-on-ubuntu|par installer duplicity]] sur votre home server. Si la commande ''%%python setup.py install%%'' produit une erreur, essayez d'installer ''%%gcc%%'' via ''%%sudo apt-get install build-essential%%''.
Créez ensuite une paire de clés SSH sur votre home server.
sudo su
cd
ssh-keygen -t rsa
''%%duplicity%%'' semble ne pas fonctionner quand la clé SSH elle-même est chiffrée. Attention donc à ne pas donner de //passphrase// après ''%%ssh-keygen -t rsa%%''.
ssh-copy-id root@URL_DU_SERVEUR_DU_BACKUP
Il vous sera demandé le mot de passe ''%%root%%'' de votre serveur backup.
Testez maintenant la connexion SSH :
ssh root@URL_DU_SERVEUR_DU_BACKUP
Vous devriez être directement connecté dans votre session ''%%root%%'' de votre serveur backup. Lancez ''%%exit%%'' pour revenir à votre session home serveur.
Vous pouvez ensuite créer vos clés GPG [[https://www.digitalocean.com/community/tutorials/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu#create-gpg-keys|en suivant le tutoriel Digital Ocean]], jusqu'à //How To Use Duplicity//. Nous supposerons l'identifiant clé GPG que vous avez créée est ''%%ID_CLE%%'' .
Pour tester ''%%duplicity%%'', sur votre serveur de backup, créez un répertoire temporaire :
mkdir /tmp/bkp
Sur votre home serveur, créez des fichiers test :
cd /tmp/
mkdir /tmp/test
touch /tmp/test/file{1..1000}
Puis, sur le home serveur, copiez votre clé GPG sur le serveur backup.
gpg --export-secret-keys ID_CLE > key.cer
scp key.cer BACKUP_HOST:.
Et copiez les fichiers via ''%%duplicity%%''.
duplicity --encrypt-key ID_CLE /tmp/test sftp://root@IP_SERVEUR_TEST//tmp/bkp
Sur le serveur backup, importez la clé copiée et déchiffrez le backup.
gpg --import key.cer
duplicity file:///tmp/bkp/ /tmp/restore/
ll /tmp/restore/
Si le test s'est bien déroulé, vous devriez voir une liste de fichiers ''%%file1 file2 ...%%''.
==== Backup automatique avec Cron ====
Le backup utilise deux scripts, l'un exécutant le second, pour faire la sauvegarde des données des containers.
Le tutoriel de [[https://www.digitalocean.com/community/tutorials/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu#how-to-install-duplicity-from-source-on-ubuntu|DigitalOcean]] explique comment installer ''%%duplicity%%'', préparer les clés SSH et GPG.
Créez un dossier ''%%backup_script%%'' pour y placer les scripts :
cd
mkdir backup_script
mkdir /tmp/bkp
cd backup_script
nano backup.sh
nano duplicity.sh
Pour les fichiers, voici les contenus à ajouter :
# backup.sh
script ~/backup_script/backup_`date -I`.log -c "sh ~/backup_script/duplicity.sh $1 $2"
cat ~/backup_script/backup_`date -I`.log | mail -s "Log de backup `date -I`" -t adressedu@destinataire.com
# duplicity.sh
echo "----------------------------------"
echo "Début de backup data serveur"
echo "----------------------------------"
echo
echo Source: $1
echo Destination: $2
echo
PASSPHRASE="clédechiffrement" duplicity --encrypt-key ID_CLE $1 $2
echo "----------------------------------"
echo "Fin de backup data serveur"
echo "----------------------------------"
Changer la clé par celle utilisée pour la génération (GPG), ainsi que son id.
Enfin, c'est le service ''%%cron%%'' qui s'occupe d'exécuter les backups à des moments choisis, il faut éditer le fichier ''%%/etc/crontab%%''. Pour tester, on paramètre l'execution toutes les 5 minutes:
# ajouter au fichier
*/5 * * * * root sh ~/backup_script/backup.sh ~/ file:///tmp/bkp/