fix : correctifs 002 a 006 et de 008 a 019
This commit is contained in:
@@ -2,6 +2,9 @@
|
||||
# VAULTWARDEN BACKUP CONFIGURATION
|
||||
#############################################
|
||||
|
||||
# Webhook Discord pour notifications (optionnel)
|
||||
DISCORD_WEBHOOK_URL=
|
||||
|
||||
# Répertoire contenant les données Vaultwarden
|
||||
DATA_DIR=
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
markdown
|
||||
# README — Mise en place du script de sauvegarde Vaultwarden
|
||||
|
||||
Ce script permet d’automatiser la sauvegarde de Vaultwarden afin de conserver une copie du dossier `data`, de la transférer vers un serveur distant et d’envoyer 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 :
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
#######################################
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
#############################################
|
||||
|
||||
# Webhook Discord pour notifications
|
||||
WEBHOOK_URL=
|
||||
DISCORD_WEBHOOK_URL=
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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}"
|
||||
|
||||
71
README.md
71
README.md
@@ -1,43 +1,56 @@
|
||||
# Malio-Ops MALIO
|
||||
Ce dépôt sert au **versionnement des scripts utilisés dans l’infrastructure du projet Ferme**.
|
||||
# Malio-Ops
|
||||
|
||||
L’objectif 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 l’exploitation technique :
|
||||
|
||||
* scripts de **backup PostgreSQL**
|
||||
* scripts de **monitoring des applications**
|
||||
* scripts **d’automatisation système**
|
||||
* scripts **d’administration 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 d’environnement) 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).
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user