Tutoriel pratique pour configurer un backup VPS complet avec Restic vers un stockage distant en 2026 (informations vérifiées en avril 2026, susceptibles d’évoluer).
Voir notre guide Restic complet.
Architecture proposée
- VPS Hetzner CX23 (4 €/mois)
- Backups Restic vers Backblaze B2 (~6 USD/To/mois)
- Backup quotidien à 03h00 UTC
- Rétention 7d-4w-12m
- Test restauration mensuel sur VPS staging
Étape 1 — Lister ce qu’il faut backuper
/etc/— config système/home/— homes utilisateurs/var/www/— sites web statiques (uploads notamment)/var/lib/postgresql/ou via pg_dump — bases/opt/— applis manuelles/etc/letsencrypt/ou config Caddy avec certs/var/lib/coolify/si Coolify hôte
Étape 2 — Pre-backup hook PostgreSQL
# /usr/local/bin/pg-pre-backup.sh
#!/bin/bash
mkdir -p /var/backups/pg
sudo -u postgres pg_dumpall --clean --if-exists | gzip > /var/backups/pg/all-databases.sql.gz
Étape 3 — Script backup principal
# /usr/local/bin/backup.sh
#!/bin/bash
set -e
# Variables d'env
source /root/.restic.env
# Pre-backup
/usr/local/bin/pg-pre-backup.sh
# Backup
restic backup \
/etc \
/home \
/var/www \
/var/backups/pg \
/opt/myapp \
--exclude='**/node_modules' \
--exclude='**/.cache' \
--tag daily
# Forget + prune
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
# Vérification intégrité (~2 min/jour)
restic check --read-data-subset=2%
# Notification optionnelle
curl -fsS https://uptime-kuma.exemple.sn/api/push/abc123?status=up&msg=BackupOK
Étape 4 — Permissions et cron
chmod +x /usr/local/bin/backup.sh
chmod 600 /root/.restic.env
# Cron quotidien
echo "0 3 * * * /usr/local/bin/backup.sh >> /var/log/restic-backup.log 2>&1" | crontab -
Étape 5 — Monitoring
- Push heartbeat vers Uptime Kuma à la fin du script
- Si pas de heartbeat dans les 25h, Uptime Kuma alerte
- Logs persistants pour debug
Pour creuser ce sujet
Hostinger pour vos premiers déploiements
Le panel hPanel reste l’un des plus accessibles du marché pour les débutants en self-hosting.
Lien d affiliation. Si vous achetez via ce lien, le blog reçoit une petite commission sans surcoût pour vous.
Pourquoi Restic pour un VPS hébergé en Afrique de l’Ouest
La plupart des PME ouest-africaines hébergent leurs applications sur un VPS Hetzner, OVH, Contabo ou Scaleway facturé entre 4 et 12 EUR (2 600 à 7 900 FCFA) par mois. Une seule panne disque, une commande rm -rf mal placée ou un ransomware peut tout effacer. Restic est un outil de sauvegarde open source écrit en Go qui chiffre, déduplique et compresse vos données avant de les pousser vers un stockage objet (Backblaze B2, Wasabi, Scaleway Object Storage, AWS S3 ou un MinIO auto-hébergé à Dakar). Tout est protégé par AES-256 et la clé reste sur le VPS — même si l’hébergeur du bucket est compromis, vos données restent illisibles.
Avant d’attaquer ce tutoriel, vous devez avoir un VPS Linux (Debian 12 ou Ubuntu 24.04 LTS recommandés), un accès SSH avec un utilisateur sudo, et un compte sur un fournisseur de stockage objet. Pour un projet sénégalais ou ivoirien, Backblaze B2 est imbattable : 6 USD (3 935 FCFA) par To et par mois, sans frais d’egress jusqu’à 3 fois le volume stocké. Wasabi facture 6,99 USD le To sans aucun frais de sortie, idéal si vous restaurez souvent.
Étape 1 — Installer Restic depuis le binaire officiel
Le paquet Debian/Ubuntu est souvent en retard. On télécharge la version 0.17.x officielle directement depuis GitHub pour avoir les dernières optimisations de compression zstd.
cd /tmp
curl -L https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_amd64.bz2 -o restic.bz2
bzip2 -d restic.bz2
sudo install -m 0755 restic /usr/local/bin/restic
restic version
La dernière commande doit afficher restic 0.17.3 compiled with go1.23 on linux/amd64. Si Go affiche une version inférieure à 1.22, vous avez téléchargé un vieux binaire — recommencez. Sur un VPS ARM (Hetzner CAX11 à 4,51 EUR/mois soit 2 960 FCFA), remplacez amd64 par arm64.
Étape 2 — Créer un bucket et générer des clés d’accès
Sur Backblaze B2, créez un bucket privé nommé par exemple backup-vps-dakar. Générez ensuite une Application Key restreinte à ce bucket avec les permissions listFiles, readFiles, writeFiles, deleteFiles. Ne jamais utiliser la Master Key — si elle fuit, l’attaquant peut supprimer tous vos buckets.
Stockez les identifiants dans un fichier d’environnement /root/.restic.env en mode 0600 :
sudo tee /root/.restic.env > /dev/null <<'EOF'
export B2_ACCOUNT_ID="000xxxxxxxxxxxx"
export B2_ACCOUNT_KEY="K000xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export RESTIC_REPOSITORY="b2:backup-vps-dakar:/srv"
export RESTIC_PASSWORD="GENEREZ_UN_MOT_DE_PASSE_LONG_ALEATOIRE"
EOF
sudo chmod 600 /root/.restic.env
Le mot de passe Restic chiffre les snapshots ; sans lui, aucune restauration possible — copiez-le aussi dans un gestionnaire de mots de passe hors ligne (Bitwarden, KeePassXC).
Étape 3 — Initialiser le dépôt
L’initialisation crée la structure cryptographique (un fichier config chiffré et le keyring) dans le bucket. Elle ne se fait qu’une seule fois.
source /root/.restic.env
restic init
Vous devez voir created restic repository xxxxxxxxxx at b2:backup-vps-dakar:/srv. Si l’erreur est Fatal: create key in repository: ... 401 Unauthorized, vérifiez que la Application Key a bien la permission writeFiles et que le bucket existe.
Étape 4 — Premier snapshot avec exclusions intelligentes
Sur un VPS de production, on sauvegarde /etc, /home, /var/www, /var/lib/docker/volumes et /srv, en excluant les caches et fichiers volatils :
sudo tee /root/restic-excludes.txt > /dev/null <<'EOF'
**/cache
**/tmp
**/.cache
**/node_modules
**/__pycache__
*.log
*.tmp
EOF
source /root/.restic.env
restic backup /etc /home /var/www /var/lib/docker/volumes /srv --exclude-file=/root/restic-excludes.txt --tag prod --tag $(hostname)
Le premier snapshot prend du temps (compter 1 heure pour 20 Go sur une connexion 100 Mbps). Restic affiche en temps réel Files: X new ... Added to the repository: Y MiB. À la fin, notez l’ID du snapshot — c’est votre point de restauration.
Étape 5 — Automatiser avec systemd timer (pas de cron)
Systemd timer remplace cron avec de meilleurs logs, un suivi via journalctl et des relances en cas d’échec. On crée d’abord le service :
sudo tee /etc/systemd/system/restic-backup.service > /dev/null <<'EOF'
[Unit]
Description=Sauvegarde Restic du VPS
After=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/root/.restic.env
ExecStart=/usr/local/bin/restic backup /etc /home /var/www /var/lib/docker/volumes /srv --exclude-file=/root/restic-excludes.txt --tag prod --tag %H
ExecStartPost=/usr/local/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
EOF
sudo tee /etc/systemd/system/restic-backup.timer > /dev/null <<'EOF'
[Unit]
Description=Lance la sauvegarde Restic chaque nuit
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=600
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
Le timer déclenche la sauvegarde chaque nuit à 02h30 GMT (heure de Dakar et Abidjan), avec un délai aléatoire de 0 à 10 minutes pour ne pas saturer Backblaze si vous gérez plusieurs VPS. ExecStartPost applique la politique de rétention : on garde 7 sauvegardes quotidiennes, 4 hebdomadaires, 6 mensuelles. Vérifiez l’activation avec systemctl list-timers restic-backup.timer.
Étape 6 — Tester une restauration (sinon ce n’est pas un backup)
Une sauvegarde non testée n’est qu’une croyance. Lancez chaque mois une restauration partielle dans /tmp pour valider l’intégrité :
source /root/.restic.env
restic snapshots
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test/etc/nginx/sites-available/
sudo rm -rf /tmp/restore-test
Si les fichiers Nginx restaurés sont identiques à /etc/nginx/sites-available/ en production (vérifiez avec diff -r), votre chaîne complète fonctionne. Programmez aussi un restic check --read-data-subset=10% mensuel pour détecter une corruption silencieuse du bucket.
Étape 7 — Surveiller les sauvegardes avec un webhook
Si une sauvegarde échoue silencieusement pendant trois semaines, vous le découvrez le jour de la panne. Ajoutez un OnFailure dans le service systemd qui pousse une alerte vers un webhook (n8n, Discord, ou un canal WhatsApp Business via votre outil habituel) :
sudo tee /etc/systemd/system/restic-alert@.service > /dev/null <<'EOF'
[Unit]
Description=Alerte échec Restic pour %i
[Service]
Type=oneshot
ExecStart=/usr/bin/curl -X POST -H 'Content-Type: application/json' -d '{"text":"Echec Restic sur '$(hostname)' - service %i"}' https://VOTRE_WEBHOOK_URL
EOF
Ajoutez ensuite OnFailure=restic-alert@%n.service dans la section [Unit] de restic-backup.service et rechargez systemd. Vous recevrez désormais une notification dès qu’un backup échoue.
Étape 8 — Coûts réels et budget mensuel
Pour un VPS typique d’agence à Dakar (50 Go de données utiles, 3 mois de rétention soit environ 75 Go stockés après déduplication), le coût Backblaze B2 tourne autour de 0,45 USD par mois (295 FCFA). Avec un VPS Hetzner CX22 à 4,51 EUR (2 960 FCFA), votre infrastructure complète et sauvegardée coûte moins de 3 300 FCFA mensuels. Comparez à une perte de données après piratage : reconstruire un site WooCommerce de 800 produits prend 80 heures à 25 000 FCFA l’heure, soit 2 millions de FCFA. Le ROI d’un Restic bien configuré se compte en heures.
Pour étoffer le tableau
Cette base couvre 90 % des besoins. Si vous gérez plusieurs serveurs, déléguez la planification à un orchestrateur léger comme Uptime Kuma pour la supervision et complétez par Docker Compose en production pour cadrer les volumes à sauvegarder. Pour un parc de plus de 10 VPS, regardez Resticprofile (wrapper Go), Autorestic (config YAML) ou backrest (UI web). Tout cela reste compatible avec le dépôt Restic créé ici — la portabilité est le principal atout du format.
Restaurer un VPS entier sur une nouvelle machine
Le scénario du pire : votre VPS principal est compromis ou supprimé par l’hébergeur. Vous louez un nouveau serveur, le partitionnez, installez Debian, recréez l’utilisateur sudo, puis lancez la procédure de restauration complète. Comme la clé Restic et les identifiants Backblaze sont stockés dans votre gestionnaire de mots de passe hors ligne, vous reprenez la main sans dépendre du serveur originel.
sudo apt update && sudo apt install -y curl bzip2
cd /tmp
curl -L https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_amd64.bz2 -o restic.bz2
bzip2 -d restic.bz2 && sudo install -m 0755 restic /usr/local/bin/restic
export B2_ACCOUNT_ID="..."
export B2_ACCOUNT_KEY="..."
export RESTIC_REPOSITORY="b2:backup-vps-dakar:/srv"
export RESTIC_PASSWORD="..."
restic snapshots --tag prod --host ancien-serveur
restic restore latest --target /
L’opération restaure les fichiers à leur emplacement d’origine. Comptez environ 45 minutes pour 30 Go sur une connexion 200 Mbps. Une fois la restauration terminée, redémarrez les services concernés (systemctl restart nginx docker postgresql) et vérifiez que vos applications répondent.
Bonnes pratiques de gestion des clés
Trois règles à graver au mur de votre bureau. Premièrement, le mot de passe Restic ne doit JAMAIS être stocké uniquement sur le VPS sauvegardé — sinon une compromission supprime à la fois données et clé. Deuxièmement, créez une seconde Application Key Backblaze restreinte en lecture seule pour des audits et des restaurations partielles depuis votre poste local : si elle fuit, l’attaquant peut lire mais pas effacer. Troisièmement, activez le mode Object Lock sur Backblaze (3 USD le To pour la rétention immuable) pour bloquer toute suppression pendant 30 jours, même par un administrateur compromis. C’est l’arme anti-ransomware par excellence.
Alternative budget : MinIO auto-hébergé à Dakar
Si vous voulez garder vos données dans un datacenter local (Sonatel Orange Business à Diamniadio, Wakanet Tier III), installez MinIO sur un second VPS et utilisez-le comme cible Restic via le protocole S3. Variables d’environnement adaptées :
export AWS_ACCESS_KEY_ID="VOTRE_CLE_MINIO"
export AWS_SECRET_ACCESS_KEY="VOTRE_SECRET_MINIO"
export RESTIC_REPOSITORY="s3:https://minio.exemple.sn/backup-vps"
export RESTIC_PASSWORD="..."
restic init
Le coût dépend du VPS qui héberge MinIO (compter 8 EUR / 5 250 FCFA pour 200 Go SSD chez Hetzner). L’avantage : latence réduite à 5 ms depuis Dakar contre 180 ms pour Backblaze EU, donc restaurations 10 fois plus rapides.
Restaurer un VPS entier sur une nouvelle machine
Le scénario du pire : votre VPS principal est compromis ou supprimé par l’hébergeur. Vous louez un nouveau serveur, le partitionnez, installez Debian, recréez l’utilisateur sudo, puis lancez la procédure de restauration complète. Comme la clé Restic et les identifiants Backblaze sont stockés dans votre gestionnaire de mots de passe hors ligne, vous reprenez la main sans dépendre du serveur originel.
sudo apt update && sudo apt install -y curl bzip2
cd /tmp
curl -L https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_amd64.bz2 -o restic.bz2
bzip2 -d restic.bz2 && sudo install -m 0755 restic /usr/local/bin/restic
export B2_ACCOUNT_ID="..."
export B2_ACCOUNT_KEY="..."
export RESTIC_REPOSITORY="b2:backup-vps-dakar:/srv"
export RESTIC_PASSWORD="..."
restic snapshots --tag prod --host ancien-serveur
restic restore latest --target /
L’opération restaure les fichiers à leur emplacement d’origine. Comptez environ 45 minutes pour 30 Go sur une connexion 200 Mbps. Une fois la restauration terminée, redémarrez les services concernés (systemctl restart nginx docker postgresql) et vérifiez que vos applications répondent.
Bonnes pratiques de gestion des clés
Trois règles à graver au mur de votre bureau. Premièrement, le mot de passe Restic ne doit jamais être stocké uniquement sur le VPS sauvegardé — sinon une compromission supprime à la fois données et clé. Deuxièmement, créez une seconde Application Key Backblaze restreinte en lecture seule pour des audits et des restaurations partielles depuis votre poste local : si elle fuit, l’attaquant peut lire mais pas effacer. Troisièmement, activez le mode Object Lock sur Backblaze (3 USD le To pour la rétention immuable) pour bloquer toute suppression pendant 30 jours, même par un administrateur compromis. C’est l’arme anti-ransomware par excellence.
Alternative budget : MinIO auto-hébergé à Dakar
Si vous voulez garder vos données dans un datacenter local (Sonatel Orange Business à Diamniadio, Wakanet Tier III), installez MinIO sur un second VPS et utilisez-le comme cible Restic via le protocole S3. Variables d’environnement adaptées :
export AWS_ACCESS_KEY_ID="VOTRE_CLE_MINIO"
export AWS_SECRET_ACCESS_KEY="VOTRE_SECRET_MINIO"
export RESTIC_REPOSITORY="s3:https://minio.exemple.sn/backup-vps"
export RESTIC_PASSWORD="..."
restic init
Le coût dépend du VPS qui héberge MinIO (compter 8 EUR / 5 250 FCFA pour 200 Go SSD chez Hetzner). L’avantage : latence réduite à 5 ms depuis Dakar contre 180 ms pour Backblaze EU, donc restaurations 10 fois plus rapides depuis votre bureau à Plateau ou Almadies.
Optimisations avancées de performance
Sur un VPS modeste avec 2 vCPU, le chiffrement et la déduplication peuvent saturer le processeur. Trois leviers réduisent l’impact. D’abord, la flag --compression max active zstd niveau 22 — utile pour des bases de données mais coûteux en CPU. Préférez --compression auto par défaut. Ensuite, --pack-size 32 augmente la taille des packs à 32 Mio (par défaut 16) ce qui réduit le nombre de requêtes HTTP vers Backblaze de moitié et accélère la sauvegarde sur connexions à forte latence. Enfin, GOMAXPROCS=2 restic backup limite Restic à 2 cœurs pour ne pas affamer Nginx ou PostgreSQL en pleine journée.
GOMAXPROCS=2 restic backup /var/www --pack-size 32 --compression auto --exclude-file=/root/restic-excludes.txt
Sur un test réel avec 40 Go de fichiers WordPress, ces options ont fait passer la sauvegarde de 38 minutes à 22 minutes, et la charge moyenne du VPS de 3,8 à 1,4 — différence visible immédiatement dans Netdata ou Glances.