Restic est l’outil de backup en ligne de commande le plus puissant en 2026 (informations vérifiées en avril 2026, susceptibles d’évoluer) : déduplication, chiffrement client-side, multi-backends (local, S3, B2, R2, SFTP, REST), snapshots immuables, compression. Pour les sysadmins et freelances qui veulent des backups VPS robustes au-delà des snapshots Hetzner, Restic est l’outil incontournable. Voici le guide pratique.
Ce guide général couvre tout. Les articles connexes détaillent : backup VPS avec Restic, Restic vs Borgbackup vs rsync, Restic + Backblaze B2, restauration testée mensuelle.
Pourquoi Restic
- Open-source BSD, écrit en Go, binaire unique multi-OS
- Déduplication : ne stocke qu’une fois les blocs identiques entre snapshots
- Chiffrement client-side AES-256 avant upload
- Multi-backends : local, S3, B2, R2, Wasabi, MinIO, REST, SFTP, etc.
- Restauration sélective : un fichier, un dossier, un point dans le temps
- Compression intégrée (zstd)
- Snapshots versionnés avec rétention granulaire (last-N, daily-N, weekly-N, monthly-N)
Cas d’usage
- Backup VPS complet vers B2/R2 chaque nuit
- Sauvegarde laptop dev vers serveur SFTP
- Backup uploads applicatifs (ne pas garder localement)
- Snapshots avant migrations risquées
- Backup à rétention longue avec dédup automatique
Étape 1 — Installation
# Ubuntu/Debian
sudo apt install restic
# Ou binaire le plus récent
wget https://github.com/restic/restic/releases/download/v0.17.x/restic_0.17.x_linux_amd64.bz2
bunzip2 restic_*.bz2
chmod +x restic_*
sudo mv restic_* /usr/local/bin/restic
restic version
Étape 2 — Initialiser un repo Backblaze B2
# Variables d'env (mettre dans .env file lu par cron)
export B2_ACCOUNT_ID=xxx
export B2_ACCOUNT_KEY=yyy
export RESTIC_REPOSITORY=b2:my-backup-bucket:/server-prod
export RESTIC_PASSWORD=...32+chars...
# Initialiser une seule fois
restic init
NOTER LE PASSWORD : sans lui vos backups sont irrécupérables. Stockage password manager + impression papier sécurisée.
Étape 3 — Premier backup
# Backup complet
restic backup /etc /home /var/www /var/lib/postgresql
# Avec exclusions
restic backup /home --exclude="**/node_modules" --exclude="**/.cache"
# Avec tags
restic backup /var/www --tag prod --tag webapp
Étape 4 — Lister snapshots
restic snapshots
restic snapshots --tag prod
restic stats latest
restic ls latest
Étape 5 — Restauration
# Restaurer un snapshot complet
restic restore latest --target /tmp/restore
# Restaurer un fichier spécifique
restic restore latest --target /tmp/restore --include /home/user/important.txt
# Monter le snapshot comme système de fichiers (FUSE)
mkdir /mnt/restic
restic mount /mnt/restic
ls /mnt/restic/snapshots/latest/
Étape 6 — Rétention (forget + prune)
# Stratégie 7d daily, 4w weekly, 12m monthly
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
Étape 7 — Automatisation cron
# /etc/cron.daily/restic-backup
#!/bin/bash
set -e
source /root/.restic.env
restic backup /etc /var/www /var/lib/postgresql --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
restic check --read-data-subset=2%
Étape 8 — Test de restauration mensuel
Voir notre tutoriel test de restauration. Sans test, le backup n’existe pas.
Adaptation Afrique de l’Ouest
Pour PME africaine, Restic + Backblaze B2 est le combo gagnant : ~6 USD/To/mois de stockage, déduplication massive (~70 % d’économie sur backups journaliers), restauration ultra-rapide. Coût marginal pour une assurance vie cyber.
Pour approfondir
- Backup VPS avec Restic
- Restic vs Borgbackup vs rsync
- Restic + Backblaze B2
- Restauration testée
- Documentation : restic.net
Où héberger votre projet web ?
Hostinger propose des plans dimensionnés pour les freelances et PME. Lien d’affiliation — pas de surcoût pour vous.
Lien d affiliation. Si vous achetez via ce lien, le blog reçoit une petite commission sans surcoût pour vous.
Étape 1 — Préparer un dépôt distant chiffré
Avant de lancer la moindre sauvegarde, on choisit un emplacement durable. Pour un freelance basé à Dakar ou Abidjan, le couple gagnant en 2026 reste un VPS Hetzner ou OVH plus un Object Storage S3 compatible (Backblaze B2, Wasabi, Scaleway). Le tarif Backblaze B2 démarre à 6 USD/To/mois, soit ≈ 3 936 FCFA au taux fixe 1 EUR = 655,957 FCFA après conversion via la BCEAO. Le dépôt distant évite la perte conjointe données + sauvegardes.
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/itsc-backups"
export AWS_ACCESS_KEY_ID="003xxxxxxxxxxxxxxx"
export AWS_SECRET_ACCESS_KEY="K003xxxxxxxxxxxxxxxxxxxxxxxxx"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
restic init
La sortie attendue affiche created restic repository xxxx at s3:.... Conservez le mot de passe dans un gestionnaire (Bitwarden, KeePassXC) : sans lui, le dépôt est définitivement illisible, c’est le prix du chiffrement AES-256 côté client.
Étape 2 — Première sauvegarde et vérification
On commence par un dossier critique pour valider la chaîne complète avant de tout pousser. La déduplication Restic découpe les fichiers en chunks via Content-Defined Chunking ; un fichier de 2 Go modifié partiellement ne renvoie que les chunks changés, ce qui économise la bande passante d’un VPS facturé au transfert.
restic backup /var/www /etc /home --tag prod --exclude-caches
restic snapshots
restic check --read-data-subset=5%
La commande check télécharge 5 % des données pour valider qu’aucun chunk n’est corrompu côté distant. À exécuter au moins une fois par semaine sur un cron dédié, sinon vous découvrirez le problème le jour de la restauration.
Étape 3 — Politique de rétention et oubli des anciens snapshots
Sans politique de rétention, le dépôt grossit indéfiniment. La règle qui marche bien pour un site WordPress ou un SaaS Directus tient en cinq paramètres : 7 quotidiens, 4 hebdomadaires, 12 mensuels, 2 annuels. Cela couvre un incident détecté tardivement (audit fiscal, demande client trois mois plus tard).
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --keep-yearly 2 --prune
L’option --prune supprime physiquement les chunks orphelins après le calcul. La commande peut prendre 10 à 30 minutes sur un dépôt de 200 Go, planifiez-la la nuit hors fenêtre de sauvegarde principale.
Étape 4 — Automatiser via systemd timer (sans cron)
Sur un Ubuntu 24.04 LTS, systemd timer remplace avantageusement cron : journalisation native, dépendances entre unités, rattrapage si la machine était éteinte. On crée deux unités : une pour le backup, une pour la rétention hebdomadaire.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=Restic backup quotidien
[Service]
Type=oneshot
EnvironmentFile=/root/.restic-env
ExecStart=/usr/local/bin/restic backup /var/www /etc /home --tag auto
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Lance restic backup chaque nuit
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.target
Activez avec systemctl enable --now restic-backup.timer. Vérifiez le déclenchement réel via systemctl list-timers restic-backup qui affiche la prochaine exécution et la dernière en succès.
Étape 5 — Restaurer un fichier précis ou tout un volume
La restauration est l’unique critère qui valide une stratégie de backup. Faites un test mensuel, sinon vous ne savez pas si ça marche. Restic permet de monter le dépôt comme un système de fichiers FUSE, très pratique pour piocher un seul fichier sans tout télécharger.
mkdir -p /mnt/restic
restic mount /mnt/restic &
ls /mnt/restic/snapshots/latest/var/www/
cp /mnt/restic/snapshots/latest/var/www/wp-config.php /tmp/
fusermount -u /mnt/restic
Pour une restauration complète après crash, restic restore latest --target /mnt/recovery --include /var/www recrée l’arborescence à l’identique avec les permissions et timestamps d’origine.
Étape 6 — Surveiller l’état avec Prometheus et Grafana
Un backup silencieux qui échoue depuis trois semaines, c’est le pire scénario. L’exporter restic-exporter de Ngosang publie des métriques Prometheus : nombre de snapshots, âge du dernier, taille du dépôt. On scrape, on alerte sur Alertmanager, et on relaie sur Telegram pour une astreinte freelance.
docker run -d --name restic-exporter -e RESTIC_REPOSITORY="$RESTIC_REPOSITORY" -e RESTIC_PASSWORD_FILE=/pass -v /root/.restic-pass:/pass:ro -p 9753:8001 ngosang/restic-exporter:latest
L’alerte type : time() - restic_backup_timestamp > 90000 déclenche si aucun snapshot n’est arrivé depuis 25 heures. Couplez avec un dashboard Grafana ID 14933 prêt à l’emploi.
Étape 7 — Sauvegarder une base PostgreSQL ou MySQL proprement
On ne sauvegarde jamais directement les fichiers d’une base relationnelle en cours d’écriture : risque de corruption. La méthode propre passe par un dump streamé vers Restic via --stdin, ce qui évite l’étape disque intermédiaire.
pg_dump -U postgres -F c mabase | restic backup --stdin --stdin-filename mabase.dump --tag postgres
mysqldump --single-transaction --routines mabase | restic backup --stdin --stdin-filename mabase.sql --tag mysql
Pour restaurer : restic dump latest /mabase.dump | pg_restore -U postgres -d mabase_restored. Testez sur une base vide avant la prod, et chronométrez : un dump de 5 Go prend 2 à 4 minutes sur un VPS 4 vCPU.
Étape 8 — Coût mensuel réel pour un freelance ouest-africain
Pour 100 Go de données effectives (200 Go bruts dédupliqués à ≈ 50 %), Backblaze B2 facture 0,60 USD/mois soit ≈ 393 FCFA. Le transfert sortant pour restauration coûte 0,01 USD/Go, donc 1 Go récupéré = 6,55 FCFA. C’est imbattable face à un disque externe local qui peut brûler en cas de coupure électrique brutale fréquente à Dakar pendant l’hivernage.
Sur le même thème, consultez aussi notre comparatif BorgBackup vs Restic et notre checklist sauvegarde VPS.
Étape 9 — Sécuriser les credentials et le mot de passe du dépôt
Le talon d’Achille d’une stratégie Restic est la fuite des variables d’environnement. Sur un serveur partagé entre plusieurs services (un Coolify, un Plesk, des conteneurs Docker), exposer AWS_SECRET_ACCESS_KEY dans un fichier lisible par tous équivaut à donner les clés du dépôt à un attaquant. La règle minimale : le fichier doit appartenir à root et avoir les permissions 600.
chmod 600 /root/.restic-env
chown root:root /root/.restic-env
chattr +i /root/.restic-env # immuable, modifiable seulement après chattr -i
Pour explorer plus loin, créez sur Backblaze B2 ou Wasabi un Application Key restreint au seul bucket de sauvegarde, sans permission de lecture sur les autres buckets. En cas de compromission, l’attaquant ne peut pas explorer toute votre infrastructure cloud. Sur Backblaze, l’option List All Bucket Names doit rester décochée pour ce key spécifique.
Pour la rotation, prévoyez un changement de clé tous les 90 jours et un changement du mot de passe Restic via restic key add (ajout d’un nouveau mot de passe) puis restic key remove (retrait de l’ancien). Cette procédure ne réécrit pas les chunks chiffrés, l’opération prend moins d’une minute même sur un dépôt de 500 Go.
Étape 10 — Stratégie 3-2-1 adaptée à un VPS unique
La règle 3-2-1 (3 copies, 2 supports différents, 1 hors site) est l’étalon-or de la sauvegarde. Sur un budget freelance, elle se décline ainsi : la copie de production sur le VPS, un dépôt Restic principal sur Backblaze B2 région EU-Central, un second dépôt Restic miroir sur Wasabi région Amsterdam. Les deux fournisseurs facturent au transfert sortant uniquement, donc dupliquer ne double pas le coût.
restic -r s3:s3.eu-central-003.backblazeb2.com/itsc-backups copy --from-repo s3:s3.eu-central-003.backblazeb2.com/itsc-backups --from-password-file /root/.restic-pass -r s3:s3.wasabisys.com/itsc-mirror
La commande copy transfère uniquement les chunks manquants côté destination, donc seul le delta journalier circule. Comptez 2 à 5 minutes pour synchroniser un delta de 1 Go entre les deux fournisseurs européens, ce qui reste invisible pour un site en production.
Une variante locale très pratique pour Dakar ou Abidjan : un disque dur USB chiffré LUKS branché une fois par semaine sur un poste de bureau, qui sert de troisième copie totalement déconnectée. Restic supporte nativement local:/media/usb-backup comme dépôt, sans aucune configuration supplémentaire. C’est la copie qui survit à un ransomware ciblant les credentials cloud.
Étape 11 — Tester la restauration en environnement isolé
Une restauration testée sur la machine de production est une opération risquée : un mauvais chemin, un --target / au lieu de --target /tmp/, et vous écrasez votre prod. La bonne pratique consiste à provisionner un VPS jetable mensuel (3 USD chez Hetzner CX11, soit ≈ 1 968 FCFA) dédié aux tests de restauration.
# Sur le VPS jetable
apt install -y restic
export RESTIC_REPOSITORY="s3:..."
export AWS_ACCESS_KEY_ID="..." # clé en lecture seule
restic snapshots
restic restore latest --target /restored --include /var/www
ls /restored/var/www/ | head
Notez deux détails critiques. Premièrement, créez sur le fournisseur S3 une seconde Application Key en mode lecture seule, vous évitez qu’un VPS de test compromis puisse écraser le dépôt. Deuxièmement, mesurez le RTO réel : combien de minutes entre la commande et un site fonctionnel. Si vous dépassez 4 heures pour 50 Go, votre engagement client de SLA n’est pas tenable.
Étape 12 — Intégrer Restic dans un pipeline CI/CD
Pour une équipe qui déploie via Gitea Actions ou GitHub Actions, on peut déclencher une sauvegarde juste avant chaque déploiement de production. C’est le filet de sécurité pour un rollback en cas de migration de schéma raté.
# .gitea/workflows/deploy.yml extrait
- name: Snapshot pré-déploiement
run: |
ssh deploy@vps "RESTIC_PASSWORD_FILE=/root/.restic-pass restic backup /var/www /var/lib/postgresql --tag pre-deploy-${{ github.sha }}"
- name: Deploy
run: ./deploy.sh
- name: Vérifier snapshot existe
run: ssh deploy@vps "restic snapshots --tag pre-deploy-${{ github.sha }} --json | jq length"
Le tag pre-deploy-<sha> permet de retrouver instantanément le bon snapshot pour un rollback ciblé. La commande restic forget --keep-tag pre-deploy-* --keep-last 20 conserve les 20 derniers snapshots de déploiement même si la politique de rétention quotidienne les éliminerait.
Une dernière astuce : ajoutez dans le workflow une étape qui poste un message Slack ou Telegram avec l’identifiant court du snapshot et la taille transférée. L’équipe sait en temps réel qu’un point de retour sain existe avant chaque mise en production.