Files
2026-06-09 18:40:21 +02:00

204 lines
12 KiB
Markdown

---
title: Backrest
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, backups, deduplication, encryption, cloud, s3, b2, sftp, restic, orchestrateur, web-ui, prune, docker, go, mit]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Backups, https://github.com/garethgeorge/backrest]
---
# 💾 Backrest
> **L'UI web moderne qui transforme [[app-restic]] en produit utilisable** : orchestration multi-repos, planification visuelle, **prune policy** centralisée, et visualisation des restores. Le compagnon idéal pour les sysadmins qui aiment restic mais qui ne supportent plus sa CLI.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | (GitHub) |
| **GitHub** | [garethgeorge/backrest](https://github.com/garethgeorge/backrest) |
| **License** | MIT |
| **Langage** | Go (frontend TypeScript) |
| **Étoiles GitHub** | 6,5k ⭐ |
| **Dernière MAJ** | 2026-06-06 |
| **Catégorie** | [[cat-backups|Backups]] |
## 📝 Description
**Backrest** est une **interface web et un orchestrateur pour [[app-restic]]**. C'est l'un des projets qui répond à la question « comment puis-je gérer mes dizaines de repos restic sans écrire un script bash par source ? ».
Le principe est simple : Backrest **n'est pas un moteur de backup** en soi — il **pilote restic** à travers une UI web. Concrètement, Backrest :
- **embarque le binaire restic** (donc compatible avec n'importe quel repo restic existant),
- expose une **UI web** pour définir des **repositories** (un repo par backend : S3, B2, SFTP, local…),
- définit des **plans** qui associent un repo, une liste de **chemins à sauvegarder**, une **planification** (cron-like), des **hooks pre/post** (pour faire un `pg_dump` avant la backup par exemple), et des **politiques de prune** (garder 7 daily, 4 weekly, 6 monthly…),
- affiche les **logs** de chaque exécution, l'historique des snapshots, l'espace utilisé,
- permet de **restaurer** interactivement (fichier, dossier, ou snapshot complète) avec prévisualisation du contenu avant de valider.
Pour qui a connu la galère de gérer 10 cron tab différents pour 10 repos restic, Backrest est une **vraie libération**. Le tout en MIT, développé par Gareth George, maintenu activement.
Les **politiques de prune** dans Backrest sont bien plus ergonomiques qu'en CLI restic : on coche des cases pour « garder 7 daily, 4 weekly, 6 monthly, 3 yearly » et Backrest traduit ça en `restic forget --keep-daily=7 --keep-weekly=4 --keep-monthly=6 --keep-yearly=3 --prune`. On peut aussi définir des **tags de snapshot** (par exemple `daily`, `weekly`, `monthly`) et avoir des politiques de rétention **indépendantes par tag**, ce qui est très puissant pour des rétentions métier (garder 30 snapshots `monthly` mais seulement 7 `daily`).
Backrest supporte nativement **tous les backends de restic** : `local`, `S3`, `S3-compatible` (Wasabi, MinIO, Scaleway, OVH, B2, etc.), `B2`, `SFTP`, `S3-with-credential-helpers`, et plus généralement tout ce que `restic init -r <backend>` accepte. Si vous avez déjà un repo restic en CLI, vous pouvez le **brancher à Backrest sans rien ré-importer** — Backrest est un consommateur du format, pas un concurrent.
Comparé à ses principaux rivaux :
- **vs [[app-restic]] seul (CLI)** : Backrest est restic **avec une UI**. Aucune perte de fonctionnalité, juste du confort.
- **vs [[app-kopia]]** : Kopia a sa propre UI, mais **desktop** (pas web self-hosted). Si on veut une UI **web** dans le navigateur, Backrest est aujourd'hui le choix naturel pour l'écosystème restic.
- **vs [[app-duplicati]]** : Duplicati a une UI web, mais son moteur est en C#/.NET/Mono, en perte de vitesse, avec un format propriétaire et un écosystème plus restreint. Backrest s'appuie sur restic, plus rapide, format plus simple, plus actif.
- **vs [[app-borg-ui]]** : Borg UI est l'équivalent pour Borg ; Backrest est l'équivalent pour restic.
**Public cible** : **intermédiaire à avancé**. Pour les admins qui ont déjà (ou vont avoir) plusieurs repos restic, Backrest est l'orchestrateur qui rend l'ensemble **utilisable au quotidien**.
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
backrest:
image: garethgeorge/backrest:latest
container_name: backrest
restart: unless-stopped
environment:
- BACKREST_DATA=/data
- BACKREST_PORT=9898
- TZ=Europe/Paris
- XDG_CONFIG_HOME=/data/config
volumes:
- backrest-data:/data
- /var/run/docker.sock:/var/run/docker.sock # pour les hooks Docker
- /mnt/source:/source:ro # adapter au chemin sauvegardé
labels:
- "traefik.enable=true"
- "traefik.http.routers.backrest.rule=Host(`backrest.example.com`)"
- "traefik.http.routers.backrest.entrypoints=websecure"
- "traefik.http.routers.backrest.tls.certresolver=letsencrypt"
- "traefik.http.routers.backrest.middlewares=backrest-auth"
- "traefik.http.middlewares.backrest-auth.basicauth.users=admin:$$apr1$$xyz..."
volumes:
backrest-data:
```
> **Note Traefik** : par défaut Backrest n'a pas d'authentification web. Il est **fortement recommandé** de mettre un `basicauth` (ou mieux, un SSO via Authelia/Authentik) devant l'UI, car Backrest contient les credentials de tous vos repos et les **mots de passe de chiffrement** en clair dans sa config (c'est un choix de design assumé pour permettre l'automatisation des backups).
### Option 2 : Binaire natif (auto-hébergé)
```bash
# Télécharger depuis GitHub Releases
wget https://github.com/garethgeorge/backrest/releases/download/v1.7.0/backrest_Linux_x86_64.tar.gz
tar -xzf backrest_Linux_x86_64.tar.gz
sudo mv backrest /usr/local/bin/
# Lancer en service
sudo useradd -r -s /bin/false backrest
sudo mkdir -p /var/lib/backrest
sudo chown backrest:backrest /var/lib/backrest
# Créer /etc/systemd/system/backrest.service
cat <<EOF | sudo tee /etc/systemd/system/backrest.service
[Unit]
Description=Backrest - Restic Web UI
After=network.target
[Service]
Type=simple
User=backrest
ExecStart=/usr/local/bin/backrest
Environment=BACKREST_DATA=/var/lib/backrest
Environment=BACKREST_PORT=9898
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now backrest
```
## ⚙️ Configuration Initiale
1. **Accéder à l'UI** sur `https://backrest.example.com` (ou `http://IP:9898`).
2. **Créer un premier repository** : *Repositories → Add Repository* → choisir le type (Local, S3, B2, SFTP…) → saisir :
- l'URI du repo (ex. `s3:s3.eu-west-3.backblazeb2.com/kopia-bucket/repo`),
- les **credentials** (access key, secret),
- le **mot de passe de chiffrement** du repo (c'est le mot de passe de votre repo restic, à saisir une seule fois pour permettre les opérations automatiques).
3. **Créer un plan de backup** : *Plans → Add Plan* → associer le repo, saisir la liste des **chemins à sauvegarder**, configurer la **planification** (cron), et surtout les **politiques de prune** (garder 7 daily, 4 weekly, 6 monthly, 3 yearly est un bon défaut).
4. **Configurer des hooks (optionnel)** : onglet *Hooks* du plan. Exemple : avant chaque backup Postgres, exécuter `pg_dump -Fc mydb > /tmp/mydb.dump` dans un conteneur `postgres:16`. Très puissant pour sauvegarder des **bases de données** de manière consistante.
5. **Premier run** : bouton *Run Now* sur le plan → inspecter les logs. Vérifier que la **taille transférée** est conforme à l'attendu.
6. **Tester la restauration** : onglet *Restore* sur une snapshot → naviguer dans l'arborescence → restaurer un fichier test. **Un backup non testé n'est pas un backup.**
## 🔄 Alternatives
### Open Source
- [[app-restic]] — Le moteur sous-jacent ; Backrest n'est qu'une UI au-dessus.
- [[app-kopia]] — Concurrent avec UI **desktop** (pas web), pas de repo partagé.
- [[app-duplicati]] — Concurrent UI web self-hosted, mais moteur différent et en perte de vitesse.
- [[app-borg-ui]] — Équivalent de Backrest pour l'écosystème **Borg** au lieu de restic.
- [[app-borg-backup-server]] — Orchestrateur Borg, plus ancien et moins actif.
- **Resticweb** / **restic-browser** — Outils tiers pour explorer un repo restic en lecture seule, sans orchestration.
### Comparaison des orchestrateurs / UIs de backup
| Critère | Backrest | [[app-borg-ui]] | [[app-duplicati]] | [[app-kopia]] (UI Desktop) |
| :--- | :--- | :--- | :--- | :--- |
| Moteur | restic | borg | Duplicati (C#) | Kopia (Go) |
| UI | Web | Web | Web | Desktop |
| Multi-repos | ✅ | ✅ | ✅ | ✅ |
| Hooks pre/post | ✅ | ⚠️ basique | ⚠️ (scripts) | ⚠️ basique |
| Prune policy visuelle | ✅ | ✅ | ✅ | ✅ |
| Restore interactif | ✅ | ✅ | ✅ | ✅ |
| Licence | MIT | MIT | LGPL-2.1 | Apache-2.0 |
| Open source | ✅ | ✅ | ✅ | ✅ |
| Auth web intégrée | ❌ (via proxy) | ❌ (via proxy) | ❌ (basique) | N/A (desktop) |
| Cadence de release | Très active | Active | Lente | Très active |
**Verdict** : Backrest est **le meilleur orchestrateur pour restic** en 2026. Si vous utilisez restic et que vous avez plus de 2-3 repos, Backrest change la vie.
### Propriétaires (ce que Backrest remplace)
- **Veeam Backup & Replication** — Standard entreprise VM, mais hors budget homelab.
- **Acronis Cyber Protect** — Commercial, ~80 $/an/poste, fermé.
- **Carbonite Server Backup** — Commercial, ~100 $/serveur/an.
- **Backblaze B2 + CloudBerry (MSP360)** — Backend B2 + UI commerciale.
- **CrashPlan for Small Business** — ~10 $/mois/poste, E2E, fermé.
## 🔐 Sécurité
- **Chiffrement AES-256-CTR + Poly1305** (côté restic) : Backrest **ne chiffre rien lui-même** — il pilote restic. Le chiffrement est appliqué par restic sur le repo, comme si vous lanciez `restic backup` à la main.
- **Stockage des credentials** : Backrest **stocke en clair dans sa config** les mots de passe des repos et les credentials cloud. C'est volontaire (pour automatiser les opérations), mais cela signifie que :
- Le fichier de config Backrest (`/data/config/...`) doit être **chiffré au repos** (LUKS sur le disque, par exemple).
- L'accès à l'UI doit être **protégé par une auth forte** (basicauth + IP allowlist, ou Authelia/Authentik via Traefik).
- Ne **jamais** exposer l'UI Backrest directement sur Internet sans SSO devant.
- **Règle 3-2-1** : Backrest peut gérer **plusieurs repos** simultanément (un repo S3, un repo local, un repo B2…) ; configurez **2-3 plans vers 2-3 backends différents** pour respecter la règle 3-2-1. Idéalement un plan vers B2 (offsite cloud), un plan vers un disque USB local (air-gapped), un plan vers un NAS du LAN.
- **Test de restauration régulier** : Backrest a un onglet *Restore***utilisez-le** au moins mensuellement pour vérifier qu'une restauration arbitraire fonctionne. Les backups non testés ne sont **pas** des backups.
- **Clé/mot de passe du repo** : le mot de passe de chiffrement de chaque repo restic est saisi une seule fois dans Backrest (sinon l'automatisation est impossible). **Copier ce mot de passe** dans un gestionnaire de mots de passe indépendant (Bitwarden, KeePassXC) ou imprimez-le sur papier dans un coffre. Sans lui, le repo est irrécupérable.
- **Air-gapped backup** : un plan Backrest vers un disque USB local monté dans le conteneur (bind mount) est un excellent moyen d'avoir un **3e backup air-gapped** (hors-ligne la plupart du temps, branché uniquement pendant le run de backup).
## 📚 Ressources
- [GitHub garethgeorge/backrest](https://github.com/garethgeorge/backrest)
- [Documentation officielle](https://github.com/garethgeorge/backrest/blob/main/docs/index.md)
- [Wiki / guides](https://github.com/garethgeorge/backrest/wiki)
- [Releases et changelogs](https://github.com/garethgeorge/backrest/releases)
- [Démo en ligne](https://github.com/garethgeorge/backrest#demo)
## Pages Liées
- [[cat-backups]] — Catégorie Backups
- [[strategie-backup-321]] — La règle 3-2-1 expliquée
- [[app-restic]] — Le moteur piloté par Backrest
- [[app-borg]] — Concurrent avec [[app-borg-ui]] comme UI
- [[app-kopia]] — Concurrent avec UI desktop intégrée
- [[app-duplicati]] — Concurrent UI web, moteur différent
- [[app-borg-ui]] — Équivalent pour Borg
- [[app-portainer]] — Visualiser les conteneurs
- [[app-traefik]] — Reverse-proxy HTTPS + auth
- [[securisation-home-lab]] — Bonnes pratiques de sécurité
- [[glossaire-homelab]] — Définitions