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,100 +21,13 @@ 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 - 102 102 == Script == 103 103 104 104 {{code language="bash"}} 105 105 #!/bin/bash 106 106 set -euo pipefail 107 -umask 077 29 +umask 077 # Ajout : dumps lisibles par root seul 108 108 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 - 118 118 REPO="sftp://<UTILISATEUR>@<HOTE_DEPOT>:<CHEMIN_DEPOT>" 119 119 KEYFILE="<FICHIER_PHRASE_SECRETE>" 120 120 DUMPS="<APPDATA>/dumps" ... ... @@ -126,19 +126,19 @@ 126 126 > "$DUMPS/$c.sql" 2>/dev/null \ 127 127 || docker exec "$c" sh -c 'exec mariadb-dump -uroot -p"${MYSQL_ROOT_PASSWORD:-$MARIADB_ROOT_PASSWORD}" --all-databases' \ 128 128 > "$DUMPS/$c.sql" 2>/dev/null \ 129 - || attention"dump $c échoué"42 + || echo "ATTENTION: dump $c échoué" >&2 130 130 done 131 131 132 132 # Nextcloud : dump via l'utilisateur applicatif 133 133 docker exec "$(docker ps -q -f name=nextcloud_db)" sh -c 'exec mariadb-dump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \ 134 134 > "$DUMPS/nextcloud.sql" 2>/dev/null \ 135 - || attention"dump nextcloud échoué"48 + || echo "ATTENTION: dump nextcloud échoué" >&2 136 136 137 137 # Dumps PostgreSQL 138 -for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do 51 +for c in joplin-db flus-db wallabag-db immich_postgres vikunja-db jellystat-db n8n-postgres dawarich_db; do # Ajout : dawarich_db 139 139 docker exec "$c" sh -c 'exec pg_dumpall -U "$POSTGRES_USER"' \ 140 140 > "$DUMPS/$c.sql" 2>/dev/null \ 141 - || attention"dump $c échoué"54 + || echo "ATTENTION: dump $c échoué" >&2 142 142 done 143 143 144 144 # Sauvegarde, sans core dumps, binlogs ni fichiers bruts des bases ... ... @@ -149,14 +149,12 @@ 149 149 -ignore "**/xwiki/mariadb/**" \ 150 150 -ignore "**/store.bak.*/**" \ 151 151 <APPDATA> \ 152 - <BIBLIOTHEQUE_IMMICH> \65 + <BIBLIOTHEQUE_IMMICH>\ 153 153 <CONTENU_JOPLIN> 154 154 155 155 # Rétention : 30 jours glissants 156 156 plakar -keyfile "$KEYFILE" at "$REPO" rm -before 30d -apply 157 -notifier "✅ Sauvegarde terminée" 158 158 {{/code}} 159 -{{/code}} 160 160 161 161 Tâche cron, ##/etc/cron.d/backup-plakar## : 162 162