Introduction

Dans mon précédent article, je vous avais présenté Plakar, une solution de backup open source française, et comment l’utiliser pour sauvegarder vos fichiers en local.

Avoir des sauvegardes locales, c’est bien. Mais si votre serveur tombe en panne, si vous vous faites cambrioler, ou si un incendie ravage votre maison, vos sauvegardes disparaissent en même temps que vos données. C’est là qu’intervient la règle 3-2-1 : 3 copies de vos données, sur 2 supports différents, dont 1 hors site. Le backup local couvre une partie des deux premières conditions. La sauvegarde hors site complète cette règle en ajoutant une copie de vos données sur un support distant et indépendant.

Dans cet article, nous allons voir comment configurer Plakar pour sauvegarder directement vers Exoscale Simple Object Storage, un stockage objet compatible S3 hébergé en Europe. L’objectif : compléter votre stratégie de sauvegarde avec une copie hors site chiffrée, sans changer vos habitudes avec Plakar.

Note : je tiens à préciser qu’il s’agit d’un test. Tous les rôles, clés IAM et autres seront supprimés avant la publication de cet article, il est donc inutile de tenter d’utiliser les clés ou autres qui apparaissent dans cet article.

1. Pourquoi Exoscale Simple Object Storage ?

Je prévoyais d’écrire un article sur la sauvegarde hors site avec Plakar via S3, et c’est Exoscale qui m’en a donné l’occasion en m’offrant 100 € de crédit pour tester leur solution. Je tiens à le mentionner par souci de transparence, même si les conclusions de cet article sont les miennes.

Pour stocker des sauvegardes hors site, les options ne manquent pas. Alors pourquoi Exoscale ?

Hébergé en Europe : Exoscale opère exclusivement depuis des datacenters européens (Allemagne, Suisse, Autriche, Croatie, Bulgarie). Pour quelqu’un comme moi soucieux de savoir où ses données sont stockées, c’est un critère non négligeable.

Compatible S3 : Exoscale Simple Object Storage expose une API compatible S3, ce qui signifie que tous les outils qui parlent S3 fonctionnent sans modification, dont Plakar.

RGPD et souveraineté : Les données restent dans la zone choisie, sans transfert vers des serveurs hors UE. Exoscale possède une page Compliance détaillée qui liste notamment toutes les certifications par datacenter. De plus, Exoscale met à disposition ses documents de compliance directement depuis votre espace une fois connecté. À noter que l’accès à certains documents se fait après lecture et acceptation du NDA (Non Disclosure Agreement) d’Exoscale.

Pricing transparent : L’ingress (upload) est gratuit. Le stockage est à 0,00002750 € par GiB·heure (Tier 1), soit environ 0,20 €/mois pour 10 GiB ou 2 €/mois pour 100 GiB. L’egress (téléchargement) est facturé 0,02 € par GiB. Pour un usage de sauvegarde où on restaure rarement, ce coût reste marginal. Les tarifs complets sont disponibles sur la page de pricing.

Les alternatives ne manquent pas (OVHcloud, Scaleway, Backblaze B2, IDrive e2, AWS S3) et toutes fonctionneraient avec Plakar. Ce que j’ai apprécié en testant Exoscale : une interface web simple et efficace, et un CLI bien pensé qui couvre l’ensemble des opérations sans avoir à passer par le portail. J’ai toutefois noté que la traduction du portail pourrait être améliorée : certaines sections sont bien traduites en français, d’autres restent en anglais ou avec des traductions approximatives.

2. Configurer Exoscale

Avant de connecter Plakar, il faut mettre en place quatre choses : créer une clé IAM pour utiliser le CLI, installer et configurer ce dernier, créer un bucket, et enfin créer une clé IAM restreinte dédiée à Plakar.

Créer une clé IAM depuis le portail

L’IAM d’Exoscale repose sur deux éléments : un rôle qui définit ce qui est autorisé, et une clé IAM attachée à ce rôle. On va créer deux clés au total : une pour administrer notre compte via le CLI, et une restreinte pour Plakar.

Commençons par la clé d’administration. Rendez-vous dans la section IAM > Clés IAM du portail Exoscale et cliquez sur ADD. Donnez-lui un nom explicite (par exemple exo-cli) et sélectionnez le rôle Owner.

Notez bien la clé et le secret : le secret ne sera affiché qu’une seule fois.

