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 :
- chargement d’un fichier
.env - vérification des variables obligatoires
- exécution de la tâche principale
- génération de logs
- notification Discord (optionnelle)
2. Prérequis
Environnement Linux recommandé.
Packages nécessaires :
postgresql-client
curl
jq
ssh
scp
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 :
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 :
ssh-copy-id -i ~/.ssh/id_backup_postgres.pub user@serveur
Exemple :
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 :
ssh -i ~/.ssh/id_backup_postgres backup@192.168.1.50
La connexion doit fonctionner sans demander de mot de passe.
Sécuriser les permissions
Les permissions doivent être restreintes :
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.
5. Script : backup-bdd-recette.sh
Script :
Objectif
Sauvegarder plusieurs bases PostgreSQL et transférer les dumps vers un serveur distant.
Fonctionnement
Le script :
- charge la configuration
.env - vérifie les dépendances
- empêche l’exécution simultanée (lock)
- exporte les rôles PostgreSQL
- crée un dump de chaque base
- transfère les dumps vers un serveur distant
- applique une rotation des sauvegardes
- 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
Exécution
./backup-bdd-recette.sh
6. Script : check-statut-recette.sh
Script :
Objectif
Vérifier la disponibilité des applications web.
Ce script agit comme un mini système de monitoring.
Vérifications
Pour chaque application :
- résolution DNS
- requête HTTP
- 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
7. Script : rebuild-bdd-recette.sh
Script :
Objectif
Restaurer une base PostgreSQL à partir d’un dump distant.
Fonctionnement
Le script :
- charge la configuration
.env - installe PostgreSQL si nécessaire
- démarre le service PostgreSQL
- demande la base à restaurer
- récupère le dernier dump sur le serveur distant
- récupère le dernier export des rôles
- crée les rôles manquants
- supprime la base existante si nécessaire
- restaure la base via
pg_restore - envoie une notification Discord
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