diff --git a/.env b/.env index d8476e2..f9d079e 100644 --- a/.env +++ b/.env @@ -5,7 +5,7 @@ DB_PASS=TX.)-U1!zq5Axdk4 DB_NAME=Sondes DB_USER2=journal_connexions -DB_PASS2=%t!RRa6sj4KY9dY%zTT +DB_PASS2=uu%O6sHgqY%gl&iSMML DB_NAME2=Acces AUTH_USERS=[{"user":"Michel","pass":"210462"}] @@ -26,7 +26,6 @@ SYNO_CHAT_WEBHOOK_GYRO_MEUDON=https://mj91.fr/webapi/entry.cgi?api=SYNO.Chat.Ext SYNO_CHAT_WEBHOOK_CONNEXIONS=https://mj91.fr/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=R585242twVz04qmzukxbtSTMe7p0GgdroKtO8opBglDx3VLtaLwJhYb93btH6Hya SYNO_CHAT_WEBHOOK_CONNEXIONS_SIMPLE=https://mj91.fr/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=TahhvDjYKqvA7KbGgVOK7uZI8ri0JS1HSPvCGGXteyZaHGKpKJGvaJS4Favf9Xyj - SYNO_CHAT_BOTNAME_MONITOR="Injection données dans tables" SYNO_CHAT_BOTNAME_GYRO="Gestion Gyro" SYNO_CHAT_BOTNAME_CONNEXIONS="Journal Connexions" diff --git a/app/Monitor_connexions.py b/app/Monitor_connexions.py index dfdf786..a4581e2 100644 --- a/app/Monitor_connexions.py +++ b/app/Monitor_connexions.py @@ -10,7 +10,7 @@ import requests from dotenv import load_dotenv -BASE_DIR = Path("/home/debian/Gestion_sondes") +BASE_DIR = Path(__file__).resolve().parent.parent load_dotenv(BASE_DIR / ".env") logging.basicConfig( diff --git a/scripts/backup_mysql.sh b/scripts/backup_VM.sh similarity index 88% rename from scripts/backup_mysql.sh rename to scripts/backup_VM.sh index c162c85..6fc68a6 100644 --- a/scripts/backup_mysql.sh +++ b/scripts/backup_VM.sh @@ -2,8 +2,8 @@ set -Eeuo pipefail DATE="$(date +'%Y-%m-%d_%H-%M')" -BACKUP_DIR="/home/debian/backup" -LOG_DIR="/home/debian/Gestion_sondes/Logs" +BACKUP_DIR="/home/domo91/backup" +LOG_DIR="/home/domo91/Gestion_sondes/Logs" mkdir -p "$LOG_DIR" "$BACKUP_DIR" LOG_FILE="$LOG_DIR/backup_$DATE.log" @@ -19,9 +19,9 @@ BACKUP_FILE="$BACKUP_DIR/mysql_backup_$DATE.sql" NAS_HOST="192.168.1.250" # à adapter avec l'IP locale réelle du NAS NAS_PORT="4422" # mettre 4422 seulement si DSM écoute réellement sur 4422 en local NAS_USER="Michel" -NAS_DIR="/volume1/VPS/Gravelines" +NAS_DIR="/volume1/backups/VM_Debian13" -SSH_KEY="/home/debian/.ssh/id_ed25519" +SSH_KEY="/home/domo91/.ssh/id_ed25519" SSH_OPTS="-i $SSH_KEY -p $NAS_PORT \ -o BatchMode=yes -o PreferredAuthentications=publickey \ -o PasswordAuthentication=no -o PubkeyAuthentication=yes \ @@ -29,7 +29,7 @@ SSH_OPTS="-i $SSH_KEY -p $NAS_PORT \ -o ServerAliveInterval=30 -o ServerAliveCountMax=2" # Credentials MySQL -MYSQL_DEFAULTS="/home/debian/.my.cnf" +MYSQL_DEFAULTS="/home/domo91/.my.cnf" # PATH minimal pour cron export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin @@ -69,14 +69,14 @@ LOCAL_SIZE=$(stat -c%s "$BACKUP_FILE" 2>/dev/null || wc -c < "$BACKUP_FILE") echo "✅ Dump OK : $BACKUP_FILE ($LOCAL_SIZE octets)" # 3) Transfert NAS -scp -O -P 4422 -i /home/debian/.ssh/id_ed25519 \ +scp -O -P 4422 -i /home/domo91/.ssh/id_ed25519 \ -o BatchMode=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no \ -o StrictHostKeyChecking=accept-new \ "$BACKUP_FILE" "$NAS_USER@$NAS_HOST:$NAS_DIR/" # 4) Vérification taille distante = locale BASENAME="$(basename "$BACKUP_FILE")" -REMOTE_SIZE=$(ssh -p 4422 -i /home/debian/.ssh/id_ed25519 \ +REMOTE_SIZE=$(ssh -p 4422 -i /home/domo91/.ssh/id_ed25519 \ -o BatchMode=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no \ -o StrictHostKeyChecking=accept-new \ "$NAS_USER@$NAS_HOST" "wc -c < '$NAS_DIR/$BASENAME'" || echo 0) @@ -86,4 +86,4 @@ if [[ "$REMOTE_SIZE" != "$LOCAL_SIZE" ]]; then exit 22 fi -echo "✅ Transfert OK → $NAS_HOST:$NAS_DIR/$BASENAME" \ No newline at end of file +echo "✅ Transfert OK → $NAS_HOST:$NAS_DIR/$BASENAME" diff --git a/scripts/backup_Vpsl.sh b/scripts/backup_Vpsl.sh new file mode 100644 index 0000000..1b53f17 --- /dev/null +++ b/scripts/backup_Vpsl.sh @@ -0,0 +1,97 @@ +#!/bin/bash +set -Eeuo pipefail + +DATE="$(date +'%Y-%m-%d_%H-%M')" +BACKUP_DIR="/home/debian/backup" +LOG_DIR="/home/debian/Gestion_sondes/Logs" +SSH_KEY="/home/debian/.ssh/id_ed25519" +mkdir -p "$LOG_DIR" "$BACKUP_DIR" + +LOG_FILE="$LOG_DIR/backup_$DATE.log" +exec > >(tee -a "$LOG_FILE") 2>&1 + +# Verrou anti-doublon +exec 9>/tmp/backup_mysql.lock +flock -n 9 || { echo "🔒 Un autre backup est en cours. Abandon."; exit 1; } + +BACKUP_FILE="$BACKUP_DIR/mysql_backup_$DATE.sql" + +# Cible NAS via WireGuard / LAN +NAS_HOST="192.168.1.250" +NAS_PORT="4422" +NAS_USER="Michel" +NAS_DIR="/volume1/backups/VPS_Ovh" + +SSH_KEY="/home/debian/.ssh/id_ed25519" +SSH_OPTS="-i $SSH_KEY -p $NAS_PORT \ + -o BatchMode=yes -o PreferredAuthentications=publickey \ + -o PasswordAuthentication=no -o PubkeyAuthentication=yes \ + -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 \ + -o ServerAliveInterval=30 -o ServerAliveCountMax=2" + +# Credentials MySQL +MYSQL_DEFAULTS="/home/debian/.my.cnf" + +# PATH minimal pour cron +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +echo "🔷 Démarrage $(date '+%F %T') sur $(hostname -s)" +echo "🔷 Dossier local : $BACKUP_DIR" +echo "🔷 Dossier NAS : $NAS_DIR (hôte $NAS_HOST)" + +# 1) Pré-check SSH & droits écriture NAS +echo "🔷 Test SSH NAS…" +if ! ssh $SSH_OPTS "$NAS_USER@$NAS_HOST" "mkdir -p '$NAS_DIR' && test -w '$NAS_DIR' && echo __SSH_OK__"; then + echo "❌ Impossible d'écrire sur $NAS_HOST:$NAS_DIR (clé SSH ? user ? droits ? SSH NAS activé ?)" + exit 20 +fi + +# 2) Dump MySQL +echo "🔷 Dump MySQL…" +if [[ -f "$MYSQL_DEFAULTS" ]]; then + DUMP="mysqldump --defaults-file=$MYSQL_DEFAULTS --all-databases --single-transaction --quick --lock-tables=false --routines --events --triggers" +else + DUMP="mysqldump --all-databases --single-transaction --quick --lock-tables=false --routines --events --triggers" +fi + +# Baisse de priorité +IONICE="$(command -v ionice >/dev/null 2>&1 && echo 'ionice -c2 -n7' || true)" +NICE="$(command -v nice >/dev/null 2>&1 && echo 'nice -n 10' || true)" + +bash -c "$IONICE $NICE $DUMP > '$BACKUP_FILE'" + +# Vérification locale +if [[ ! -s "$BACKUP_FILE" ]]; then + echo "❌ Fichier de backup vide : $BACKUP_FILE" + exit 21 +fi + +LOCAL_SIZE=$(stat -c%s "$BACKUP_FILE" 2>/dev/null || wc -c < "$BACKUP_FILE") +echo "✅ Dump OK : $BACKUP_FILE ($LOCAL_SIZE octets)" + +# 3) Transfert NAS +echo "🔷 Transfert NAS…" +timeout 30m scp -O -i "$SSH_KEY" -P "$NAS_PORT" -C \ + -o BatchMode=yes \ + -o PreferredAuthentications=publickey \ + -o PasswordAuthentication=no \ + -o PubkeyAuthentication=yes \ + -o StrictHostKeyChecking=accept-new \ + -o ConnectTimeout=10 \ + "$BACKUP_FILE" "$NAS_USER@$NAS_HOST:$NAS_DIR/" +echo "✅ Copie scp terminée" + +# 4) Vérification taille distante = locale +BASENAME="$(basename "$BACKUP_FILE")" +echo "🔷 Vérification taille distante…" +REMOTE_SIZE=$(ssh $SSH_OPTS "$NAS_USER@$NAS_HOST" "stat -c%s '$NAS_DIR/$BASENAME' 2>/dev/null || wc -c < '$NAS_DIR/$BASENAME'" || echo 0) +REMOTE_SIZE="$(echo "$REMOTE_SIZE" | tr -dc '0-9')" +echo "🔷 Taille distante : $REMOTE_SIZE octets" + + +if [[ "$REMOTE_SIZE" != "$LOCAL_SIZE" ]]; then + echo "❌ Taille différente après transfert (local=$LOCAL_SIZE, distant=$REMOTE_SIZE)" + exit 22 +fi + +echo "✅ Transfert OK → $NAS_HOST:$NAS_DIR/$BASENAME" \ No newline at end of file