Création de la clé IAM admin dans le portail Exoscale

Installer et configurer le CLI Exoscale

Si vous préférez tout faire via le portail, vous pouvez sauter cette étape. Mais le CLI permet d’aller plus vite et de reproduire facilement la configuration.

Installez le CLI exo en suivant les instructions de la documentation officielle selon votre OS. Une fois installé, lancez la configuration :

exo config

Le CLI vous guidera pas à pas :

No Exoscale CLI configuration found
In order to set up your configuration profile, you will need to retrieve
Exoscale API credentials from your organization's IAM:
    https://portal.exoscale.com/iam/keys

[+] API Key: EXOcac52848ce3c7156960742a5
[+] Secret Key:
[+] Name: exoscale
 Default zone: de-fra-1
  • API Key / Secret Key : les credentials créés à l’étape précédente
  • Name : le nom du profil local dans le CLI, exoscale convient très bien
  • Default zone : choisissez de-fra-1 (Frankfurt), la zone où sera hébergé notre bucket

Vérifiez que tout fonctionne avec exo config show :

Sortie de la commande exo config show dans le terminal

Créer le bucket

Via le portail

Rendez-vous dans la section STORAGE du portail Exoscale, puis cliquez sur AJOUTER. Page Storage du portail Exoscale avec le bouton AJOUTER

Choisissez la zone DE-FRA-1 (Frankfurt), donnez un nom à votre bucket, puis cliquez sur AJOUTER. Formulaire de création du bucket (nom et zone)

Via le CLI

Création du bucket nommé mon-bucket-plakar dans la zone DE-FRA-1.

exo storage mb sos://mon-bucket-plakar --zone de-fra-1

La sortie de la commande ressemblera à ça :

Sortie de la commande exo storage mb dans le terminal

Vérifiez qu’il a bien été créé :

exo storage ls --zone de-fra-1

Exemple de sortie :

2026-04-25 10:02:51 UTC de-fra-1    0 B  mon-bucket-plakar/

À savoir : par défaut, les buckets créés sont en PRIVATE, donc seul le Owner a des droits configurés (Full Control), qu’ils aient été créés via le portail ou le CLI.

Créer une clé IAM restreinte pour Plakar

Plutôt que d’utiliser votre clé principale, on va créer une clé dédiée à Plakar avec uniquement les droits nécessaires sur le service Object Storage. Si cette clé venait à être compromise, l’attaquant n’aurait accès qu’à ce service, rien d’autre sur votre compte.

Via le portail

Dans la section IAM > Roles, créez un nouveau rôle nommé plakar-backup. Configurez la stratégie avec default-service-strategy sur REFUSER et autorisez uniquement le service sos. Il est également possible de choisir si la politique de ce rôle est modifiable ou non. Création du rôle IAM plakar-backup dans le portail Exoscale

Ensuite, dans IAM > Keys, créez une clé nommée plakar-backup-key et attachez-la au rôle plakar-backup qu’on vient de créer. Notez bien le secret : il ne sera plus accessible ensuite. Création de la clé IAM restreinte plakar-backup-key dans le portail Exoscale

Via le CLI

Créez d’abord le fichier de politique :

cat > plakar-sos-policy.json << 'EOF'
{
  "default-service-strategy": "deny",
  "services": {
    "sos": {
      "type": "allow"
    }
  }
}
EOF

Créez le rôle avec cette politique (en suivant la documentation) :

cat plakar-sos-policy.json | exo iam role create plakar-backup \
  --description "Accès Object Storage uniquement pour Plakar" \
  --policy -

Le retour de la commande donnera :

Sortie de la commande exo iam role create dans le terminal

Note : comme pour la configuration via le portail, il est possible de choisir si la politique de ce rôle est modifiable ou non avec l’option --editable=false. Par défaut, c’est à true, comme vous pouvez le voir sur le retour de la commande ci-dessus.

Puis créez la clé IAM associée :

exo iam api-key create plakar-backup-key plakar-backup

Le CLI affichera la clé et le secret :

Sortie de la commande exo iam api-key create dans le terminal

Conservez-les pour l’étape suivante.

3. Connecter Plakar à Exoscale Simple Object Storage

Si vous n’avez pas encore lu l’article précédent sur Plakar en local, je vous invite à le faire avant de continuer. Les concepts de base (Kloset store, snapshots) y sont expliqués en détail.

