|
| 1 | +# pbs_backup — Fichier de configuration d'un job |
| 2 | + |
| 3 | +*[English version](README.md)* |
| 4 | + |
| 5 | +`pbs_backup_orchestrator.py` exécute des sauvegardes [Proxmox Backup Server |
| 6 | +(PBS)](https://pbs.proxmox.com/) pour des machines distantes. Pour chaque |
| 7 | +machine à sauvegarder, il lit un **fichier de configuration** (un "job"), |
| 8 | +génère un script bash, le pousse via SSH sur la machine cible et l'exécute |
| 9 | +avec `proxmox-backup-client`. |
| 10 | + |
| 11 | +Ce document décrit le format de ce fichier de configuration. |
| 12 | + |
| 13 | +## Emplacement et nommage |
| 14 | + |
| 15 | +- Les fichiers de job vivent dans le répertoire de configuration |
| 16 | + (`CONF_DIR`, par défaut `/etc/pbs-backup/conf.d`). |
| 17 | +- Formats acceptés : `.yaml` / `.yml` ou `.json`. |
| 18 | +- **Le nom du job est le nom du fichier, sans extension.** Par exemple |
| 19 | + `web01.yaml` définit le job `web01`. |
| 20 | +- Si deux fichiers définissent le même nom de job (ex: `web01.json` et |
| 21 | + `web01.yaml`), le second est ignoré avec un avertissement. |
| 22 | +- Ces fichiers peuvent contenir des secrets (mot de passe / token PBS) : |
| 23 | + appliquer `chmod 600`. |
| 24 | + |
| 25 | +Des exemples commentés sont fournis dans `conf.d/example.yaml.sample` et |
| 26 | +`conf.d/example.json.sample`. |
| 27 | + |
| 28 | +## Structure |
| 29 | + |
| 30 | +Le fichier est un objet/mapping avec cinq sections : `ssh`, `pbs`, `backup`, |
| 31 | +`nobackup_marker` et `hooks`. |
| 32 | + |
| 33 | +### `ssh` — accès à la machine cible |
| 34 | + |
| 35 | +| Clé | Type | Obligatoire | Défaut | Description | |
| 36 | +|--------|--------|-------------|--------|-------------------------------------------------| |
| 37 | +| `host` | string | oui | — | Hôte SSH de la machine à sauvegarder | |
| 38 | +| `port` | int | non | `22` | Port SSH | |
| 39 | +| `user` | string | non | `root` | Utilisateur SSH | |
| 40 | +| `key` | string | non | — | Chemin de la clé privée SSH (`ssh -i`) | |
| 41 | + |
| 42 | +La connexion se fait en mode `BatchMode=yes` (pas de prompt interactif) : |
| 43 | +l'authentification par clé doit être déjà en place. |
| 44 | + |
| 45 | +### `pbs` — cible Proxmox Backup Server |
| 46 | + |
| 47 | +| Clé | Type | Obligatoire | Défaut | Description | |
| 48 | +|-----------------|--------|-------------|--------|----------------------------------------------------------------------| |
| 49 | +| `repository` | string | oui | — | Dépôt PBS, format `user@realm!token@host:datastore` | |
| 50 | +| `password` | string | non | — | Secret PBS (mot de passe ou valeur du token) en clair | |
| 51 | +| `password_file` | string | non | — | Fichier contenant le secret PBS (alternative à `password`) | |
| 52 | +| `fingerprint` | string | non | — | Empreinte TLS du serveur PBS | |
| 53 | +| `namespace` | string | non | — | Namespace PBS cible | |
| 54 | + |
| 55 | +Un **token API** est recommandé plutôt qu'un mot de passe utilisateur. |
| 56 | +Si `password_file` est renseigné, il est préféré à `password` (le fichier |
| 57 | +est lu au moment de l'exécution, ce qui évite de stocker le secret en clair |
| 58 | +dans le fichier de config). Ces valeurs sont exportées comme variables |
| 59 | +d'environnement (`PBS_REPOSITORY`, `PBS_PASSWORD`, `PBS_FINGERPRINT`, |
| 60 | +`PBS_NAMESPACE`) dans le script exécuté sur la machine cible. |
| 61 | + |
| 62 | +### `backup` — sources à sauvegarder |
| 63 | + |
| 64 | +| Clé | Type | Obligatoire | Défaut | Description | |
| 65 | +|------------------|---------------|-------------|-----------------------|----------------------------------------------------------------------| |
| 66 | +| `sources` | liste[string] | oui | — | Sources à sauvegarder, format `nom-archive.pxar:/chemin` (ou `nom.img:/dev/xxx` pour un disque) | |
| 67 | +| `backup_id` | string | non | — | Identifiant de sauvegarde passé à `--backup-id` | |
| 68 | +| `extra_opts` | liste[string] | non | `[]` | Options supplémentaires ajoutées telles quelles à la commande `proxmox-backup-client backup` | |
| 69 | +| `remote_tmp_dir` | string | non | `/root/.pbs-backup` | Répertoire temporaire sur la machine cible pour y déposer le script généré | |
| 70 | + |
| 71 | +`sources` doit contenir au moins une entrée. |
| 72 | + |
| 73 | +### `nobackup_marker` — exclusion par fichier marqueur |
| 74 | + |
| 75 | +| Clé | Type | Obligatoire | Défaut | Description | |
| 76 | +|-----------|--------|-------------|--------------|----------------------------------------------------------------------------| |
| 77 | +| `enabled` | bool | non | `true` | Si activé, tout répertoire contenant ce fichier marqueur est exclu | |
| 78 | +| `name` | string | non | `.nobackup` | Nom du fichier marqueur recherché sur la machine cible | |
| 79 | + |
| 80 | +La recherche est effectuée sur la machine cible au moment de la sauvegarde, |
| 81 | +pour chaque chemin source déclaré dans `backup.sources`. |
| 82 | + |
| 83 | +### `hooks` — commandes pré/post sauvegarde |
| 84 | + |
| 85 | +| Clé | Type | Obligatoire | Défaut | Description | |
| 86 | +|---------------|--------|-------------|--------|-----------------------------------------------------| |
| 87 | +| `pre_backup` | string | non | — | Commande exécutée avant la sauvegarde (`bash -c`) | |
| 88 | +| `post_backup` | string | non | — | Commande exécutée après la sauvegarde (`bash -c`) | |
| 89 | + |
| 90 | +- `pre_backup` doit réussir pour que la sauvegarde démarre. |
| 91 | +- `post_backup` s'exécute **toujours** (succès ou échec de la sauvegarde ou |
| 92 | + du hook `pre_backup`) et n'affecte pas le code de sortie du job. |
| 93 | + |
| 94 | +Ces commandes sont exécutées **sur la machine cible**, pas sur la machine |
| 95 | +qui héberge l'orchestrateur. |
| 96 | + |
| 97 | +## Exemple minimal (YAML) |
| 98 | + |
| 99 | +```yaml |
| 100 | +ssh: |
| 101 | + host: web01.example.com |
| 102 | + key: /root/.ssh/id_pbs_backup |
| 103 | + |
| 104 | +pbs: |
| 105 | + repository: "backup@pbs!token@pbs.example.com:datastore1" |
| 106 | + password_file: /etc/pbs-backup/secrets/web01.token |
| 107 | + fingerprint: "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" |
| 108 | + |
| 109 | +backup: |
| 110 | + sources: |
| 111 | + - "root.pxar:/" |
| 112 | + - "etc.pxar:/etc" |
| 113 | + extra_opts: |
| 114 | + - "--exclude /var/tmp" |
| 115 | + - "--exclude /tmp" |
| 116 | +``` |
| 117 | +
|
| 118 | +## Utilisation |
| 119 | +
|
| 120 | +```bash |
| 121 | +# Exécuter tous les jobs du répertoire de config |
| 122 | +pbs-backup-orchestrator |
| 123 | + |
| 124 | +# Ne traiter qu'un job précis |
| 125 | +pbs-backup-orchestrator --job web01 |
| 126 | + |
| 127 | +# Générer les scripts sans les pousser/exécuter (vérification) |
| 128 | +pbs-backup-orchestrator --dry-run |
| 129 | + |
| 130 | +# Utiliser un autre répertoire de configuration |
| 131 | +pbs-backup-orchestrator --conf-dir /chemin/vers/conf.d |
| 132 | +``` |
| 133 | + |
| 134 | +Voir `install.sh` pour l'installation sur Debian (venv Python dédié, |
| 135 | +lanceur `/usr/local/bin/pbs-backup-orchestrator`). |
0 commit comments