Set-OPS-Public/roles/client_backup/README.md
Daniel Allaire aab1bcc83a doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.

Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:54 -04:00

67 lines
3.3 KiB
Markdown

# 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`) :
```yaml
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)
```yaml
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.yml` et remet l'état de l'incarnation précédente ;
l'outil de nœud est `setops-restaurer` (cf. `docs/exploitation/runbooks-exploitation.md` §5.0).
- Témoins : `setops-restaurer temoins` (comparateur `setops-temoins`) confronte l'état vivant
à l'instantané d'avant rasage ; `make temoins-etat`, et l'étape `bilan` de la reconstruction.
## Prérequis
- `serveur_backup` déployé, et sa `serveur_backup_pubkey` correspondant à la clé privée de
la voûte. Couche **agents** (après les services).