Modifications pour le document Sauvegarde
Modifié par john le 2026/10/03 20:01
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
Détails
- Propriétés de la Page
-
- Contenu
-
... ... @@ -101,11 +101,19 @@ 101 101 102 102 == Script == 103 103 104 -{{code language="bash"}} 105 -#!/bin/bash 104 +{{code language="bash"}}#!/bin/bash 106 106 set -euo pipefail 107 -umask 077 # Ajout : dumps lisibles par root seul106 +umask 077 108 108 108 +# Alertes Telegram 109 +. /root/.backup-telegram 110 +notifier() { 111 + curl -fsS -m 10 "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \ 112 + -d chat_id="$TG_CHAT" --data-urlencode text="$1" >/dev/null || true 113 +} 114 +attention() { echo "ATTENTION: $1" >&2; notifier "⚠️ Sauvegarde : $1"; } 115 +trap 'notifier "❌ Sauvegarde interrompue à la ligne $LINENO"' ERR 116 + 109 109 REPO="sftp://<UTILISATEUR>@<HOTE_DEPOT>:<CHEMIN_DEPOT>" 110 110 KEYFILE="<FICHIER_PHRASE_SECRETE>" 111 111 DUMPS="<APPDATA>/dumps" ... ... @@ -117,19 +117,19 @@ 117 117 > "$DUMPS/$c.sql" 2>/dev/null \ 118 118 || docker exec "$c" sh -c 'exec mariadb-dump -uroot -p"${MYSQL_ROOT_PASSWORD:-$MARIADB_ROOT_PASSWORD}" --all-databases' \ 119 119 > "$DUMPS/$c.sql" 2>/dev/null \ 120 - || e cho "ATTENTION:dump $c échoué">&2128 + || attention "dump $c échoué" 121 121 done 122 122 123 123 # Nextcloud : dump via l'utilisateur applicatif 124 124 docker exec "$(docker ps -q -f name=nextcloud_db)" sh -c 'exec mariadb-dump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \ 125 125 > "$DUMPS/nextcloud.sql" 2>/dev/null \ 126 - || e cho "ATTENTION:dump nextcloud échoué">&2134 + || attention "dump nextcloud échoué" 127 127 128 128 # Dumps PostgreSQL 129 -for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do # Ajout : dawarich_db137 +for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do 130 130 docker exec "$c" sh -c 'exec pg_dumpall -U "$POSTGRES_USER"' \ 131 131 > "$DUMPS/$c.sql" 2>/dev/null \ 132 - || e cho "ATTENTION:dump $c échoué">&2140 + || attention "dump $c échoué" 133 133 done 134 134 135 135 # Sauvegarde, sans core dumps, binlogs ni fichiers bruts des bases ... ... @@ -140,12 +140,13 @@ 140 140 -ignore "**/xwiki/mariadb/**" \ 141 141 -ignore "**/store.bak.*/**" \ 142 142 <APPDATA> \ 143 - <BIBLIOTHEQUE_IMMICH>\ 151 + <BIBLIOTHEQUE_IMMICH> \ 144 144 <CONTENU_JOPLIN> 145 145 146 146 # Rétention : 30 jours glissants 147 147 plakar -keyfile "$KEYFILE" at "$REPO" rm -before 30d -apply 148 -{{/code}} 156 +notifier "✅ Sauvegarde terminée"{{/code}} 157 +~{~{/code}} 149 149 150 150 Tâche cron, ##/etc/cron.d/backup-plakar## : 151 151 ... ... @@ -153,6 +153,28 @@ 153 153 30 3 * * * root /root/backup-plakar.sh >> /var/log/backup-plakar.log 2>&1 154 154 {{/code}} 155 155 165 +== Alertes == 166 + 167 +Le script envoie un message Telegram à chaque exécution : 168 + 169 +|=Message|=Signification 170 +|✅ Sauvegarde terminée|Tout s'est bien passé 171 +|⚠️ Sauvegarde : dump … échoué|Un dump de base a échoué, la sauvegarde a continué sans lui 172 +|❌ Sauvegarde interrompue à la ligne …|Erreur bloquante, la sauvegarde n'a pas eu lieu 173 + 174 +Si aucun message n'arrive un matin, le script n'a pas démarré (serveur éteint, tâche cron cassée). 175 + 176 +Jeton du bot et identifiant du groupe dans ##/root/.backup-telegram##, lisible par root seul : 177 + 178 +{{code language="bash"}} 179 +TG_TOKEN="<JETON_BOT>" 180 +TG_CHAT="<ID_GROUPE>" 181 +{{/code}} 182 + 183 +{{warning}} 184 +Dans le script, chaque ligne continuée doit se terminer par ##\## sans rien après, pas même un espace. Une barre oblique inverse suivie d'un espace ne continue plus la ligne : c'est ce qui a interrompu plusieurs sauvegardes en septembre 2026. Contrôle après toute modification : ##sudo bash -n /root/backup-plakar.sh##, et ##cat -A## pour voir les caractères invisibles en fin de ligne. 185 +{{/warning}} 186 + 156 156 == Ajouter une base == 157 157 158 158 Ajouter le nom du conteneur dans la boucle MariaDB ou PostgreSQL du script, puis exclure ses fichiers bruts avec un ##-ignore## s'ils se trouvent dans ##<APPDATA>##.