Ici, on reprend exactement là où on s’était arrêté : le store local fonctionne, mais il reste dans votre machine. On va maintenant configurer un second store, cette fois sur Exoscale Simple Object Storage, pour avoir une copie hors site chiffrée de vos sauvegardes.

L’intégration S3 de Plakar n’est pas incluse par défaut. Il s’agit d’un plugin à installer séparément. Avant d’aller plus loin, un point sur l’authentification qui peut surprendre pour un outil self-hosted.

Un compte Plakar, pourquoi ?

Plakar propose des packages pré-compilés hébergés sur leur infrastructure. Pour y accéder, une connexion est requise (non pas pour surveiller vos sauvegardes, mais pour protéger leur service de distribution). Vos données restent entièrement chez vous, chiffrées côté client.

Si vous ne souhaitez pas créer de compte, vous avez une alternative : compiler le plugin vous-même depuis les sources (Go requis), puis l’installer manuellement.

Option 1 : avec un compte Plakar (packages pré-compilés)

Connectez-vous à votre compte Plakar :

plakar login

La commande ouvre un navigateur pour vous authentifier via email ou GitHub. Si vous êtes sur un serveur, il faut soit utiliser l’email (plakar login -email votre@email.com) soit GitHub avec l’option -no-spawn (plakar login -github -no-spawn) qui affichera une URL à ouvrir dans un navigateur pour initier l’authentification.

Une fois connecté, installez le plugin S3 :

plakar pkg add s3

Vérifiez que le plugin est bien installé :

plakar pkg list

Option 2 : sans compte (compilation depuis les sources)

plakar pkg build s3

Cela génère une archive dans le répertoire courant (par exemple s3_v1.0.7_linux_amd64.ptar).

Installez-la ensuite :

plakar pkg add ./s3_v1.0.7_linux_amd64.ptar

Vérifiez que le plugin est bien installé :

plakar pkg list

Configurer le store S3

On va maintenant enregistrer le bucket Exoscale comme store dans Plakar. L’endpoint pour Frankfurt est sos-de-fra-1.exo.io.

plakar store add exoscale-backup \
  location=s3://sos-de-fra-1.exo.io/mon-bucket-plakar \
  access_key=VOTRE_API_KEY \
  secret_access_key=VOTRE_API_SECRET \
  use_tls=true
  • exoscale-backup : le nom que vous donnez à ce store dans Plakar
  • sos-de-fra-1.exo.io : l’endpoint S3 d’Exoscale pour la zone Frankfurt
  • mon-bucket-plakar : le nom du bucket créé à l’étape précédente
  • access_key / secret_access_key : la clé IAM restreinte créée pour Plakar

Pour automatiser les sauvegardes sans saisir la passphrase à chaque fois, vous pouvez l’intégrer directement dans la configuration du store :

plakar store add exoscale-backup \
  location=s3://sos-de-fra-1.exo.io/mon-bucket-plakar \
  access_key=VOTRE_API_KEY \
  secret_access_key=VOTRE_API_SECRET \
  passphrase=VOTRE_PASSPHRASE \
  use_tls=true

Note de sécurité : la passphrase et les clés API sont stockées en clair dans le fichier de configuration de Plakar. Restreignez ses permissions pour protéger cet accès : chmod 600 ~/.config/plakar/stores.yml (ou l’emplacement correspondant sur votre système). Il est également possible d’utiliser un gestionnaire de secret comme HashiCorp Vault ou 1Password CLI. Pour plus de détails, se référer à la documentation.

Initialiser le Kloset store distant

Avant de pouvoir sauvegarder, il faut initialiser le store sur S3. Plakar va créer sa structure dans le bucket :

plakar at @exoscale-backup create

Plakar vous demandera de définir une passphrase pour ce store distant (sauf si vous l’avez déjà intégrée dans la configuration). Conservez-la précieusement (sans elle, vos sauvegardes sont irrécupérables).

Première sauvegarde vers S3

La commande est identique à une sauvegarde locale, seul le store change :

plakar at @exoscale-backup backup $HOME/Documents
f8a68069: OK ✓ /home/kilian/Documents/.env
f8a68069: OK ✓ /home/kilian/Documents/important.txt
f8a68069: OK ✓ /home/kilian/Documents
f8a68069: OK ✓ /home/kilian
f8a68069: OK ✓ /home
f8a68069: OK ✓ /
info: backup: created unsigned snapshot f8a68069 of size 2.6 KiB in 610.521182ms (wrote 182 KiB)

