fix/427-correctifs #12

Merged
Matteo merged 2 commits from fix/427-correctifs into develop 2026-03-13 08:01:30 +00:00
9 changed files with 696 additions and 223 deletions

View File

@@ -110,49 +110,25 @@ Cela permet :
---
# 6. Connexion au serveur de sauvegarde (Machine IA)
### 6. Connexion au serveur de sauvegarde (Machine IA)
Le transfert des sauvegardes vers la machine IA repose sur une **authentification par clé SSH**.
Cette méthode permet au script de se connecter automatiquement au serveur distant sans mot de passe.
Le transfert des sauvegardes utilise une **clé SSH** afin de permettre une connexion automatique au serveur distant sans mot de passe.
La clé utilisée pour ce script est :
#### 1. Génération de la clé
```
~/.ssh/id_ed25519_bitwarden
````
---
## 6.1 Vérifier la présence de la clé SSH
Sur la machine exécutant le script, vérifier que la clé existe :
Sur la machine exécutant les scripts :
```bash
ls ~/.ssh/id_ed25519_bitwarden*
````
Les fichiers attendus sont :
```
~/.ssh/id_ed25519_bitwarden
~/.ssh/id_ed25519_bitwarden.pub
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_bitwarden
```
* `id_ed25519_bitwarden` → clé privée utilisée par le script
* `id_ed25519_bitwarden.pub` → clé publique autorisée sur la machine IA
---
## 6.2 Copier la clé publique sur la machine IA
Envoyer la clé publique vers la machine IA :
#### 2. Copie de la clé vers le serveur distant
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_bitwarden.pub backup@192.168.0.179
```
Cette commande ajoute automatiquement la clé dans :
Cette commande ajoute la clé dans :
```
~/.ssh/authorized_keys
@@ -160,27 +136,28 @@ Cette commande ajoute automatiquement la clé dans :
sur la machine IA.
---
## 6.3 Ajout manuel de la clé (si ssh-copy-id n'est pas disponible)
Afficher la clé publique :
#### 3. Vérification de la connexion
```bash
cat ~/.ssh/id_ed25519_bitwarden.pub
ssh -i ~/.ssh/id_ed25519_bitwarden backup@192.168.0.179
```
Copier son contenu puis lajouter sur la machine IA dans :
#### 4. Vérification des fichiers de clé
```
~/.ssh/authorized_keys
```bash
ls ~/.ssh/id_ed25519_bitwarden*
```
---
Fichiers attendus :
## 6.4 Vérifier les permissions SSH
```
~/.ssh/id_ed25519_bitwarden
~/.ssh/id_ed25519_bitwarden.pub
```
Sur la machine locale :
#### 5. Permissions SSH
Machine locale :
```bash
chmod 700 ~/.ssh
@@ -188,40 +165,20 @@ chmod 600 ~/.ssh/id_ed25519_bitwarden
chmod 644 ~/.ssh/id_ed25519_bitwarden.pub
```
Sur la machine IA :
Machine distante :
```bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
---
## 6.5 Tester la connexion
Tester la connexion SSH avec la clé :
```bash
ssh -i ~/.ssh/id_ed25519_bitwarden backup@192.168.0.179
```
Si la configuration est correcte :
* la connexion se fait **sans mot de passe**
* la machine IA accepte la clé SSH
* le script pourra envoyer les sauvegardes automatiquement
---
## 6.6 Déclaration dans le fichier `.env`
La clé utilisée par le script doit être déclarée dans `.env` :
#### 6. Déclaration dans `.env`
```bash
SSH_KEY=/home/matt/.ssh/id_ed25519_bitwarden
```
Cette clé sera utilisée automatiquement par `scp` lors du transfert des sauvegardes.
Cette clé sera utilisée automatiquement par les scripts (`scp` / `ssh`) pour transférer les sauvegardes.
# 7. Sauvegarde des données Vaultwarden

View File

