0 Votes

Modifications pour le document Sauvegarde

Modifié par john le 2026/10/03 20:01

Depuis la version 5.1
modifié par john
sur 2026/09/19 19:59
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 3.1
modifié par john
sur 2026/09/18 23:25
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

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