Vérifiez que le snapshot est bien présent :

plakar at @exoscale-backup ls
2026-04-26T14:01:58Z   f8a68069   2.6 KiB        1s /home/kilian/Documents

Vous pouvez également vérifier côté Exoscale que les données ont bien été écrites dans le bucket, via le portail ou le CLI :

exo storage ls sos://mon-bucket-plakar --zone de-fra-1

Contenu du bucket dans le portail Exoscale après la première sauvegarde

Note : le chiffrement se fait entièrement sur votre serveur. Exoscale ne voit que des données chiffrées dans votre bucket (sans votre passphrase, elles sont illisibles). C’est une des forces de Plakar pour un usage hors site.

Automatisation : pour planifier des sauvegardes régulières vers ce store, la commande est identique à celle du store local (seul le nom du store change). Reportez-vous à la section dédiée de l’article précédent pour la configuration cron ou systemd.

Explorer ses snapshots avec l’interface graphique

Plakar dispose d’une interface graphique intégrée qui permet de naviguer dans ses snapshots et de parcourir les fichiers sauvegardés directement depuis un navigateur. Pour la lancer sur le store distant :

plakar at @exoscale-backup ui -no-auth -no-spawn -cors -addr 192.168.1.40:3001

Les options utilisées ici sont adaptées à un serveur Linux sans interface graphique :

  • -no-auth : supprime le token d’authentification normalement requis pour accéder aux API HTTP (à réserver à un environnement de test sur réseau local)
  • -no-spawn : désactive l’ouverture automatique du navigateur (inutile sur un serveur sans interface graphique)
  • -cors : autorise les requêtes cross-origin, nécessaire pour accéder à l’interface depuis un poste différent de la machine qui l’héberge
  • -addr 192.168.1.40:3001 : définit l’adresse et le port d’écoute. En spécifiant l’IP du serveur sur le réseau local, l’interface est accessible depuis un autre poste du réseau

Note de sécurité : pour plus de protection, préférez binder sur 127.0.0.1 et accéder via un tunnel SSH (ssh -L 3001:localhost:3001 user@serveur). L’interface sera alors disponible à http://localhost:3001 sur votre machine locale, sans exposer le service sur le réseau.

Une fois démarré, ouvrez http://192.168.1.40:3001 dans votre navigateur. Le dashboard liste l’ensemble des snapshots du store :

Dashboard principal de Plakar montrant les trois snapshots du store Exoscale

On retrouve bien les trois snapshots créés au cours de cet article. En cliquant sur un snapshot, il est possible de naviguer dans l’arborescence des fichiers et de prévisualiser leur contenu (ici, une des images du dataset val2017) :

