Compare commits
26 Commits
fbc3c51a07
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 081e9de1a3 | |||
| 4464ab2642 | |||
| ae2fa3509a | |||
| 3de25dae43 | |||
| 24c935c280 | |||
| 3a564cf966 | |||
| 8b319de03a | |||
| 4c8ccdc2d4 | |||
| 73189f574b | |||
| ec8aeb7048 | |||
|
|
e28905657a | ||
|
|
887a3c3b05 | ||
|
|
c70e535c10 | ||
|
|
2c7de73734 | ||
| 2465046d79 | |||
| 62b4f37c5f | |||
| b5d06e6a15 | |||
|
|
afbd44d467 | ||
|
|
38f1aa5302 | ||
| 73fa0e4451 | |||
|
|
624658e3af | ||
|
|
0664831fe3 | ||
|
|
9271b99ae5 | ||
| 7e6bd065f3 | |||
| fccae28313 | |||
|
|
c41df98f50 |
1
.env.exemple
Normal file
1
.env.exemple
Normal file
@@ -0,0 +1 @@
|
||||
WEBHOOK_URL=
|
||||
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Secrets / environment
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
!.env.exemple
|
||||
|
||||
# IDE / editor
|
||||
.idea/
|
||||
.vscode/
|
||||
43
CheckStorage/README.md
Normal file
43
CheckStorage/README.md
Normal 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.
|
||||
22
CheckStorage/check_storage.sh
Normal file
22
CheckStorage/check_storage.sh
Normal 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
|
||||
@@ -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
|
||||
6
backup_vaultwarden/.env.exemple
Normal file
6
backup_vaultwarden/.env.exemple
Normal file
@@ -0,0 +1,6 @@
|
||||
DATA_DIR=
|
||||
LOCAL_BACKUP=
|
||||
REMOTE_USER=
|
||||
REMOTE_HOST=
|
||||
REMOTE_DIR=
|
||||
SSH_KEY=
|
||||
3
backup_vaultwarden/.gitignore
vendored
Normal file
3
backup_vaultwarden/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.env
|
||||
|
||||
backup.log
|
||||
116
backup_vaultwarden/README.md
Normal file
116
backup_vaultwarden/README.md
Normal 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:
|
||||
|
||||
- d’amé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 l’erreur 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 d’analyser 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 d’avoir une sauvegarde quotidienne fiable et surveillée.
|
||||
135
backup_vaultwarden/backup-vaultwarden.sh
Executable file
135
backup_vaultwarden/backup-vaultwarden.sh
Executable 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"
|
||||
Reference in New Issue
Block a user