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
-
... ... @@ -21,13 +21,100 @@ 21 21 Les fichiers bruts d'une base en fonctionnement ne sont pas fiables pour une restauration. Ce sont les dumps SQL qui font foi. 22 22 {{/info}} 23 23 24 +== Mise en place du dépôt == 25 + 26 +=== Sur le Raspberry Pi (dépôt) === 27 + 28 +Utilisateur dédié, sans shell : 29 + 30 +{{code language="bash"}} 31 +sudo useradd -m -d /srv/plakar -s /usr/sbin/nologin plakar 32 +sudo mkdir -p <CHEMIN_DEPOT> 33 +sudo chown plakar:plakar <CHEMIN_DEPOT> 34 +sudo install -d -m 700 -o plakar -g plakar /srv/plakar/.ssh 35 +{{/code}} 36 + 37 +Limitation au SFTP, dans ##/etc/ssh/sshd_config.d/plakar.conf## : 38 + 39 +{{code}} 40 +Match User plakar 41 + ForceCommand internal-sftp 42 + AllowTcpForwarding no 43 + X11Forwarding no 44 +{{/code}} 45 + 46 +{{code language="bash"}} 47 +sudo systemctl reload ssh 48 +{{/code}} 49 + 50 +Même en cas de vol de la clé, elle ne donne ni shell ni tunnel : seulement un accès SFTP. 51 + 52 +=== Sur le serveur principal (source) === 53 + 54 +Clé SSH dédiée, sans phrase de passe puisqu'elle sert à la tâche cron : 55 + 56 +{{code language="bash"}} 57 +sudo ssh-keygen -t ed25519 -f /root/.ssh/plakar_matrix -N "" 58 +{{/code}} 59 + 60 +Contenu de ##/root/.ssh/plakar_matrix.pub## à copier dans ##/srv/plakar/.ssh/authorized_keys## sur le Pi (propriétaire ##plakar##, droits ##600##). 61 + 62 +##/root/.ssh/config## : 63 + 64 +{{code}} 65 +Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com 66 + 67 +Host <HOTE_DEPOT> 68 + User plakar 69 + IdentityFile /root/.ssh/plakar_matrix 70 +{{/code}} 71 + 72 +La ligne ##Ciphers## limite, pour toutes les connexions SSH de root, les algorithmes de chiffrement à des variantes modernes. 73 + 74 +Première connexion, pour valider l'empreinte du Pi (sinon la tâche cron échouera) : 75 + 76 +{{code language="bash"}} 77 +sudo sftp <HOTE_DEPOT> 78 +{{/code}} 79 + 80 +Phrase secrète du dépôt et création : 81 + 82 +{{code language="bash"}} 83 +sudo sh -c 'umask 077; openssl rand -base64 12 > /root/.plakar-pass' 84 +sudo plakar -keyfile /root/.plakar-pass at "sftp://plakar@<HOTE_DEPOT>:<CHEMIN_DEPOT>" create 85 +{{/code}} 86 + 87 +{{warning}} 88 +Le dépôt est chiffré avec cette phrase secrète. Sans elle, les sauvegardes sont illisibles, même pour leur propriétaire : en conserver une copie dans le gestionnaire de mots de passe, jamais uniquement sur le serveur. 89 +{{/warning}} 90 + 91 +== Restaurer si le serveur principal est perdu == 92 + 93 +Le dépôt peut s'ouvrir directement sur le Raspberry Pi, où Plakar est aussi installé, avec la phrase secrète récupérée dans le gestionnaire de mots de passe : 94 + 95 +{{code language="bash"}} 96 +sudo plakar at <CHEMIN_DEPOT> ls 97 +sudo plakar at <CHEMIN_DEPOT> restore -to /tmp/restore <ID_INSTANTANE> 98 +{{/code}} 99 + 100 +Plakar demande alors la phrase secrète de façon interactive. 101 + 24 24 == Script == 25 25 26 26 {{code language="bash"}} 27 27 #!/bin/bash 28 28 set -euo pipefail 29 -umask 077 # Ajout : dumps lisibles par root seul107 +umask 077 30 30 109 +# Alertes Telegram 110 +. /root/.backup-telegram 111 +notifier() { 112 + curl -fsS -m 10 "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \ 113 + -d chat_id="$TG_CHAT" --data-urlencode text="$1" >/dev/null || true 114 +} 115 +attention() { echo "ATTENTION: $1" >&2; notifier "⚠️ Sauvegarde : $1"; } 116 +trap 'notifier "❌ Sauvegarde interrompue à la ligne $LINENO"' ERR 117 + 31 31 REPO="sftp://<UTILISATEUR>@<HOTE_DEPOT>:<CHEMIN_DEPOT>" 32 32 KEYFILE="<FICHIER_PHRASE_SECRETE>" 33 33 DUMPS="<APPDATA>/dumps" ... ... @@ -39,19 +39,19 @@ 39 39 > "$DUMPS/$c.sql" 2>/dev/null \ 40 40 || docker exec "$c" sh -c 'exec mariadb-dump -uroot -p"${MYSQL_ROOT_PASSWORD:-$MARIADB_ROOT_PASSWORD}" --all-databases' \ 41 41 > "$DUMPS/$c.sql" 2>/dev/null \ 42 - || e cho "ATTENTION:dump $c échoué">&2129 + || attention "dump $c échoué" 43 43 done 44 44 45 45 # Nextcloud : dump via l'utilisateur applicatif 46 46 docker exec "$(docker ps -q -f name=nextcloud_db)" sh -c 'exec mariadb-dump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \ 47 47 > "$DUMPS/nextcloud.sql" 2>/dev/null \ 48 - || e cho "ATTENTION:dump nextcloud échoué">&2135 + || attention "dump nextcloud échoué" 49 49 50 50 # Dumps PostgreSQL 51 -for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do # Ajout : dawarich_db138 +for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do 52 52 docker exec "$c" sh -c 'exec pg_dumpall -U "$POSTGRES_USER"' \ 53 53 > "$DUMPS/$c.sql" 2>/dev/null \ 54 - || e cho "ATTENTION:dump $c échoué">&2141 + || attention "dump $c échoué" 55 55 done 56 56 57 57 # Sauvegarde, sans core dumps, binlogs ni fichiers bruts des bases ... ... @@ -62,12 +62,14 @@ 62 62 -ignore "**/xwiki/mariadb/**" \ 63 63 -ignore "**/store.bak.*/**" \ 64 64 <APPDATA> \ 65 - <BIBLIOTHEQUE_IMMICH>\ 152 + <BIBLIOTHEQUE_IMMICH> \ 66 66 <CONTENU_JOPLIN> 67 67 68 68 # Rétention : 30 jours glissants 69 69 plakar -keyfile "$KEYFILE" at "$REPO" rm -before 30d -apply 157 +notifier "✅ Sauvegarde terminée" 70 70 {{/code}} 159 +{{/code}} 71 71 72 72 Tâche cron, ##/etc/cron.d/backup-plakar## : 73 73