Navigation dans un snapshot Plakar (prévisualisation d'une photo)

C’est particulièrement utile pour vérifier l’intégrité d’une sauvegarde ou retrouver un fichier spécifique avant de lancer une restauration complète.

4. Les chiffres

Le store est en place et opérationnel. Passons aux tests de performance avec des chiffres concrets.

Note : les sorties CLI de Plakar affichent les tailles en MiB (mébioctets, base 2). Les valeurs dans le texte sont converties en MB (mégaoctets, base 10) pour cohérence avec l’interface graphique de Plakar. La conversion est : 1 MiB = 1,049 MB.

Pour ce test, j’ai utilisé le dataset val2017 du projet COCO (un ensemble d’images réelles utilisées pour la recherche en IA, qui représente un bon cas d’usage typique pour un dossier de photos de homelab). L’archive contient 5 000 images pour 788 MB.

Backup initial

Le premier backup est toujours le plus long : Plakar doit transférer l’intégralité des données vers Exoscale.

time plakar at @exoscale-backup backup ./val2017
real    0m23.900s
user    0m0.798s
sys     0m0.400s

788 MB transférés en moins de 24 secondes, soit environ 33 MB/s de débit upload. Un résultat très satisfaisant pour une sauvegarde hors site chiffrée. Les performances réelles dépendent naturellement de votre débit montant.

Côté bucket Exoscale, le volume réellement stocké est d’environ 815 MB pour 788 MB de source (un léger overhead d’environ 3,5 %, dû aux métadonnées et à la structure du store Plakar).

Backup incrémental

Pour simuler un backup incrémental, j’ai supprimé 91 images (il en restait 4 909), puis relancé la sauvegarde.

time plakar at @exoscale-backup backup ./val2017
real    0m3.573s
user    0m0.783s
sys     0m0.369s

3,5 secondes pour un backup incrémental sur un dataset de 5 000 images, soit environ 6,7 fois plus rapide que le backup initial. Plakar ne transfère que les blocs modifiés, ce qui rend les sauvegardes quotidiennes quasi instantanées une fois le premier backup effectué.

Restauration depuis S3

C’est le test le plus important : une sauvegarde que vous n’avez jamais restauré n’est pas une sauvegarde. Pour simuler le pire scénario (une machine qui lâche avec toutes les données locales perdues), j’ai supprimé le dossier val2017 et restauré depuis le bucket sur Exoscale.

On commence par lister les snapshots disponibles :

plakar at @exoscale-backup ls
2026-04-26T15:42:48Z   37f776a8   762 MiB        2s /home/kilian/val2017
2026-04-26T15:38:40Z   aea3b27f   777 MiB       21s /home/kilian/val2017
2026-04-26T14:01:58Z   f8a68069   2.6 KiB        1s /home/kilian/Documents

On voit ici trois snapshots : les deux premiers correspondent à nos sauvegardes de val2017 : le backup initial (aea3b27f) et le backup incrémental après suppression de 91 fichiers (37f776a8). C’est le comportement normal de Plakar : chaque backup crée un nouveau snapshot, ce qui vous permet de restaurer n’importe quel état antérieur. Le troisième snapshot correspond à un backup de Documents effectué lors de la configuration initiale.

On restaure le snapshot le plus récent :

# Simuler la perte des données
rm -rf ./val2017

# Restaurer depuis S3 uniquement
time plakar at @exoscale-backup restore 37f776a8 -to ./val2017-restored
real    5m54.869s
user    0m0.866s
sys     0m0.385s

~799 MB restaurés en un peu moins de 6 minutes depuis Frankfurt. Pour mettre ce chiffre en perspective : le téléchargement initial du dataset val2017.zip depuis les serveurs COCO avait pris près d’une heure. En cas de sinistre réel, Plakar + Exoscale vous permettent de récupérer vos données bien plus rapidement que de les re-télécharger ou re-générer depuis zéro.

C’est logiquement plus long que le backup. On télécharge l’intégralité du snapshot depuis S3, sans le bénéfice de la déduplication à l’upload. Les 4 909 images sont intactes et récupérables depuis le cloud, sans aucune donnée locale.

Conclusion

Plakar et Exoscale Simple Object Storage forment une combinaison cohérente pour mettre en place une stratégie de sauvegarde hors site. La mise en place ne prend que quelques minutes, notamment grâce au système IAM d’Exoscale qui permet en quelques clics de créer une clé restreinte au seul service Object Storage. L’interface graphique intégrée permet de naviguer dans ses snapshots et de vérifier l’intégrité d’une sauvegarde avant restauration (un complément pratique à la ligne de commande).

Les chiffres parlent d’eux-mêmes : 788 MB traités en 24 secondes, un backup incrémental en 3,5 secondes, et une restauration complète en moins de 6 minutes. À 0,00002750 € par GiB·heure (Tier 1), le coût mensuel est très prévisible :

Volume stockéCoût mensuel estimé
~815 MB~0,016 €/mois
10 GiB~0,20 €/mois
50 GiB~1,00 €/mois
100 GiB~2,00 €/mois
500 GiB~9,90 €/mois

(Estimations basées sur 720 h/mois, soit 30 jours × 24 h.)

Pour un usage de sauvegarde où on restaure rarement, le coût se limite presque exclusivement au stockage. L’ingress étant gratuit sur Exoscale, seuls les téléchargements (restaurations) sont facturés.

Ce qui me plaît avec ces deux solutions : Plakar est open source et français, Exoscale est européen et respectueux du RGPD. Vos données restent en Europe, chiffrées avant même de quitter votre machine. Exoscale ne stocke que des blocs chiffrés dans votre bucket, inutilisables sans votre passphrase.

Que vous gériez un homelab ou une infrastructure de production, cette solution mérite sérieusement d’être considérée pour votre stockage hors site.