# 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 ``` --- # 7. Script : rebuild-bdd-recette.sh Script : ## 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 ---