{"id":2675,"date":"2013-09-08T10:20:49","date_gmt":"2013-09-08T08:20:49","guid":{"rendered":"http:\/\/www.collet-matrat.com\/?p=2675"},"modified":"2013-09-08T10:55:39","modified_gmt":"2013-09-08T08:55:39","slug":"externalisez-sereinement-vos-sauvegardes-avec-duplicity","status":"publish","type":"post","link":"https:\/\/www.collet-matrat.com\/?p=2675","title":{"rendered":"Externalisez sereinement vos sauvegardes avec Duplicity"},"content":{"rendered":"<p style=\"text-align: center;\"><a href=\"https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2013\/08\/hard_disk.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2746\" alt=\"hard_disk\" src=\"https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2013\/08\/hard_disk.jpg?resize=584%2C389&#038;ssl=1\" width=\"584\" height=\"389\" srcset=\"https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2013\/08\/hard_disk.jpg?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2013\/08\/hard_disk.jpg?resize=300%2C199&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.collet-matrat.com\/wp-content\/uploads\/2013\/08\/hard_disk.jpg?resize=450%2C300&amp;ssl=1 450w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Si vous administrez des serveurs vous avez certainement d\u00e9j\u00e0 r\u00e9fl\u00e9chit aux probl\u00e8mes d'externalisation de vos sauvegardes. Pour ma part j'\u00e9tais \u00e0 la recherche depuis pas mal de temps d'une solution permettant de r\u00e9aliser une externalisation avec comme contrainte principale le fait que les sauvegardes soient stock\u00e9es d\u2019une mani\u00e8re chiffr\u00e9e sur le serveur de destination. Bien entendu, il existe le classique Rsync (et ses d\u00e9riv\u00e9s), ou bien encore <a href=\"http:\/\/www.collet-matrat.com\/?p=1793\" target=\"_blank\">Rdiff-Backup,<\/a> mais pour moi cette solution n'est pas viable dans tous les cas car si le transfert reste s\u00e9curis\u00e9 il n'en va pas de m\u00eame pour le stockage !<\/p>\n<p style=\"text-align: justify;\">J'ai r\u00e9cemment d\u00e9couvert une solution qui me semble int\u00e9ressante : Duplicity. Dans les grandes lignes Duplicity permet de r\u00e9aliser une sauvegarde distante au travers de pas mal de protocoles : scp, ftp, ssh, rsync, s3 (et compatibles ...). Les sauvegardes peuvent \u00eatre compl\u00e8tes ou incr\u00e9mentales (\u00e0 priori en mode \"block\" gr\u00e2ce \u00e0 l'utilisation de librsync). Duplicity prend \u00e9galement en charge le chiffrement des fichiers de sauvegarde soit avec une cl\u00e9 sym\u00e9trique soit avec un syst\u00e8me de cl\u00e9 publique\/priv\u00e9e (personnellement j'ai opt\u00e9 pour la premi\u00e8re solution).<\/p>\n<p style=\"text-align: justify;\">Malheureusement Duplicity semble \u00eatre un peu \"rude\" \u00e0 l'utilisation. C'est pour cette raison qu'est n\u00e9 le projet \"<a href=\"http:\/\/zertrin.org\/projects\/duplicity-backup\/\" target=\"_blank\">Duplicity Backup<\/a>\". Il s'agit d'un script shell associ\u00e9 \u00e0 un fichier de conf. L'objectif de ce script est de piloter, simplement et efficacement, le fonctionnement de vos sauvegardes (en faisant appel \u00e0 Duplicity).<\/p>\n<p style=\"text-align: justify;\">Voici donc un petit how-to r\u00e9sultant de mes premi\u00e8res exp\u00e9riences avec ce script. L'objectif pour moi \u00e9tait d'externaliser la sauvegarde de serveurs fonctionnant sous Linux Debian 6. J'avais initialement pr\u00e9vu de stocker mes sauvegardes sur Amazon S3 mais en effectuant quelques recherches j'ai trouv\u00e9 un syst\u00e8me compatible proposant un tarif plus avantageux : <a href=\"http:\/\/dreamhost.com\/cloud\/dreamobjects\/\" target=\"_blank\">DreamHost<\/a> proposant le Go de donn\u00e9es stock\u00e9e \u00e0 7cts\/$ \/ mois.<\/p>\n<p style=\"text-align: justify;\">C'est parti !<\/p>\n<p style=\"text-align: justify;\">On va partir du principe que vous disposez d'un distrib Debian fonctionnelle (version 6 mais \u00e7a devrait \u00e9galement fonctionner avec les versions plus r\u00e9centes). Python doit \u00eatre pr\u00e9alablement install\u00e9 (c'est normalement le cas par d\u00e9faut).<\/p>\n<ul>\n<li style=\"text-align: justify;\">La premi\u00e8re chose \u00e0 faire est d'installer les packages n\u00e9cessaires au fonctionnement de Duplicity (le package \"python-boto\" permet l'interaction avec un syst\u00e8me de type S3) :<\/li>\n<\/ul>\n<div>\n<div>\n<pre lang=\"text\">apt-get install librsync1 python python-boto python-dev librsync-dev wget unzip<\/pre>\n<\/div>\n<div>\n<ul>\n<li style=\"text-align: justify;\">Cr\u00e9ez ensuite un r\u00e9pertoire au sein duquel nous allons placer l'installeur de Duplicity, le script ainsi que le fichier de conf. La cr\u00e9ation de ce r\u00e9pertoire au sein de \"\/home\" est propos\u00e9e \u00e0 titre d'exemple. Libre \u00e0 vous de choisir l'emplacement qui vous convient le mieux !<\/li>\n<\/ul>\n<\/div>\n<div>\n<pre lang=\"text\">mkdir \/home\/duplicity-backup<\/pre>\n<\/div>\n<div>\n<ul>\n<li style=\"text-align: justify;\">On se place ensuite au sein de ce r\u00e9pertoire :<\/li>\n<\/ul>\n<\/div>\n<div>\n<pre lang=\"text\">cd \/home\/duplicity-backup<\/pre>\n<\/div>\n<div>\n<ul>\n<li style=\"text-align: justify;\">On t\u00e9l\u00e9charge Duplicity \u00e0 partir du site officiel (\u00e0 ajuster car la version aura pr\u00e9alablement \u00e9volu\u00e9e lorsque vous lirez ces lignes ...) :<\/li>\n<\/ul>\n<\/div>\n<div>\n<pre lang=\"text\">wget http:\/\/www.collet-matrat.com\/fichiers_download\/duplicity-backup\/duplicity-0.6.21.tar.gz<\/pre>\n<\/div>\n<div>\n<ul>\n<li>On d\u00e9compacte le tout :<\/li>\n<\/ul>\n<\/div>\n<div>\n<div>\n<pre lang=\"text\">tar -xzvf duplicity-0.6.21.tar.gz<\/pre>\n<\/div>\n<div>\n<ul>\n<li>On lance l'installation :<\/li>\n<\/ul>\n<\/div>\n<div>\n<div>\n<pre lang=\"text\">cd duplicity-0.6.21\r\npython setup.py install<\/pre>\n<p style=\"text-align: justify;\">Si vous rencontrez des erreurs v\u00e9rifiez bien d'avoir install\u00e9 \"librsync-dev\" ( <em>apt-get install librsync-dev<\/em> )<\/p>\n<\/div>\n<div style=\"text-align: left;\">\n<ul>\n<li style=\"text-align: justify;\">Il faut ensuite mettre en place le script et son fichier de conf :<\/li>\n<\/ul>\n<pre lang=\"text\">cd ..\r\nwget http:\/\/www.collet-matrat.com\/fichiers_download\/duplicity-backup\/duplicity-backup.sh\r\nwget http:\/\/www.collet-matrat.com\/fichiers_download\/duplicity-backup\/duplicity-backup.conf\r\nchmod 755 duplicity-backup.sh<\/pre>\n<\/div>\n<div>\n<ul>\n<li style=\"text-align: justify;\">On \u00e9dite ensuite le fichier de conf de Duplicity Backup (je ne d\u00e9taille ici que les principales directives - pour adapter plus finement la configuration \u00e0 vos besoins reportez vous \u00e0 la documentation de Duplicity-Backup disponible <a href=\"https:\/\/github.com\/zertrin\/duplicity-backup\" target=\"_blank\">ICI<\/a>):<\/li>\n<\/ul>\n<pre lang=\"text\">vi duplicity-backup.conf<\/pre>\n<ul>\n<li style=\"text-align: justify;\">Si vous utilisez un syst\u00e8me de stockage AWS S3 ou compatible (comme le stockage de DreamHost par exemple) vous devez renseigner <strong>lignes 43 et 44<\/strong> votre cl\u00e9 d'API et votre cl\u00e9 secr\u00e8te<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>Ligne 57<\/strong> maintenez le param\u00e8tre par d\u00e9faut \"ENCRYPTION='yes'\" si vous souhaitez que vos sauvegardes soient chiffr\u00e9es<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>Ligne 65<\/strong> mentionnez votre cl\u00e9 de chiffrement (si vous optez pour un chiffrage \"sym\u00e9trique\" \/ ce que je vous conseille - certes un peu moins s\u00fbr mais quand m\u00eame beaucoup&nbsp; plus pratique ...)<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\">Commentez les <strong>lignes 78 et 79<\/strong> si vous optez pour un chiffrage sym\u00e9trique<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>Ligne 85<\/strong> indiquez la racine du backup (utilisez un truc du style 'ROOT=\"\/\"' on d\u00e9finira plus tard la liste des r\u00e9pertoires \u00e0 sauvegarder )<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>Ligne 99<\/strong> mentionnez la destination de votre backup. Si vous sauvegardez directement sur AWS S3 la syntaxe est d\u00e9j\u00e0 pr\u00eate, vous n'avez qu'\u00e0 mentionner le nom de votre bucket de destination (avec un nom de r\u00e9pertoire). Si vous sauvegardez vers un syst\u00e8me compatible S3 (comme DreamHost par exemple) il va falloir utiliser une syntaxe du type : <em>DEST=\"s3:\/\/objects.dreamhost.com\/le_nom_de_votre_bucket\/le_repertoire_de_sauvegarde\/<\/em>\"<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>Ligne 129<\/strong> mentionnez le r\u00e9pertoire \u00e0 sauvegarder (si vous avez plusieurs r\u00e9pertoires \u00e0 sauvegarder regarder l'exemple entre les lignes 122 et 126<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\">Si vous avez des r\u00e9pertoires \u00e0 exclure \u00e7a se passe entre les <strong>lignes 134 et 137<\/strong> (n'oubliez pas de commenter si vous n'en avez pas besoin)<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>La ligne 146<\/strong> d\u00e9finie (entre autre) la politique de sauvegarde : par d\u00e9faut faire un full tous les 14 jours (on peux \u00e9galement passer d'autres param\u00e8tres \u00e0 Duplicity par le biais de cette ligne \/\/ plus d'infos : <a href=\"http:\/\/duplicity.nongnu.org\/duplicity.1.html\" target=\"_blank\">ICI<\/a>)<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\"><strong>La ligne 161<\/strong> indique au syst\u00e8me combien de full conserver sur le stockage distant (il existe de nombreuses possibilit\u00e9s en mati\u00e8re de conservation des donn\u00e9es \/ reportez vous \u00e0 la doc !)<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\">On d\u00e9finie <strong>ligne 183<\/strong> le r\u00e9pertoire de stockage des log de Duplicity (\/var\/log\/duplicity par exemple)<\/li>\n<\/ul>\n<ul>\n<li style=\"text-align: justify;\">Et enfin, \u00e0 partir de la <strong>ligne 195<\/strong> le param\u00e9trage d'un \u00e9ventuel (et optionnel) envoi de mail lors de chaque backup<\/li>\n<\/ul>\n<p>Une fois ce param\u00e9trage effectu\u00e9, on peut lancer une premi\u00e8re sauvegarde \u00e0 l'aide de la commande<br \/>\n<\/p>\n<pre lang=\"text\">\/home\/duplicity-backup\/duplicity-backup.sh -c duplicity-backup.conf -b<\/pre>\n<\/div>\n<div>Pour obtenir la liste des commandes disponibles vous pouvez utiliser<\/div>\n<p><\/p>\n<div>\n<pre lang=\"text\">\/home\/duplicity-backup\/duplicity-backup.sh -c duplicity-backup.conf<\/pre>\n<\/div>\n<div>La restauration peut \u00eatre r\u00e9alis\u00e9e fichier par fichier \u00e0 l'aide de la commande<\/div>\n<p><\/p>\n<div>\n<pre lang=\"text\">\/home\/duplicity-backup\/duplicity-backup.sh -c duplicity-backup.conf --restore-file fichier_\u00e0_restaurer [fichier_de_destination]<\/pre>\n<\/div>\n<div>Il est \u00e9galement possible de restaurer l'int\u00e9gralit\u00e9 d'une sauvegarde<\/div>\n<p><\/p>\n<div>\n<pre lang=\"text\">\/home\/duplicity-backup\/duplicity-backup.sh -c duplicity-backup.conf --restore [r\u00e9pertoire_de_destination]<\/pre>\n<\/div>\n<div><\/div>\n<div style=\"text-align: justify;\">Et pour finir, deux recommandations importantes :<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div>\n<ul>\n<li style=\"text-align: justify;\"><strong>n'oubliez pas de sauvegarder votre cl\u00e9 de chiffrement en lieu s\u00fbr !<\/strong><\/li>\n<li style=\"text-align: justify;\">consultez la documentation de Duplicity (<a href=\"http:\/\/duplicity.nongnu.org\/duplicity.1.html\" target=\"_blank\">ICI<\/a>) &amp; de Duplicity-Backup (<a href=\"https:\/\/github.com\/zertrin\/duplicity-backup\" target=\"_blank\">ICI<\/a>) pour d\u00e9couvrir toute la puissance de cet outil et du script associ\u00e9 !<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div>Photo by : <a href=\"http:\/\/www.flickr.com\/photos\/kubina\/\" target=\"_blank\">Jeff Kubina<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Si vous administrez des serveurs vous avez certainement d\u00e9j\u00e0 r\u00e9fl\u00e9chit aux probl\u00e8mes d'externalisation de vos sauvegardes. Pour ma part j'\u00e9tais \u00e0 la recherche depuis pas mal de temps d'une solution permettant de r\u00e9aliser une externalisation avec comme contrainte principale le &hellip; <a href=\"https:\/\/www.collet-matrat.com\/?p=2675\">Lire la suite <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Externalisez sereinement vos sauvegardes avec Duplicity (Blog)","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[123,91,86,100],"tags":[],"class_list":["post-2675","post","type-post","status-publish","format-standard","hentry","category-amazon-aws","category-howto","category-securite","category-stockage"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2675"}],"version-history":[{"count":68,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions"}],"predecessor-version":[{"id":2807,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions\/2807"}],"wp:attachment":[{"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.collet-matrat.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}