L'historique d'Icinga DB etait exclu de la restauration (2026-09-30) : son environnement derive de l'AC d'Icinga, recreee a chaque reconstruction. L'AC est desormais un jeu de sauvegarde, remis avant api setup ; la base d'Icinga est restauree, et son schema n'est importe que sur une base vierge. Les temoins comparaient PostgreSQL par nombre de lignes et n'ont pas vu 412 lignes d'historique remplacees par 380 neuves. Ils comparent desormais par cle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| defaults | ||
| files | ||
| handlers | ||
| meta | ||
| tasks | ||
| templates | ||
| vars | ||
| README.md | ||
client_backup
Intégration cliente sauvegarde : le nœud pousse ses données (pas sa VM) vers le dépôt
restic hors-nœud (serveur_backup), chiffrées côté client, sur un timer systemd.
Principe
L'infrastructure est reconstructible par le code (make reconstruire). Ce qui ne se
reconstruit pas, c'est l'état : clés de l'AC, annuaire, bases, courrier, dépôts Git.
C'est cet état — et lui seul — que ce rôle sauvegarde.
Rôle
- Installe
restic. - Dépose la clé SSH privée de sauvegarde et le mot de passe restic dans
/etc/setops(0600), depuis la voûte. - Configure l'accès SSH vers la cible (utilisateur restreint
restic). - Déploie
sauvegarder.sh+ l'unité et le timer systemd, et l'active.
Jobs déclaratifs
Chaque nœud déclare ses client_backup_jobs (en group_vars/host_vars) :
client_backup_jobs:
- nom: step_ca
chemins: [/etc/step-ca]
- nom: postgresql
commande: "sudo -u postgres pg_dumpall > /var/backups/setops/postgresql/all.sql"
chemins: [/var/backups/setops/postgresql]
Le script exécute, dans l'ordre : les commande (dumps vers le staging) → restic init
si le dépôt est neuf → restic backup de tous les chemins → restic forget --prune
(rétention).
Secrets requis (Vault)
vault_restic_password # mot de passe du dépôt restic (le chiffrement)
vault_backup_ssh_privkey # clé privée SSH vers la cible (publique côté serveur_backup)
Sans eux, le rôle refuse de s'exécuter (assertion).
Variables principales
| Variable | Défaut | Rôle |
|---|---|---|
client_backup_cible |
backup-01.{{ domaine_interne }} |
Nœud dépôt |
client_backup_repo |
sftp:restic@<cible>:<hôte> |
Un sous-dossier par nœud |
client_backup_staging |
/var/backups/setops |
Préparation des dumps |
client_backup_retention |
--keep-daily 7 --keep-weekly 4 --keep-monthly 6 |
restic forget |
client_backup_etiquette_avant_raser |
avant-raser |
étiquette du dépôt d'avant rasage, gardée par la rétention jusqu'à la reconstruction suivante |
client_backup_horaire |
*-*-* 02:30:00 |
Timer systemd |
client_backup_jobs |
[] |
À déclarer par nœud |
Notes / limites
- Chiffrement côté client : la cible ne voit que des blocs chiffrés — elle n'a donc pas besoin d'être aussi protégée que les sources.
client_backup_jobs: []= le timer tourne mais ne sauvegarde rien. C'est silencieux : vérifier que chaque nœud porteur d'état déclare ses jobs.- Un dépôt neuf est vide jusqu'à la première exécution : après une reconstruction from-zero, déclencher une première sauvegarde plutôt que d'attendre 02:30.
- Restauration : faite par la reconstruction elle-même depuis le 2026-09-30 — chaque rôle
propriétaire inclut
tasks/restaurer.ymlet remet l'état de l'incarnation précédente ; l'outil de nœud estsetops-restaurer(cf.docs/runbooks-exploitation.md§5.0). - Témoins :
setops-restaurer temoins(comparateursetops-temoins) confronte l'état vivant à l'instantané d'avant rasage ;make temoins-etat, et l'étapebilande la reconstruction.
Prérequis
serveur_backupdéployé, et saserveur_backup_pubkeycorrespondant à la clé privée de la voûte. Couche agents (après les services).