Borgmatic Backup - Agence66
Configuration Borgmatic pour le backup automatique du serveur Agence66.
Vue d'ensemble
Ce dépôt contient la configuration complète pour effectuer des backups automatiques quotidiens à 3h du matin via Borgmatic et BorgBackup.
Version Borgmatic requise : ≥ 2.0.0 (pour l'interpolation des variables d'environnement)
Caractéristiques
- Backup quotidien automatique à 3h du matin via systemd timer
- Compression zstd pour un bon ratio performance/compression
- Rétention intelligente : 7 daily, 4 weekly, 6 monthly
- Notifications via ntfy pour succès/échec
- Compatible avec les backups Borg existants
- Sécurisé : chiffrement, exclusions de fichiers sensibles
Dossiers sauvegardés
/var/www- Sites web/srv/minecraftserver- Serveur Minecraft/srv/reddiscordbot- Bot Discord/srv/waltercoiffure- Walter Coiffure/etc- Configurations système/opt/nextcloud- Nextcloud/opt/traefik- Reverse proxy Traefik/opt/n8n- Automation n8n/opt/portainer- Gestion Docker/opt/uptime-kuma- Monitoring/opt/vaultwarden- Gestionnaire de mots de passe/opt/mailcow-dockerized- Serveur mail/opt/netdata- Monitoring système/opt/gitea- Forge Git/home- Répertoires utilisateurs
Installation
Prérequis
- Système Linux (Debian/Ubuntu/Arch/Fedora)
- Accès root
- Git installé
- Borgmatic ≥ 2.0.0 (pour l'interpolation des variables d'environnement)
Installation rapide
# Cloner le dépôt
git clone <url-du-repo>
cd agence66-borgmatic
# Copier et configurer les variables d'environnement
cp .env.example .env
nano .env # Éditer avec vos valeurs
# Éditer la configuration si nécessaire
nano config.yaml # Ajuster le repository Borg
# Exécuter l'installation
sudo ./install.sh
Configuration manuelle
Si vous préférez installer manuellement :
# Installer Borgmatic ≥ 2.0.0 via pipx (recommandé)
sudo apt install pipx
sudo pipx install borgmatic
# Créer les liens symboliques
sudo ln -sf /root/.local/bin/borgmatic /usr/local/bin/borgmatic
sudo ln -sf /root/.local/bin/generate-borgmatic-config /usr/local/bin/generate-borgmatic-config
# Installer BorgBackup
sudo apt install borgbackup # Debian/Ubuntu
# ou
sudo pacman -S borg # Arch Linux
# Copier les fichiers
sudo mkdir -p /etc/borgmatic/hooks
sudo cp config.yaml /etc/borgmatic/
sudo cp hooks/*.sh /etc/borgmatic/hooks/
sudo chmod +x /etc/borgmatic/hooks/*.sh
# Copier les variables d'environnement
sudo cp .env /etc/borgmatic/
sudo chmod 600 /etc/borgmatic/.env
# Installer les services systemd
sudo cp systemd/borgmatic.service /etc/systemd/system/
sudo cp systemd/borgmatic.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable borgmatic.timer
sudo systemctl start borgmatic.timer
Configuration
Variables d'environnement (.env)
Éditez /etc/borgmatic/.env avec vos valeurs :
# Repository Borg
BORG_REPO=/path/to/your/repository
# ou pour un repo distant:
BORG_REPO=ssh://user@backup.server.com/path/to/repo
# Passphrase de chiffrement
BORG_PASSPHRASE=your-secure-passphrase
# Configuration ntfy
NTFY_URL=https://ntfy.sh/your-topic
NTFY_USER=username:password
Configuration Borgmatic (config.yaml)
Le fichier /etc/borgmatic/config.yaml contient la configuration principale.
Points importants à vérifier :
- Repository : Décommentez et configurez votre repository dans la section
location.repositories - Chemins : Ajustez
source_directoriessi nécessaire - Exclusions : Personnalisez
exclude_patternsselon vos besoins
Initialisation du repository Borg
Si vous utilisez un nouveau repository :
# Repository local
borg init --encryption=repokey-blake2 /path/to/repo
# Repository distant
borg init --encryption=repokey-blake2 ssh://user@server/path/to/repo
IMPORTANT : Sauvegardez la clé de chiffrement !
borg key export /path/to/repo backup-key.txt
# Conservez ce fichier en lieu sûr !
Utilisation
Tester la configuration
# 1. Valider la syntaxe du fichier de configuration
sudo borgmatic config validate
# 2. Tester sans exécuter de backup (dry-run)
sudo borgmatic --dry-run --verbosity 2
# 3. Lister les fichiers qui seront sauvegardés
sudo borgmatic list --json
Note : borgmatic config validate vérifie uniquement la syntaxe YAML et la structure du fichier. Le dry-run teste la connexion au repository et simule un backup complet.
Exécuter un backup manuel
# Backup avec verbosité normale
sudo borgmatic --verbosity 1
# Backup avec verbosité détaillée
sudo borgmatic --verbosity 2
Vérifier le timer systemd
# Statut du timer
systemctl status borgmatic.timer
# Voir quand le prochain backup aura lieu
systemctl list-timers | grep borgmatic
# Logs du dernier backup
journalctl -u borgmatic.service -n 100
Lister les backups
# Lister toutes les archives
borgmatic list
# Informations détaillées
borg list /path/to/repo
Restaurer des fichiers
# Monter une archive pour explorer
mkdir /tmp/restore
borg mount /path/to/repo::backup-20250116-0300 /tmp/restore
cd /tmp/restore
# ... copier les fichiers nécessaires ...
cd /
borg umount /tmp/restore
# Extraire directement
borg extract /path/to/repo::backup-20250116-0300 path/to/file
# Avec borgmatic
borgmatic extract --archive backup-20250116-0300 --path path/to/file
Maintenance
Vérifier l'intégrité
# Vérification complète du repository
borgmatic check --verbosity 2
# Vérification rapide
borg check /path/to/repo
Nettoyer l'espace disque
Le nettoyage automatique (prune) est déjà configuré avec :
- 7 backups quotidiens
- 4 backups hebdomadaires
- 6 backups mensuels
Pour forcer un nettoyage manuel :
borgmatic prune --verbosity 1
Compacter le repository
Pour libérer réellement l'espace disque après prune :
borg compact /path/to/repo
Notifications
Les notifications sont envoyées via ntfy :
- ✅ Succès : notification normale avec le nom de l'archive
- ❌ Échec : notification haute priorité avec le message d'erreur
Testez manuellement les notifications :
# Test notification de succès
/etc/borgmatic/hooks/ntfy-success.sh "test-archive" ""
# Test notification d'erreur
/etc/borgmatic/hooks/ntfy-error.sh "Erreur de test"
Sécurité
- Les fichiers
.envet les clés ne sont jamais commités (voir.gitignore) - Les permissions des fichiers sensibles sont restrictives (600)
- Le service systemd utilise
ProtectSystem=strict - Les logs sont dans le journal systemd, accessible uniquement en root
Troubleshooting
Valider la configuration
Avant tout, vérifiez que votre configuration est valide :
# Valider la syntaxe
sudo borgmatic config validate
# Si erreur, vérifier les détails
sudo borgmatic config validate --verbosity 2
Erreurs courantes :
repositories' is a required property: Manque la section repositoriesAdditional properties are not allowed: Propriété invalide pour cette version- Erreurs YAML : Vérifier l'indentation (utiliser des espaces, pas des tabs)
Le backup ne démarre pas
# Vérifier le timer
systemctl status borgmatic.timer
# Vérifier le service
systemctl status borgmatic.service
# Voir les logs
journalctl -u borgmatic.service -f
Erreur de connexion au repository
# Tester la connexion SSH (si distant)
ssh user@backup-server
# Vérifier les variables d'environnement
sudo cat /etc/borgmatic/.env
# Tester Borg directement
sudo borg list $BORG_REPO
Problème de permissions
# Vérifier les permissions des fichiers
ls -la /etc/borgmatic/
ls -la /etc/borgmatic/hooks/
# Corriger si nécessaire
sudo chmod 600 /etc/borgmatic/.env
sudo chmod 600 /etc/borgmatic/config.yaml
sudo chmod +x /etc/borgmatic/hooks/*.sh
Notifications ntfy ne fonctionnent pas
# Tester manuellement
curl -u "$NTFY_USER" \
-H "Title: Test" \
-d "Message de test" \
"$NTFY_URL"
# Vérifier les variables
source /etc/borgmatic/.env
echo $NTFY_URL
echo $NTFY_USER
Migration depuis l'ancien script
Si vous migrez depuis l'ancien script Borg :
- Le repository existant est compatible - pas besoin de réinitialiser
- Les archives existantes restent accessibles
- Le format de nommage est identique :
backup-YYYYMMDD-HHMM - La rétention est la même : 7/4/6
Pour vérifier la compatibilité :
# Lister les anciennes archives
borg list /path/to/existing/repo
# Tester avec borgmatic
borgmatic list
Ressources
Support
Pour tout problème :
- Consultez la section Troubleshooting
- Vérifiez les logs :
journalctl -u borgmatic.service -n 100 - Testez en mode verbeux :
borgmatic --verbosity 2
Licence
Configuration personnalisée pour Agence66.