Files
Malio-ops/RecetteScripts/README.md
2026-03-19 11:04:57 +01:00

6.7 KiB
Raw Blame History

RecetteScripts

Scripts Bash permettant dautomatiser la gestion dun environnement PostgreSQL de recette.

Ces scripts permettent :

  • la sauvegarde automatisée des bases
  • la surveillance de la disponibilité des applications
  • la reconstruction dune base à partir dun 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 dun 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 :

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 -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 :

ssh-keyscan -H 192.168.1.50 >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts

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 dexemple :

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 lexé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

EggMaster
Question 5

Quelle option demande explicitement un decodage plutot qu'un encodage ?

Indice commande 5
-d
Fragment 5
dWJlLmNvbS93YXRjaD92PWRRdzR3OVdnWGNR

7. Script : rebuild-bdd-recette.sh

Objectif

Restaurer une base PostgreSQL à partir dun 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 lexclusion 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