this post was submitted on 01 Mar 2025
23 points (96.0% liked)

de_EDV

678 readers
3 users here now

Ableger von c/de_EDV auf feddit.org, welches wiederum ein Ableger von r/de_EDV auf feddit.de ist.

News, Diskussionen und Hilfestellung zu Hard- und Software

Diese Community dient als Anlaufstelle für alle IT-Interessierten, egal ob Profi oder blutiger Anfänger. Stellt eure Fragen und tauscht euch aus!

Ich würde das auf Anfrage jetzt erst mal hier eröffnen und schauen was sich tut.

founded 8 months ago
MODERATORS
 

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" XXX@zonenranslite.de:/mnt/storagespace/lemmyDB /mnt/hdd/sicherung
# Volumes folder Backup
rsync -av --rsync-path="sudo rsync" XXX@zonenranslite.de:/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" XXX@zonenranslite.de:/mnt/storagespace/lemmyDB /mnt/hdd/sicherung
# Volumes folder Backup
rsync -av --delete --rsync-path="sudo rsync" XXX@zonenranslite.de:/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.

top 5 comments
sorted by: hot top controversial new old
[–] Dunstabzugshaubitze@feddit.org 11 points 2 weeks ago (1 children)

klingt für mich ok, vorrausgesetzt du schaust halbwegs regelmäßig ob du daraus tatsächlich deine Instanz wiederherstellen kannst, ein Backup ist nur ein Backup, wenn auch der Restore funktioniert. vorsichtshalber solltest du ein paar ältere Backups aufheben um zu verhindern, dass du nur welche hast in denen das System schon irgendwie kaputt war.

[–] ranslite@zonenranslite.de 4 points 2 weeks ago

Danke, den Restore werde ich mal in ner ruhigen Minute probieren. Die Snapshots mache ich manuell und sollen als Rückfall auf eine älter noch funktionierende Version dienen.

[–] connaisseur@feddit.org 8 points 2 weeks ago (1 children)

Beim Backup wäre die Frage, ob die Datenbank konsistent gesichert ist. Andernfalls ist das Backup quasi wertlos. Keine Ahnung ehrlich gesagt was da bei Lemmy drunter läuft, wahrscheinlich sowas wie Postgres? Evtl. misst du dann über Postgres-Mittel eine zusätzliche Sicherung erzeugen, um ein wiederherzustellendes Backup für die DB zu bekommen. Datenbanken sind meist nicht über reine Kopien aus dem Dateisystem sicherbar (jedenfalls nicht im laufenden Betrieb). Und wie schon angemerkt wurde - ohne erfolgreich durchgeführten Test kann man nicht sicher sein, dass ein Backup auch wirklich wiederherstellungsfähig ist.

[–] ranslite@zonenranslite.de 8 points 2 weeks ago* (last edited 2 weeks ago) (1 children)

Ah, ok. Da muss ich wohl nochmal ran. Es läuft Postgres.

Edit:
Die Lemmy Dokumentation hat sogar einen extra Eintrag dazu. Link

[–] connaisseur@feddit.org 5 points 2 weeks ago

Ah perfekt. Ja da kannst du sicherlich drauf aufsetzen, dann gibt es da ein erprobtes Verfahren 👍