Hallo liebe IT Bubble,
ich habe mir aus Interesse einen kleinen Rootserver gemietet und mit Hilfe des Ansible-Playbook einen Lemmyserver aufgespielt. Für die Förderation lasse ich einen Bot laufen, klappt erstaunlicherweise recht ordentlich. Soweit so gut.
Jetzt beschäftige ich mich mit einer vernünftigen Backupstrategie. Bisher lasse ich täglich eine Kopie des Lemmyserver auf einen Storagespace und auf meinen Homeserver erstellen, umgesetzt mit rsync über ssh. Zusätzlich versuche ich regelmäßig einen Snapshot des gesamten Server zu machen.
Meint ihr das geht so in Ordnung? Bin ja nur Hobbyadmin und hätte gerne ne zweite Meinung dazu.
Wenn ihr noch weiter Ratschläge oder Anmerkungen habt, ich bin offen für alles.
Gruß Ranslite
Nachtrag:
Es scheint jetzt alles zu funktionieren, so habe ich es gemacht.
Auf dem Lemmy Server selbst habe ich ein Bash Script für die Sicherung erstellt.
#!/bin/bash
cd /srv/lemmy/zonenranslite.de
docker compose exec postgres pg_dumpall -c -U lemmy | gzip > /mnt/storagespace/lemmyDB/zonenranslite_dump`date +%d-%m-%Y"_"%H_%M_%S`.sql.gz
rsync -avP /srv/lemmy/zonenranslite.de/volumes /mnt/storagespace/lemmyVolumes/
Es öffnet das Docker Verzeichnis, da sonst der docker compose Befehl nicht funktioniert.
Sichert die Datenbank und packt sie in den gemounteten Storagespace.
Danach werden mit rsync die restlichen Daten in den Storeagespace kopiert.
Das lasse ich als root cronjob um 01:00 laufen.
Um 03:00 startet auf meinen Homeserver dieses Bash Script als cronjob:
#!/bin/sh
# DB Backup
rsync -av --rsync-path="sudo rsync" [email protected]:/mnt/storagespace/lemmyDB /mnt/hdd/sicherung
# Volumes folder Backup
rsync -av --rsync-path="sudo rsync" [email protected]:/mnt/storagespace/lemmyVolumes /mnt/hdd/sicherung
Es kopiert mittels rsync und SSH die vorher auf dem Lemmy Server erstellten Backups auf den Homeserver.
Hier musste ich etwas tricksen, damit sudo rsync
funktioniert.
Auf dem Lemmy Server in /etc/sudoers
habe ich folgende Zeile hinzugefügt meinUser ALL=NOPASSWD:/usr/bin/rsync
, damit wird sudo rsync
ohne Password ausgeführt. meinUser
steht hier stellvertreten für meinen Usernamen.
SSH ist soweit abgesichert, dass weder root noch ein Passwort Login erlaubt ist. Lediglich über SSH-Keys kommt eine Verbindung zustande.
Nachtrag 2:
Ich konnte mit der Zeit zusehen, wie mein Speicher immer voller wurde. Auf der Suche nach der Ursache, du
ist dein Freund, stieß ich auf den Ordner lemmy/volumes/postgres/pg_wal
. Dieser war in den Sicherungen 10x größer als im laufenden Betrieb. Kurze Recherche was das ist ergab, wal steht für “write-ahead log” und logt alle Daten, die vom Benutzer verändert werden können und bevor sie in die Datenbank geschrieben werden (So habe ich es jedenfalls verstanden). Normalerweise löscht Postgres Daten, die nicht mehr benötigt werden automatisch aus dem pg_wal Ordner, aber natürlich nicht aus den Sicherungsordnern. So wuchs der pg_wal Ordner in den Sicherungen auf über 50 GB.
Also wurde das Sicherungsscript noch einmal angepasst.
Auf dem Lemmy Server:
#!/bin/bash
cd /srv/lemmy/zonenranslite.de
docker compose exec postgres pg_dumpall -c -U lemmy | gzip > /mnt/storagespace/lemmyDB/zonenranslite_dump`date +%d-%m-%Y"_"%H_%M_%S`.sql.gz
rsync -avP --delete /srv/lemmy/zonenranslite.de/volumes /mnt/storagespace/lemmyVolumes/
Auf dem Homeserver:
#!/bin/sh
# DB Backup
rsync -av --rsync-path="sudo rsync" [email protected]:/mnt/storagespace/lemmyDB /mnt/hdd/sicherung
# Volumes folder Backup
rsync -av --delete --rsync-path="sudo rsync" [email protected]:/mnt/storagespace/lemmyVolumes /mnt/hdd/sicherung
Mit den Zusatz --delete
werden in dem Zielverzeichnis alle Daten, die nicht in der Quelle vorhanden sind, gelöscht. Ich hoffe das verhindert jetzt unnötige Platzverschwendung.