26 Commits

Author SHA1 Message Date
081e9de1a3 Merge pull request 'feat/378-script-backup-vaultwarden' (#3) from feat/378-script-backup-vaultwarden into main
Reviewed-on: MALIO-DEV/Scripts-Serveur#3
2026-03-09 08:04:22 +00:00
4464ab2642 Actualiser backup_vaultwarden/README.md 2026-03-06 13:50:14 +00:00
ae2fa3509a Actualiser backup_vaultwarden/README.md 2026-03-06 13:45:06 +00:00
3de25dae43 correction du script et readme 2026-03-06 14:16:33 +01:00
24c935c280 gitignore et .env 2026-03-06 09:09:08 +01:00
3a564cf966 modif .env 2026-03-06 09:05:38 +01:00
8b319de03a readme modif 2026-03-06 08:55:48 +01:00
4c8ccdc2d4 Merge pull request 'fix : script check storage' (#2) from feat/372-script-check-stockage into main
Reviewed-on: MALIO-DEV/Scripts-Serveur#2
2026-03-06 07:55:34 +00:00
73189f574b readme 2026-03-06 08:48:58 +01:00
ec8aeb7048 cron + modif script + webhook 2026-03-05 15:31:00 +01:00
Lethary
e28905657a feat : changelog 2026-03-05 13:54:15 +01:00
Lethary
887a3c3b05 feat : changelog 2026-03-05 13:52:11 +01:00
Lethary
c70e535c10 Merge remote-tracking branch 'origin/feat/372-script-check-stockage' into feat/372-script-check-stockage 2026-03-05 13:46:25 +01:00
Lethary
2c7de73734 feat : changelog 2026-03-05 13:46:11 +01:00
2465046d79 script backup vaultwarden 2026-03-05 12:29:18 +00:00
62b4f37c5f Actualiser CheckStorage/check_storage.sh 2026-03-05 10:52:52 +00:00
b5d06e6a15 Actualiser .env.exemple 2026-03-05 10:52:29 +00:00
Lethary
afbd44d467 Merge remote-tracking branch 'origin/feat/372-script-check-stockage' into feat/372-script-check-stockage 2026-03-05 11:46:29 +01:00
Lethary
38f1aa5302 fix : comment 2026-03-05 11:45:34 +01:00
73fa0e4451 Supprimer .env 2026-03-05 10:44:32 +00:00
Lethary
624658e3af fix : variable environement 2026-03-05 11:44:03 +01:00
Lethary
0664831fe3 Stop tracking .env 2026-03-05 11:43:20 +01:00
Lethary
9271b99ae5 fix : mis dans un dossier 2026-03-05 11:35:28 +01:00
7e6bd065f3 Actualiser check_storage.sh 2026-03-05 10:26:13 +00:00
fccae28313 Merge pull request 'feat : ajout du script pour check le stockage et envoyer un message sur discord' (#1) from feat/372-script-check-stockage into main
Reviewed-on: MALIO-DEV/Scripts-Serveur#1
2026-03-05 10:24:23 +00:00
Lethary
c41df98f50 feat : ajout du script pour check le stockage et envoyer un message sur discord 2026-03-05 11:15:20 +01:00
9 changed files with 341 additions and 0 deletions

1
.env.exemple Normal file
View File

@@ -0,0 +1 @@
WEBHOOK_URL=

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
# Secrets / environment
.env
.env.*
!.env.example
!.env.exemple
# IDE / editor
.idea/
.vscode/

43
CheckStorage/README.md Normal file
View File

@@ -0,0 +1,43 @@
# Scripts de vérification de l'espace de stockage
Ce projet contient des scripts pour vérifier l'espace de stockage
## Préambule
Ce script est conçu pour vérifier l'espace de stockage disponible sur un serveur et envoyer une alerte
La vérification de l'espace de stockage ce fait sur la partition racine.
La limite d'alerte est fixée à 70% d'utilisation, mais vous pouvez ajuster cette valeur dans le script selon vos besoins.
## Installation du script
1. Clonez le dépôt GitHub :
```bash
git clone https://gitea.malio.fr/MALIO-DEV/Scripts-Serveur.git
```
2. Accédez au répertoire du projet :
3. ```bash
cd Scripts-Serveur/CheckStorage
```
## Utilisation du script
1. Donnez les permissions d'exécution au script :
```bash
chmod +x check_storage.sh
```
2. Exécutez le script pour vérifier l'espace de stockage :
```bash
./check_storage.sh
```
## Initialisé un cron pour exécuter le script régulièrement
1. Ouvrez le crontab pour l'édition :
```bash
crontab -e
```
2. Ajoutez la ligne suivante pour exécuter le script tous les jours à 7h50 du matin :
```bash
50 7 * * * /chemin/vers/le/script/check_storage.sh
```
## 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.

View File

@@ -0,0 +1,22 @@
#!/bin/bash
limit=70
# Mettre le lien de votre webhook Discord dans un .env
WEBHOOK_URL=$(grep -E '^WEBHOOK_URL=' .env | cut -d '=' -f2-)
# Récupérer l'utilisation du disque en pourcentage
usage=$(df -h / | awk 'NR==2 {gsub(/%/,"",$5); print $5}')
# Calculer l'espace libre en pourcentage
free=$((100 - usage))
# Si l'utilisation dépasse la limite, envoyer une alerte sur Discord
if [ "$usage" -ge "$limit" ]; then
msgLimit="@here\n**CHECK STOCKAGE :red_circle:**\nLimite autorisé : ${limit}% \nUtilisation actuelle: ${usage}%\nEspace restant: ${free}%\nHeure: $(date)"
curl -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json; charset=utf-8" \
-d "{\"content\":\"$msgLimit\"}" \
"$WEBHOOK_URL"
# Log de l'alerte
echo "ALERTE >> ${usage}% d'utilisation, check fait le $(date)"
echo "------------------------------------------------------------"
fi

View File

@@ -1 +1,7 @@
# Scripts Serveur MALIO
Ce projet contient des scripts pour la gestion et la maintenance des serveurs de MALIO.
## Scripts disponibles
* [CheckStorage] : Script de vérification de l'espace de stockage

View File

@@ -0,0 +1,6 @@
DATA_DIR=
LOCAL_BACKUP=
REMOTE_USER=
REMOTE_HOST=
REMOTE_DIR=
SSH_KEY=

3
backup_vaultwarden/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.env
backup.log

View File

@@ -0,0 +1,116 @@
# FONCTIONNEMENT DU SCRIPT VAULTWARDEN
Le script de backup de vaultwarden permet une sauvegard périodique des mots de passe et utilisateurs de celui-ci.
## INITIALISATION DES VARIABLES DE MANIÈRE SÉCURISÉ
1. Les informations sensibles ne sont pas stockées directement dans le script. Elles sont placées dans un fichier .env
```bash
WEBHOOK_URL=...
REMOTE_USER=...
REMOTE_HOST=...
SSH_KEY=...
DATA_DIR=...
```
2. on recupere les varibales dans le script
```bash
REMOTE_USER=$(grep -E '^REMOTE_USER=' .env | cut -d '=' -f2-)
```
Explication:
- grep recherche la variable dans le fichier .env
- cut récupère uniquement la valeur après =
- REMOTE_USER="user" Le script récupère >> "user"
Cela permet:
- daméliorer la sécurité
- déviter de modifier le script si un paramètre change
## RÉCUPÉRATION DES DONNÉES
1. Le dossier data de Vaultwarden est dupliqué puis compressé afin de créer une archive :
```bash
tar -czf "$LOCAL_BACKUP" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"
```
2. Transfer vers le serveur de backup
```bash
scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
```
La sauvegarde est envoyée vers une machine dédiée grâce à SCP. Pour éviter de saisir un mot de passe à chaque fois, une clé SSH est utilisée.
Cette clé SSH est générée sur la machine de backup et autorisée sur la machine Vaultwarden.
## NOTIFICATION DISCORD
Le script envoie une notification sur un salon Discord pour informer de létat de la sauvegarde. Cela se fait grâce à un webhook Discord.
1. on défini le message
```bash
local msg="**@here Backup Vaultwarden $color**\n"
msg+="Backup: ${BACKUP_NAME}\n"
msg+="Data transfer: $dumps_display\n"
[[ -n "$details" ]] && msg+="Details: $details"
```
2. on envoie le message sur discord avec le message et le webhook
```bash
curl -fsS -H "Content-Type: application/json" \
-d "{\"content\":\"$msg\"}" \
"$DISCORD_WEBHOOK_URL"
```
Le message indique:
- si la sauvegarde a réussi 🟢
- si elle a échoué 🔴
- le nom du backup
- les détails de lerreur si nécessaire
## PLANIFICATION AVEC CRON
Le script est exécuté automatiquement chaque jour grâce à cron.
1. Ouvrez le crontab pour l'édition :
```bash
crontab -e
```
2. Ajoutez la ligne suivante pour exécuter le script tous les jours à 19h :
```bash
0 19 * * * /chemin/vers/le/script/check_storage.sh
```
Signification:
- 0 minute 0
- 19 19h
- * tous les jours du mois
- * tous les mois
- * tous les jours de la semaine
Tous les jours à 19h, le script est exécuté et les logs sont enregistrés dans backup.log ce qui permet danalyser les erreurs si un problème survient.
## NETTOYAGE
Une fois la sauvegarde envoyée sur la machine distante, le fichier temporaire est supprimé :
```bash
rm -f "$LOCAL_BACKUP"
```
Cela permet de garder le serveur propre et éviter de remplir le disque.
## RÉSUMÉ
Le script automatise complètement les sauvegardes Vaultwarden :
- sauvegarde du dossier data
- compression et datation
- transfert sécurisé via SSH
- notification Discord
- exécution automatique avec cron
- sécurisation des paramètres via .env
Cela permet davoir une sauvegarde quotidienne fiable et surveillée.

View File

@@ -0,0 +1,135 @@
#!/usr/bin/env bash
set -euo pipefail
#######################################
# Chemins fixes du script
#######################################
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="/home/matt/vaultwarden/scripts/Scripts-Serveur/backup_vaultwarden/.env"
LOG_FILE="/var/log/vaultwarden_backup.log"
mkdir -p "$(dirname "$LOG_FILE")"
touch "$LOG_FILE"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
#######################################
# Vérification fichier .env
#######################################
[[ -f "$ENV_FILE" ]] || {
echo "ERROR: Fichier .env introuvable : $ENV_FILE" >&2
exit 1
}
#######################################
# Chargement du .env
#######################################
set -a
source "$ENV_FILE"
set +a
#######################################
# Variables obligatoires
#######################################
: "${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}"
: "${REMOTE_HOST:?Variable REMOTE_HOST manquante dans .env}"
: "${REMOTE_DIR:?Variable REMOTE_DIR manquante dans .env}"
: "${SSH_KEY:?Variable SSH_KEY manquante dans .env}"
#######################################
# Variables backup
#######################################
DATE="$(date +'%Y-%m-%d_%H-%M-%S')"
BACKUP_NAME="vaultwarden-backup-${DATE}.tar.gz"
LOCAL_BACKUP_DIR="$LOCAL_BACKUP"
LOCAL_BACKUP_FILE="${LOCAL_BACKUP_DIR}/${BACKUP_NAME}"
SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o BatchMode=yes -o ConnectTimeout=10)
mkdir -p "$LOCAL_BACKUP_DIR"
#######################################
# Notification Discord
#######################################
discord_ping() {
local success="$1"
local details="${2:-}"
[[ -z "$WEBHOOK_URL" ]] && return 0
local icon status_line
if [[ "$success" == "true" ]]; then
icon="🟢"
status_line="✅"
else
icon="🔴"
status_line="❌"
fi
local msg
msg="**@here ${icon} Backup Vaultwarden**\n"
msg+="Backup: ${BACKUP_NAME}\n"
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
}
#######################################
# Fonction erreur
#######################################
fail() {
local detail="$1"
log "ERROR: $detail"
discord_ping "false" "$detail"
exit 1
}
#######################################
# Vérifications préalables
#######################################
[[ -d "$DATA_DIR" ]] || fail "Le dossier source n'existe pas : $DATA_DIR"
[[ -f "$SSH_KEY" ]] || fail "La clé SSH est introuvable : $SSH_KEY"
log "Début du backup Vaultwarden"
log "Source : $DATA_DIR"
log "Archive locale : $LOCAL_BACKUP_FILE"
log "Destination distante : ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
#######################################
# Création du backup
#######################################
tar -czf "$LOCAL_BACKUP_FILE" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" \
|| fail "Erreur lors de la compression du dossier $DATA_DIR"
#######################################
# Création dossier distant
#######################################
ssh "${SSH_OPTS[@]}" "$REMOTE_USER@$REMOTE_HOST" "mkdir -p '$REMOTE_DIR'" \
|| fail "Impossible de créer le dossier distant $REMOTE_DIR"
#######################################
# Envoi du backup
#######################################
scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" \
|| fail "Erreur lors de l'envoi du backup vers $REMOTE_HOST"
#######################################
# Nettoyage local
#######################################
rm -f "$LOCAL_BACKUP_FILE" || fail "Impossible de supprimer le backup local $LOCAL_BACKUP_FILE"
#######################################
# Fin
#######################################
log "Backup $BACKUP_NAME terminé et envoyé sur $REMOTE_HOST:$REMOTE_DIR"
discord_ping "true" "Backup envoyé avec succès vers $REMOTE_HOST"
echo "Backup $BACKUP_NAME terminé et envoyé sur $REMOTE_HOST:$REMOTE_DIR"