@@ -18,7 +18,23 @@ La limite d'alerte est fixée à 70% d'utilisation, mais vous pouvez ajuster cet
3. ```bash
cd Scripts-Serveur/CheckStorage
```
### Génération de la clé SSH
Sur la machine exécutant les scripts :
```bash
ssh-keygen -t ed25519 -f ~/.ssh/check_storage_key
```
Copier la clé sur le serveur distant :
```bash
ssh-copy-id -i ~/.ssh/check_storage_key.pub user@serveur
```
Tester la connexion sans mot de passe :
```bash
ssh -i ~/.ssh/id_backup_postgres backup@192.168.1.50
```
## Utilisation du script
0. Copiez le fichier d'environnement exemple et modifiez les variables selon votre configuration :
```bash

View File

@@ -1,81 +0,0 @@
#############################################
# ENVIRONNEMENT
#############################################
# Nom de l'environnement (ex: DEV / RECETTE / PROD)
ENV_NAME=RECETTE
#############################################
# POSTGRESQL
#############################################
# Host PostgreSQL
PGHOST=localhost
# Port PostgreSQL
PGPORT=5432
# Utilisateur utilisé pour les dumps
PGUSER=nom_de_user
# Mot de passe PostgreSQL
PGPASSWORD=change_me_secure_password
# Bases à sauvegarder (séparées par espace)
DBS="sirh inventory ferme"
#############################################
# SERVEUR DE STOCKAGE DES BACKUPS
#############################################
# Utilisateur du serveur distant
BACKUP_REMOTE_USER=nom_de_user
# Host ou IP du serveur distant
BACKUP_REMOTE_HOST=192.168.1.50
# Dossier distant pour stocker les backups
BACKUP_REMOTE_DIR=/home/nom_de_user/backups/bdd-recette
#############################################
# SSH
#############################################
# Clé SSH utilisée pour envoyer les dumps
SSH_KEY=/home/nom_de_user/.ssh/id_ed25519_backup
# Timeout SSH (secondes)
SSH_TIMEOUT=10
#############################################
# LOGS
#############################################
# Dossier des logs backup
BACKUP_LOG_DIR=/var/log/pg_backup
# Dossier logs monitoring apps
APP_LOG_DIR=/var/log/app_health
#############################################
# DISCORD
#############################################
# Webhook Discord pour notifications
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/xxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Ping en cas d'erreur
DISCORD_PING=@here
#############################################
# HEALTH CHECK APPS
#############################################
# Timeout connexion HTTP
CHECK_CONNECT_TIMEOUT=3
# Timeout total curl
CHECK_MAX_TIME=8
# Applications à vérifier
APP_URLS="ferme.example.local sirh.example.local inventory.example.local"

View File

@@ -1,121 +1,378 @@
# Scripts Recette
# RecetteScripts
Ce dossier contient les scripts utilisés pour lenvironnement **RECETTE** du projet **Ferme**.
Scripts Bash permettant dautomatiser la gestion dun environnement **PostgreSQL de recette**.
Les scripts permettent principalement :
Ces scripts permettent :
* la **sauvegarde automatique des bases de données PostgreSQL**
* la **vérification du statut des applications web**
* la **sauvegarde automatie 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)
---
# Scripts disponibles
# 0. Arborescence du projet
## backup-bdd-recette.sh
Script permettant de réaliser une **sauvegarde des bases de données PostgreSQL**.
Fonctionnement :
* export des bases PostgreSQL définies dans la configuration
* export des utilisateurs PostgreSQL
* création de dumps au format PostgreSQL (`pg_dump -Fc`)
* transfert des sauvegardes vers un serveur distant
* génération de logs locaux
* envoi de notifications Discord en cas de succès ou derreur
```
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
```
---
## check-statut-recette.sh
# 1. Principe général
Script permettant de **vérifier la disponibilité des applications web**.
Les scripts fonctionnent indépendamment mais utilisent le même principe :
Le script effectue les vérifications suivantes :
* résolution DNS du site
* connexion HTTP au service
* vérification du code HTTP retourné
Une application est considérée :
* **OK** si le code HTTP est entre **200 et 399**
* **DOWN** si la résolution DNS échoue ou si une erreur HTTP est détectée
Chaque vérification est enregistrée dans un **fichier de log** et une notification peut être envoyée sur **Discord**.
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)
---
# Installation
# 2. Prérequis
1. Clonez le dépôt Git :
Environnement Linux recommandé.
```bash
git clone https://gitea.malio.fr/MALIO-DEV/Scripts-Serveur.git
Packages nécessaires :
```
postgresql-client
curl
jq
ssh
scp
```
2. Accédez au dossier des scripts :
Commandes PostgreSQL requises :
```bash
cd Scripts-Serveur/RecetteScripts
```
pg_dump
pg_dumpall
pg_restore
psql
createdb
dropdb
```
3. Copiez le fichier denvironnement :
---
### 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
cp .env.example .env
ssh-keygen -t ed25519 -f ~/.ssh/id_backup_postgres
```
4. Modifiez les variables du fichier `.env` selon votre configuration.
Explication :
* `-t ed25519` : algorithme recommandé
* `-f` : chemin de la clé
Deux fichiers seront créés :
```
~/.ssh/id_backup_postgres
~/.ssh/id_backup_postgres.pub
```
---
# Utilisation
### Copier la clé sur le serveur distant
Donnez les permissions dexécution aux scripts :
Méthode recommandée :
```bash
chmod +x backup-bdd-recette.sh
chmod +x check-statut-recette.sh
ssh-copy-id -i ~/.ssh/id_backup_postgres.pub user@serveur
```
Exécution manuelle :
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 backup@192.168.1.50
```
La connexion doit fonctionner **sans demander de mot de passe**.
---
### 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 dexemple** :
```
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 :
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
```
---
## Exécution
```
./backup-bdd-recette.sh
./check-statut-recette.sh
```
---
# Exécution automatique avec Cron
# 6. Script : check-statut-recette.sh
Ouvrez le crontab :
Script :
## 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 :
```bash
crontab -e
```
Exemple de planification :
Backup des bases tous les jours à 19h :
```bash
0 19 * * * /chemin/vers/le/script/backup-bdd-recette.sh
```
Vérification des applications tous les jours à 19h :
```bash
0 19 * * * /chemin/vers/le/script/check-statut-recette.sh
200 → 399
```
---
# Avertissement
## Exemple de configuration
Assurez-vous que :
```
APP_URLS="ferme.malio-dev.fr sirh.malio-dev.fr inventory.malio-dev.fr"
```
* PostgreSQL est accessible depuis la machine exécutant le script
* la clé SSH pour le transfert des sauvegardes est configurée
* les variables du fichier `.env` sont correctement renseignées
* les commandes `curl`, `psql` et `pg_dump` sont installées sur le système
---
## 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 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
---
## 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
---

View File

@@ -0,0 +1,65 @@
###############################################################################
# ENVIRONNEMENT
###############################################################################
# Nom de l'environnement
ENV_NAME=RECETTE
###############################################################################
# POSTGRESQL
###############################################################################
# Host du serveur PostgreSQL
PGHOST=localhost
# Port PostgreSQL
PGPORT=5432
# Utilisateur utilisé pour réaliser les dumps
PGUSER=
# Mot de passe PostgreSQL
PGPASSWORD=
# Bases de données à sauvegarder (séparées par des espaces)
DBS="sirh inventory ferme"
###############################################################################
# SERVEUR DISTANT DE BACKUP
###############################################################################
# Utilisateur SSH du serveur de backup
BACKUP_REMOTE_USER=
# Host ou IP du serveur distant
BACKUP_REMOTE_HOST=
# Dossier distant où seront stockées les sauvegardes
BACKUP_REMOTE_DIR=/home/.../backups/bdd-recette
###############################################################################
# SSH
###############################################################################
# Clé SSH utilisée pour se connecter au serveur distant
SSH_KEY=/home/.../.ssh/id_ed25519_backup
# Timeout de connexion SSH (secondes)
SSH_TIMEOUT=10
###############################################################################
# LOGS
###############################################################################
# Dossier où seront stockés les logs du script
BACKUP_LOG_DIR=/var/log/script/
###############################################################################
# DISCORD (optionnel)
###############################################################################
# Webhook Discord pour envoyer les notifications
DISCORD_WEBHOOK_URL=
# Mention envoyée en cas d'erreur
DISCORD_PING=@here

View File

@@ -114,7 +114,6 @@ add_summary_line() {
#######################################
# Envoi du message Discord récapitulatif
#######################################
send_discord_summary() {
[[ -z "${DISCORD_WEBHOOK_URL:-}" ]] && return 0
@@ -126,17 +125,23 @@ send_discord_summary() {
ping_prefix="${DISCORD_PING} "
fi
local msg="**${ping_prefix}CHECK APP ${ENV_NAME} ${header_icon}**"
local msg
msg="$(printf '**%sCHECK APP %s %s**\n' \
"$ping_prefix" \
"$ENV_NAME" \
"$header_icon"
)"
local line
for line in "${SUMMARY_LINES[@]}"; do
msg+=$'\n'"${line}"
msg+="$(printf '%s\n' "$line")"
done
local payload
payload="$(jq -n --arg content "$msg" '{content: $content}')"
curl -fsS -H "Content-Type: application/json" \
curl -fsS \
-H "Content-Type: application/json" \
-d "$payload" \
"$DISCORD_WEBHOOK_URL" >/dev/null || true
}

View File

@@ -0,0 +1,42 @@
###############################################################################
# ENVIRONNEMENT
###############################################################################
# Nom de l'environnement surveillé
ENV_NAME=RECETTE
###############################################################################
# LOGS
###############################################################################
# Dossier où seront stockés les logs du script
APP_LOG_DIR=/var/log/script
###############################################################################
# PARAMÈTRES DE VÉRIFICATION HTTP
###############################################################################
# Timeout de connexion à l'application (secondes)
# Si le serveur ne répond pas dans ce délai, la connexion échoue
CHECK_CONNECT_TIMEOUT=5
# Temps maximum total autorisé pour la requête HTTP (secondes)
CHECK_MAX_TIME=10
###############################################################################
# APPLICATIONS À SURVEILLER
###############################################################################
# Liste des applications à vérifier (séparées par des espaces)
APP_URLS="ferme.malio-dev.fr inventory.malio-dev.fr sirh.malio-dev.fr"
###############################################################################
# DISCORD
###############################################################################
# Webhook Discord pour envoyer le résumé des vérifications
DISCORD_WEBHOOK_URL=https:
# Mention Discord en cas de problème
DISCORD_PING=@here

View File

@@ -0,0 +1,80 @@
###############################################################################
# ENVIRONNEMENT
###############################################################################
# Nom de l'environnement
# Exemple : DEV / RECETTE / PROD
ENV_NAME=RECETTE
###############################################################################
# POSTGRESQL LOCAL
###############################################################################
# Hôte PostgreSQL local sur lequel la restauration sera effectuée
PGHOST=localhost
# Port PostgreSQL local
PGPORT=5432
# Utilisateur PostgreSQL utilisé pour créer la base et lancer la restauration
PGUSER=
# Mot de passe
PGPASSWORD=
# Liste des bases proposées à la restauration (séparées par des espaces)
# L'utilisateur pourra en choisir une dans le script
DBS="sirh inventory ferme"
###############################################################################
# SERVEUR DISTANT DE BACKUP
###############################################################################
# Utilisateur SSH du serveur distant contenant les dumps
BACKUP_REMOTE_USER=
# Hôte ou IP du serveur distant
BACKUP_REMOTE_HOST=
# Répertoire racine distant :
BACKUP_REMOTE_DIR=/home/.../backups/bdd-recette
###############################################################################
# SSH
###############################################################################
# Clé privée SSH utilisée pour se connecter au serveur distant
SSH_KEY=/home/.../.ssh/id_ed25519_backup
# Timeout de connexion SSH en secondes
# Variable optionnelle dans le script, mais utile ici comme valeur par défaut
SSH_CONNECT_TIMEOUT=8
###############################################################################
# LOGS
###############################################################################
# Dossier local dans lequel seront écrits les logs de restauration
BACKUP_LOG_DIR=/var/log/pg_backup
###############################################################################
# RESTAURATION LOCALE
###############################################################################
# Dossier local temporaire pour télécharger les fichiers avant restauration
# Optionnel : si absent, le script utilise ./restore_tmp
LOCAL_RESTORE_DIR=/tmp/rebuild-bdd-recette
###############################################################################
# RÔLES POSTGRESQL DISTANTS
###############################################################################
# Nom du dossier distant contenant les exports SQL des rôles
REMOTE_ROLES_DIR_NAME=user
###############################################################################
# DISCORD
###############################################################################
# Webhook Discord pour notifier le succès de la restauration
DISCORD_WEBHOOK_URL=

132
global.env.exemple Normal file
View File

@@ -0,0 +1,132 @@
###############################################################################
# FICHIER .env.example
#
# Ce fichier sert de modèle de configuration pour les scripts d'automatisation :
# - backup-bdd-recette.sh → sauvegarde PostgreSQL
# - rebuild-bdd-recette.sh → reconstruction d'une base PostgreSQL
# - check-statut-recette.sh → vérification disponibilité des applications
# - check-storage.sh → surveillance de l'espace disque
# - backup-vaultwarden.sh → sauvegarde du service Vaultwarden
#
# Copier ce fichier en .env puis remplir les valeurs.
###############################################################################
#############################################
# ENVIRONNEMENT
#############################################
# Nom de l'environnement (ex : DEV / RECETTE / PROD)
ENV_NAME=RECETTE
#############################################
# DISCORD
#############################################
# Webhook Discord utilisé pour envoyer les notifications
WEBHOOK_URL=
#############################################
# POSTGRESQL
#############################################
# Adresse du serveur PostgreSQL
PGHOST=localhost
# Port PostgreSQL
PGPORT=5432
# Utilisateur utilisé pour les dumps
PGUSER=
# Mot de passe
PGPASSWORD=
# Bases de données à sauvegarder (séparées par espace)
# Utilisé par backup-bdd-recette.sh
DBS="sirh inventory ferme"
#############################################
# BACKUPS LOCAUX
#############################################
# Dossier local où les dumps seront générés temporairement
BACKUP_LOCAL_DIR=/var/backups/postgresql
# Dossier des logs de sauvegarde
BACKUP_LOG_DIR=/var/log/script/...
#############################################
# SERVEUR DISTANT DE STOCKAGE
#############################################
# Utilisateur du serveur de backup distant
BACKUP_REMOTE_USER=
# Adresse IP ou hostname du serveur de stockage
BACKUP_REMOTE_HOST=
# Dossier distant où stocker les backups
BACKUP_REMOTE_DIR=/home/.../backups/bdd-recette
#############################################
# SSH
#############################################
# Clé SSH utilisée pour se connecter au serveur distant
SSH_KEY=/home/.../.ssh/id_ed25519_backup
# Timeout SSH (secondes)
SSH_TIMEOUT=10
#############################################
# ROTATION DES BACKUPS
#############################################
# Nombre de jours de conservation des sauvegardes
BACKUP_RETENTION_DAYS=10
#############################################
# APPLICATIONS À SURVEILLER
#############################################
# Liste des applications à vérifier
APPS="
ferme.malio-dev.fr
inventory.malio-dev.fr
sirh.malio-dev.fr
"
#############################################
# VAULTWARDEN
#############################################
# Dossier contenant les données Vaultwarden
VAULTWARDEN_DATA_DIR=/opt/vaultwarden/data
# Dossier local où stocker le backup
VAULTWARDEN_BACKUP_DIR=/var/backups/vaultwarden
#############################################
# SERVEUR IA / STOCKAGE CENTRAL
#############################################
# Utilisateur SSH du serveur distant
IA_SSH_USER=
# Host du serveur distant
IA_SSH_HOST=
# Dossier racine contenant les dumps PostgreSQL
IA_BASE_DIR=/home/.../backups/bdd-recette
# Dossier contenant les rôles PostgreSQL exportés
REMOTE_ROLES_NAME=user