fix/correctif #14

Merged
Matteo merged 2 commits from fix/correctif into develop 2026-03-18 10:54:05 +00:00
12 changed files with 89 additions and 61 deletions

View File

@@ -2,6 +2,9 @@
# VAULTWARDEN BACKUP CONFIGURATION
#############################################
# Webhook Discord pour notifications (optionnel)
DISCORD_WEBHOOK_URL=
# Répertoire contenant les données Vaultwarden
DATA_DIR=

View File

@@ -1,4 +1,3 @@
markdown
# README — Mise en place du script de sauvegarde Vaultwarden
Ce script permet dautomatiser la sauvegarde de Vaultwarden afin de conserver une copie du dossier `data`, de la transférer vers un serveur distant et denvoyer une notification Discord en cas de succès ou déchec.
@@ -67,8 +66,8 @@ Elles doivent être placées dans un fichier `.env`.
```bash
WEBHOOK_URL=https://discord.com/api/webhooks/...
REMOTE_USER=backup
REMOTE_HOST=192.168.1.50
REMOTE_USER=<USER>
REMOTE_HOST=<IP_SERVEUR>
SSH_KEY=/home/matt/.ssh/id_ed25519_vaultwarden_backup
DATA_DIR=/opt/vaultwarden/data
REMOTE_DIR=/home/backup/backups/vaultwarden
@@ -89,24 +88,27 @@ REMOTE_DIR=/home/backup/backups/vaultwarden
# 5. Chargement des variables dans le script
Le script récupère les variables du fichier `.env`.
Le script charge directement le fichier `.env` avec `source` et exporte automatiquement les variables pendant le chargement.
Exemple :
Mécanisme utilisé :
```bash
REMOTE_USER=$(grep -E '^REMOTE_USER=' .env | cut -d '=' -f2-)
set -a
source "$ENV_FILE"
set +a
```
Explication :
* `grep` recherche la variable dans `.env`
* `cut` récupère uniquement la valeur après `=`
* la variable shell reçoit la valeur correspondante
* `set -a` exporte automatiquement les variables définies ensuite
* `source "$ENV_FILE"` lit et exécute le contenu du fichier `.env` dans le shell courant
* `set +a` désactive ensuite l'export automatique
Cela permet :
* d'améliorer la sécurité
* de modifier la configuration sans toucher au script
* de charger toutes les variables du fichier `.env` en une seule fois
* de conserver la configuration en dehors du script
* de rester aligné avec le comportement réel du script
---
@@ -125,7 +127,7 @@ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_bitwarden
#### 2. Copie de la clé vers le serveur distant
```bash
ssh-copy-id -i ~/.ssh/id_ed25519_bitwarden.pub backup@192.168.0.179
ssh-copy-id -i ~/.ssh/id_ed25519_bitwarden.pub <USER>@<IP_SERVEUR>
```
Cette commande ajoute la clé dans :

View File

@@ -33,7 +33,7 @@ set +a
#######################################
# Variables obligatoires
#######################################
: "${WEBHOOK_URL:=}"
: "${DISCORD_WEBHOOK_URL:=}"
: "${DATA_DIR:?Variable DATA_DIR manquante dans .env}"
: "${LOCAL_BACKUP:?Variable LOCAL_BACKUP manquante dans .env}"
: "${REMOTE_USER:?Variable REMOTE_USER manquante dans .env}"
@@ -47,13 +47,12 @@ set +a
DATE="$(date +'%Y-%m-%d_%H-%M-%S')"
BACKUP_PREFIX="vaultwarden-backup"
BACKUP_NAME="${BACKUP_PREFIX}-${DATE}.tar.gz"
LOCAL_BACKUP_DIR="$LOCAL_BACKUP"
LOCAL_BACKUP_FILE="${LOCAL_BACKUP_DIR}/${BACKUP_NAME}"
RETENTION_DAYS=10
LOCAL_BACKUP_FILE="${LOCAL_BACKUP}/${BACKUP_NAME}"
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-10}"
SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o BatchMode=yes -o ConnectTimeout=10)
mkdir -p "$LOCAL_BACKUP_DIR"
mkdir -p "$LOCAL_BACKUP"
#######################################
# Notification Discord
@@ -62,7 +61,7 @@ discord_ping() {
local success="$1"
local details="${2:-}"
[[ -z "$WEBHOOK_URL" ]] && return 0
[[ -z "$DISCORD_WEBHOOK_URL" ]] && return 0
local icon status_line
if [[ "$success" == "true" ]]; then
@@ -81,10 +80,9 @@ discord_ping() {
msg+="Data transfer: ${status_line}\n"
[[ -n "$details" ]] && msg+="Détails: ${details}"
python3 - <<PY | curl -fsS -H "Content-Type: application/json" -d @- "$WEBHOOK_URL" >/dev/null || true
import json
print(json.dumps({"content": """$msg"""}))
PY
local payload
payload="$(jq -n --arg content "$msg" '{content: $content}')"
curl -fsS -H "Content-Type: application/json" -d "$payload" "$DISCORD_WEBHOOK_URL" >/dev/null || true
}
#######################################

View File

@@ -3,4 +3,4 @@
#############################################
# Webhook Discord pour notifications
WEBHOOK_URL=
DISCORD_WEBHOOK_URL=

View File

@@ -33,7 +33,7 @@ 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
ssh -i ~/.ssh/check_storage_key <USER>@<HOST>
```
## Utilisation du script
0. Copiez le fichier d'environnement exemple et modifiez les variables selon votre configuration :
@@ -62,4 +62,4 @@ ssh -i ~/.ssh/id_backup_postgres backup@192.168.1.50
```
## Avertissement
Assurez-vous de remplacer `/chemin/vers/le/script/check-storage.sh` par le chemin réel où se trouve le script sur votre système.
Assurez-vous de remplacer `/chemin/vers/le/script/check-storage.sh` par le chemin réel où se trouve le script sur votre système.

View File

@@ -56,7 +56,7 @@ if [ "$usage" -ge "$limit" ]; then
-H "Accept: application/json" \
-H "Content-Type: application/json; charset=utf-8" \
-d "$payload" \
"$WEBHOOK_URL"
"$DISCORD_WEBHOOK_URL"
fi
@@ -66,4 +66,4 @@ fi
echo "Espace disponible : ${avail_gb} GB"
echo "Espace utilise / espace total : ${used_gb} GB / ${total_gb} GB"
echo "Name: ${HOSTNAME}"
echo "Name: ${HOSTNAME}"

View File

@@ -1,43 +1,56 @@
# Malio-Ops MALIO
Ce dépôt sert au **versionnement des scripts utilisés dans linfrastructure du projet Ferme**.
# Malio-Ops
Lobjectif est de conserver un historique clair des scripts, suivre les évolutions et permettre leur amélioration progressive.
## Contenu du dépôt
Le dépôt peut contenir différents types de scripts utilisés pour lexploitation technique :
* scripts de **backup PostgreSQL**
* scripts de **monitoring des applications**
* scripts **dautomatisation système**
* scripts **dadministration ou de maintenance**
Ce depot centralise les scripts d'exploitation et de maintenance utilises pour l'infrastructure MALIO. Il sert de base de versionnement pour les sauvegardes, la supervision, les operations PostgreSQL et la reconstruction de bases.
## Objectif
Ce dépôt permet de :
Le depot permet de :
* suivre les **modifications des scripts dans le temps**
* garder une **version stable et reproductible**
* faciliter la **maintenance et les corrections**
* centraliser les scripts utilisés sur les serveurs
* suivre les modifications des scripts dans le temps
* conserver des versions stables et reproductibles
* mutualiser la configuration et les bonnes pratiques d'exploitation
* centraliser la documentation technique associee
## Organisation
## Structure du depot
Les évolutions importantes sont documentées dans le fichier :
Le depot est organise par dossier fonctionnel :
```
CHANGELOG.md
```
* [CheckStorage](CheckStorage) : surveillance de l'espace disque et alertes Discord
* [BackupVaultWarden](BackupVaultWarden) : sauvegarde et transfert distant des donnees Vaultwarden
* [RecetteScripts](RecetteScripts) : scripts historiques de backup, monitoring et rebuild pour l'environnement de recette
* [RebuildBdd](RebuildBdd) : orchestration de reconstruction de bases PostgreSQL, bootstrap de cibles et checks de preparation
Ce fichier décrit les nouvelles fonctionnalités, corrections et modifications apportées aux scripts.
## Focus RebuildBdd
## Remarque
Le dossier [RebuildBdd](RebuildBdd) regroupe la nouvelle chaine de reconstruction de base. Il contient notamment :
Ce dépôt est dédié au **versionnement des scripts uniquement**.
Les configurations sensibles (mots de passe, clés, variables denvironnement) ne doivent pas être stockées directement dans le dépôt et doivent être placées dans des fichiers `.env` locaux.
* [run-rebuild-bdd.sh](/home/matte/Malio-ops/RebuildBdd/run-rebuild-bdd.sh) : point d'entree principal
* [rebuild-bdd-core.sh](/home/matte/Malio-ops/RebuildBdd/rebuild-bdd-core.sh) : logique de restauration
* [bootstrap-target-host.sh](/home/matte/Malio-ops/RebuildBdd/bootstrap-target-host.sh) : preparation de la machine cible
* [create-target-config.sh](/home/matte/Malio-ops/RebuildBdd/create-target-config.sh) : generation de configuration cible
* [Checkup](RebuildBdd/Checkup) : scripts de verification prealable
* [Config](RebuildBdd/Config) : fichiers d'exemple de configuration globale et par cible
Ce projet contient des scripts pour la gestion et la maintenance des serveurs de MALIO.
La documentation detaillee est disponible dans [RebuildBdd/README.md](/home/matte/Malio-ops/RebuildBdd/README.md).
## Prerequis
## Scripts disponibles
* [CheckStorage] : Script de vérification de l'espace de stockage
Les scripts du depot reposent principalement sur :
* `bash`
* `jq`
* `curl`
* `ssh`
* `scp`
Selon les scripts, d'autres outils peuvent etre necessaires, notamment PostgreSQL (`psql`, `pg_dump`, `pg_restore`) ou `tar`.
## Configuration
Un modele commun est disponible dans [global.env.exemple](global.env.exemple). Il sert de base pour les variables partagees entre plusieurs scripts.
Chaque dossier peut aussi contenir son propre fichier `.env.exemple` ou ses propres fichiers de configuration. Les secrets et webhooks ne doivent jamais etre versionnes dans git et doivent rester dans des fichiers locaux ignores.
## Documentation
Les evolutions importantes sont suivies dans [CHANGELOG.md](CHANGELOG.md).

View File

@@ -281,7 +281,12 @@ REMOTE_DIR="${IA_BASE_DIR}"
log "Creating remote directories"
if ! ssh "${SSH_OPTS[@]}" "$IA_SSH" "mkdir -p '${REMOTE_DIR}/ferme' '${REMOTE_DIR}/sirh' '${REMOTE_DIR}/inventory' '${REMOTE_DIR}/user'"; then
MKDIR_CMD="mkdir -p '${REMOTE_DIR}/user'"
for DB in "${DBS_ARRAY[@]}"; do
MKDIR_CMD+=" '${REMOTE_DIR}/${DB}'"
done
if ! ssh "${SSH_OPTS[@]}" "$IA_SSH" "$MKDIR_CMD"; then
log "ERROR: remote mkdir failed"
discord_msg_users_error "" "" "Remote mkdir failed"
exit 1

View File

@@ -1,4 +1,5 @@
#!/usr/bin/env bash
# -e omis volontairement : check_site retourne 1 pour les sites down
set -uo pipefail
###############################################################################
@@ -200,6 +201,8 @@ check_site() {
#######################################
main() {
trap '[[ -n "$STDERR_TMP" ]] && rm -f "$STDERR_TMP"' EXIT
local failures=0
for site in "${SITES[@]}"; do

View File

@@ -36,7 +36,7 @@ APP_URLS="ferme.malio-dev.fr inventory.malio-dev.fr sirh.malio-dev.fr"
###############################################################################
# Webhook Discord pour envoyer le résumé des vérifications
DISCORD_WEBHOOK_URL=https:
DISCORD_WEBHOOK_URL=
# Mention Discord en cas de problème
DISCORD_PING=@here

View File

@@ -135,7 +135,7 @@ send_discord_message() {
return 0
fi
payload="$(python3 -c 'import json,sys; print(json.dumps({"content": sys.argv[1]}))' "$message")" || {
payload="$(jq -n --arg content "$message" '{content: $content}')" || {
log "Impossible de construire le payload JSON Discord."
return 0
}
@@ -376,6 +376,10 @@ if [[ -n "$LOCAL_ROLES_FILE" ]]; then
if [[ -s "$ROLES_CREATE_LIST" ]]; then
while IFS= read -r role_name; do
[[ -z "$role_name" ]] && continue
if [[ ! "$role_name" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
log "WARNING: nom de rôle suspect ignoré : ${role_name}"
continue
fi
ROLE_EXISTS="$(
psql -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" -d postgres -tAc \

View File

@@ -24,7 +24,7 @@ ENV_NAME=RECETTE
#############################################
# Webhook Discord utilisé pour envoyer les notifications
WEBHOOK_URL=
DISCORD_WEBHOOK_URL=
#############################################
@@ -129,4 +129,4 @@ IA_SSH_HOST=
IA_BASE_DIR=/home/.../backups/bdd-recette
# Dossier contenant les rôles PostgreSQL exportés
REMOTE_ROLES_NAME=user
REMOTE_ROLES_NAME=user