204 lines
12 KiB
Markdown
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
|