419 lines
6.7 KiB
Markdown
419 lines
6.7 KiB
Markdown
# RecetteScripts
|
||
|
||
Scripts Bash permettant d’automatiser la gestion d’un environnement **PostgreSQL de recette**.
|
||
|
||
Ces scripts permettent :
|
||
|
||
* la **sauvegarde automatisée des bases**
|
||
* la **surveillance de la disponibilité des applications**
|
||
* la **reconstruction d’une base à partir d’un dump**
|
||
|
||
Chaque script possède son propre **fichier `.env` dédié** afin de séparer les configurations.(un global.env.exemple est disponible à la racine du projet)
|
||
|
||
---
|
||
|
||
# 0. Arborescence du projet
|
||
|
||
```
|
||
RecetteScripts
|
||
│
|
||
├── backup-bdd-recette.sh # script de sauvegarde PostgreSQL
|
||
├── backup.env.exemple # exemple de configuration backup
|
||
│
|
||
├── check-statut-recette.sh # script de monitoring des applications
|
||
├── check-statut.env.exemple # exemple de configuration monitoring
|
||
│
|
||
├── rebuild-bdd-recette.sh # script de restauration PostgreSQL
|
||
├── rebuild.env.exemple # exemple de configuration restauration
|
||
│
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
# 1. Principe général
|
||
|
||
Les scripts fonctionnent indépendamment mais utilisent le même principe :
|
||
|
||
1. chargement d’un fichier `.env`
|
||
2. vérification des variables obligatoires
|
||
3. exécution de la tâche principale
|
||
4. génération de logs
|
||
5. notification Discord (optionnelle)
|
||
|
||
---
|
||
|
||
# 2. Prérequis
|
||
|
||
Environnement Linux recommandé.
|
||
|
||
Packages nécessaires sur Ubuntu Server :
|
||
|
||
```
|
||
postgresql-client
|
||
curl
|
||
jq
|
||
openssh-client
|
||
```
|
||
|
||
Commandes PostgreSQL requises :
|
||
|
||
```
|
||
pg_dump
|
||
pg_dumpall
|
||
pg_restore
|
||
psql
|
||
createdb
|
||
dropdb
|
||
```
|
||
|
||
---
|
||
### 3 Connexion SSH
|
||
|
||
Une connexion SSH avec **clé privée** est nécessaire afin de permettre les transferts automatisés de fichiers vers le serveur distant (dump PostgreSQL, rôles, etc.).
|
||
|
||
### Génération de la clé SSH
|
||
|
||
Sur la machine exécutant les scripts :
|
||
|
||
```bash
|
||
ssh-keygen -t ed25519 -f ~/.ssh/id_backup_postgres
|
||
```
|
||
|
||
Explication :
|
||
|
||
* `-t ed25519` : algorithme recommandé
|
||
* `-f` : chemin de la clé
|
||
|
||
Deux fichiers seront créés :
|
||
|
||
```
|
||
~/.ssh/id_backup_postgres
|
||
~/.ssh/id_backup_postgres.pub
|
||
```
|
||
|
||
---
|
||
|
||
### Copier la clé sur le serveur distant
|
||
|
||
Méthode recommandée :
|
||
|
||
```bash
|
||
ssh-copy-id -i ~/.ssh/id_backup_postgres.pub user@serveur
|
||
```
|
||
|
||
Exemple :
|
||
|
||
```bash
|
||
ssh-copy-id -i ~/.ssh/id_backup_postgres.pub backup@192.168.1.50
|
||
```
|
||
|
||
---
|
||
|
||
### Vérifier la connexion
|
||
|
||
Tester la connexion sans mot de passe :
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/id_backup_postgres -o StrictHostKeyChecking=yes backup@192.168.1.50
|
||
```
|
||
|
||
La connexion doit fonctionner **sans demander de mot de passe**.
|
||
|
||
Provisionner aussi `known_hosts` avant le premier run :
|
||
|
||
```bash
|
||
ssh-keyscan -H 192.168.1.50 >> ~/.ssh/known_hosts
|
||
chmod 600 ~/.ssh/known_hosts
|
||
```
|
||
|
||
---
|
||
|
||
### Sécuriser les permissions
|
||
|
||
Les permissions doivent être restreintes :
|
||
|
||
```bash
|
||
chmod 700 ~/.ssh
|
||
chmod 600 ~/.ssh/id_backup_postgres
|
||
chmod 644 ~/.ssh/id_backup_postgres.pub
|
||
```
|
||
|
||
---
|
||
|
||
# 4. Configuration
|
||
|
||
Chaque script possède un **fichier d’exemple** :
|
||
|
||
```
|
||
backup.env.exemple
|
||
check-statut.env.exemple
|
||
rebuild.env.exemple
|
||
```
|
||
|
||
Pour utiliser les scripts :
|
||
|
||
```
|
||
cp backup.env.exemple .env
|
||
```
|
||
|
||
Puis modifier les variables.
|
||
|
||
Variables SSH supplémentaires désormais supportées :
|
||
|
||
```
|
||
BACKUP_REMOTE_SSH_PORT
|
||
BACKUP_KNOWN_HOSTS_STRICT
|
||
BACKUP_KNOWN_HOSTS_FILE
|
||
```
|
||
|
||
---
|
||
|
||
# 5. Script : backup-bdd-recette.sh
|
||
|
||
## Objectif
|
||
|
||
Sauvegarder plusieurs bases PostgreSQL et transférer les dumps vers un serveur distant.
|
||
|
||
---
|
||
|
||
## Fonctionnement
|
||
|
||
Le script :
|
||
|
||
1. charge la configuration `.env`
|
||
2. vérifie les dépendances
|
||
3. empêche l’exécution simultanée (lock)
|
||
4. exporte les rôles PostgreSQL
|
||
5. crée un dump de chaque base
|
||
6. transfère les dumps vers un serveur distant
|
||
7. applique une rotation des sauvegardes
|
||
8. envoie un résumé sur Discord
|
||
|
||
---
|
||
|
||
## Format des fichiers
|
||
|
||
Dump base :
|
||
|
||
```
|
||
base_TIMESTAMP.dump
|
||
```
|
||
|
||
Export utilisateurs :
|
||
|
||
```
|
||
user_TIMESTAMP.sql
|
||
```
|
||
|
||
---
|
||
|
||
## Rotation automatique
|
||
|
||
Suppression des sauvegardes plus anciennes que :
|
||
|
||
```
|
||
10 jours
|
||
```
|
||
|
||
Le script utilise maintenant des options SSH strictes et refuse les clés privées symboliques.
|
||
|
||
---
|
||
|
||
## Exécution
|
||
|
||
```
|
||
./backup-bdd-recette.sh
|
||
```
|
||
|
||
---
|
||
|
||
# 6. Script : check-statut-recette.sh
|
||
|
||
## Objectif
|
||
|
||
Vérifier la disponibilité des applications web.
|
||
|
||
Ce script agit comme un **mini système de monitoring**.
|
||
|
||
---
|
||
|
||
## Vérifications
|
||
|
||
Pour chaque application :
|
||
|
||
1. résolution DNS
|
||
2. requête HTTP
|
||
3. analyse du code HTTP
|
||
|
||
Codes valides :
|
||
|
||
```
|
||
200 → 399
|
||
```
|
||
|
||
---
|
||
|
||
## Exemple de configuration
|
||
|
||
```
|
||
APP_URLS="ferme.malio-dev.fr sirh.malio-dev.fr inventory.malio-dev.fr"
|
||
```
|
||
|
||
---
|
||
|
||
## Logs
|
||
|
||
Fichier généré :
|
||
|
||
```
|
||
app_health_YYYY-MM-DD.log
|
||
```
|
||
|
||
Format :
|
||
|
||
```
|
||
date | statut | host | détail
|
||
```
|
||
|
||
---
|
||
|
||
## Exemple de notification Discord
|
||
|
||
```
|
||
CHECK APP RECETTE 🟢
|
||
|
||
✅ ferme.malio-dev.fr : OK
|
||
✅ sirh.malio-dev.fr : OK
|
||
✅ inventory.malio-dev.fr : OK
|
||
```
|
||
|
||
---
|
||
<details>
|
||
<summary style="list-style: none; cursor: pointer;">
|
||
<strong>EggMaster</strong>
|
||
</summary>
|
||
|
||
<details>
|
||
<summary style="list-style: none; cursor: pointer;">Question 5</summary>
|
||
|
||
Quelle option demande explicitement un decodage plutot qu'un encodage ?
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary style="list-style: none; cursor: pointer;">Indice commande 5</summary>
|
||
|
||
```text
|
||
-d
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary style="list-style: none; cursor: pointer;">Fragment 5</summary>
|
||
|
||
```text
|
||
dWJlLmNvbS93YXRjaD92PWRRdzR3OVdnWGNR
|
||
```
|
||
|
||
</details>
|
||
|
||
</details>
|
||
|
||
# 7. Script : rebuild-bdd-recette.sh
|
||
|
||
## Objectif
|
||
|
||
Restaurer une base PostgreSQL à partir d’un dump distant.
|
||
|
||
---
|
||
|
||
## Fonctionnement
|
||
|
||
Le script :
|
||
|
||
1. charge la configuration `.env`
|
||
2. installe PostgreSQL si nécessaire
|
||
3. démarre le service PostgreSQL
|
||
4. demande la base à restaurer
|
||
5. récupère le dernier dump sur le serveur distant
|
||
6. récupère le dernier export des rôles
|
||
7. crée les rôles manquants
|
||
8. supprime la base existante si nécessaire
|
||
9. restaure la base via `pg_restore`
|
||
10. envoie une notification Discord
|
||
|
||
Le script supporte désormais le port SSH distant, un fichier `known_hosts` dédié et l’exclusion configurable des rôles via `EXCLUDED_RESTORE_ROLES`.
|
||
|
||
---
|
||
|
||
## Sélection de la base
|
||
|
||
Les bases disponibles sont lues depuis :
|
||
|
||
```
|
||
DBS="sirh inventory ferme"
|
||
```
|
||
|
||
Exemple :
|
||
|
||
```
|
||
1) sirh
|
||
2) inventory
|
||
3) ferme
|
||
```
|
||
|
||
---
|
||
|
||
## Commande utilisée pour la restauration
|
||
|
||
```
|
||
pg_restore
|
||
--clean
|
||
--if-exists
|
||
--no-owner
|
||
--no-privileges
|
||
```
|
||
|
||
Ces options évitent les conflits entre environnements.
|
||
|
||
---
|
||
|
||
# 8. Logs
|
||
|
||
Les scripts produisent des logs détaillés :
|
||
|
||
```
|
||
backup logs
|
||
restore logs
|
||
app health logs
|
||
```
|
||
|
||
Ces logs permettent :
|
||
|
||
* diagnostic des erreurs
|
||
* audit des opérations
|
||
* suivi des backups
|
||
|
||
---
|
||
|
||
# 9. Automatisation recommandée
|
||
|
||
### Backup et check quotidien
|
||
|
||
```
|
||
0 19 * * * /scripts/backup-bdd-recette.sh
|
||
0 19 * * * /scripts/check-statut-recette.sh
|
||
```
|
||
|
||
---
|
||
|
||
# 10. Bonnes pratiques
|
||
|
||
Recommandé :
|
||
|
||
* isoler le **serveur de stockage**
|
||
* vérifier régulièrement les restaurations
|
||
---
|