Set-OPS-Public/roles/client_backup/templates/sauvegarder.sh.j2
Daniel Allaire 7476a54f22 Sauvegardes applicatives (restic) : serveur_backup + client_backup — Tier 0 prouvé
Choix : sauvegarder la donnée d'état (non régénérable), pas les VM
(reconstructibles par le code). restic (chiffré, dédupliqué, rétention).
serveur_backup = cible SFTP (backup-01). client_backup = intégration par
nœud : restic + jobs déclaratifs + timer systemd + rétention, secrets voûte.

Prouvé de bout en bout sur le Tier 0 : infra-pki-01 → /etc/step-ca sauvegardé
hors-nœud vers backup-01, restauration byte-identique des clés CA.

Reste : jobs Tier 1 (pg_dump/slapcat/vmail/forgejo) + offsite (3-2-1).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 22:49:26 -04:00

30 lines
959 B
Django/Jinja

#!/bin/bash
# Géré par Set-OPS (rôle client_backup). Ne pas éditer à la main.
# Sauvegarde applicative du nœud -> dépôt restic hors-nœud (chiffré, dédupliqué).
set -euo pipefail
export RESTIC_REPOSITORY="{{ client_backup_repo }}"
export RESTIC_PASSWORD_FILE="/etc/setops/restic.pass"
# 1. Dumps applicatifs (pg_dump, slapcat, forgejo dump...) vers le staging.
{% for job in client_backup_jobs %}
{% if job.commande is defined %}
install -d -m 0700 "{{ client_backup_staging }}/{{ job.nom }}"
{{ job.commande }}
{% endif %}
{% endfor %}
# 2. Initialiser le dépôt s'il n'existe pas encore.
restic snapshots >/dev/null 2>&1 || restic init
# 3. Snapshot de tous les chemins déclarés.
CHEMINS=(
{% for job in client_backup_jobs %}
{% for c in job.chemins %}
"{{ c }}"
{% endfor %}
{% endfor %}
)
restic backup --host "{{ inventory_hostname }}" --tag setops "${CHEMINS[@]}"
# 4. Rétention.
restic forget {{ client_backup_retention }} --prune