30.03.2025 Frage an Grok für eine Backup Lösung

Hallo Grok.
Ich suche eine Backup Lösung für folgendes System:
Im separiertem LAN ist ein Raspberry Pi 5 mit einer WordPress Installation. Die ist erreichbar unter der Adresse http://amscharpenberg.selhost.bz/ev-travel-blog. Der raspberry hat die IP 192.168.1.100.
In einem weiteren LAN befindet sich ein Synology DSM220 NAS.
Die Netze sind über einen DrayTek vigor2866 über eine firewall verbunden und haben Zugang zum Internet.
Die Backup Lösung soll alle relevanten Dateien 1x am Tag um 03:00 sichern, rollierend für 7 Tage.
Das NAS wird um 02:50 für 3 h eingeschaltet. Das Backup soll automatisch laufen, und eine Status E-Mail versenden über GMail.
Ich dachte an eine rsync Lösung. Hast du Vorschläge?

Den ersten Vorschlag hab ich noch mal verbessern lassen. Herausgekommene ist dann das:

Verstanden! Wenn du den Zugriff vom 192.168.0.x-Netz (dem LAN des Synology NAS) aus initiieren möchtest und dafür einen weiteren Raspberry Pi einsetzt, ist das eine ausgezeichnete Idee, besonders aus Sicherheitsgründen. Dadurch minimierst du die Notwendigkeit, Firewall-Ports vom 192.168.1.x-Netz (Raspberry Pi 5 mit WordPress) in Richtung NAS zu öffnen, und die Backup-Logik wird vom zweiten Raspberry Pi im NAS-Netz gesteuert. Ich passe den Ansatz entsprechend an.

Neuer Vorschlag: Backup vom zweiten Raspberry Pi im 192.168.0.x-Netz

1. Aufbau

  • Raspberry Pi 5 (WordPress): IP 192.168.1.100 im separierten LAN.
  • Raspberry Pi 2 (Backup): Neue Einheit im 192.168.0.x-Netz, z. B. IP 192.168.0.101, im selben LAN wie das Synology NAS.
  • Synology NAS: Z. B. IP 192.168.0.10, im 192.168.0.x-Netz.
  • Der Backup-Raspberry (192.168.0.101) zieht die Daten vom WordPress-Raspberry (192.168.1.100) und speichert sie lokal auf dem NAS.

2. Vorteile

  • Sicherheit: Der WordPress-Raspberry bleibt isoliert; nur eingehender SSH-Zugriff vom Backup-Raspberry wird erlaubt.
  • Einfachheit: Das NAS muss keine Dienste nach außen freigeben, da der Backup-Raspberry im gleichen LAN ist.

3. Schritte zur Umsetzung

a) Netzwerkkonfiguration

  • Stelle sicher, dass der Backup-Raspberry (192.168.0.101) den WordPress-Raspberry (192.168.1.100) über die Firewall erreichen kann. Im DrayTek musst du:
    • Eine Regel erstellen, die SSH (Port 22) von 192.168.0.101 nach 192.168.1.100 erlaubt.
    • Rückverkehr (NAT) entsprechend konfigurieren.

b) Rsync-Skript auf dem Backup-Raspberry

  • Installiere rsync auf dem Backup-Raspberry:
    sudo apt update && sudo apt install rsync
  • Erstelle ein Backup-Skript (/home/pi/backup.sh):
    #!/bin/bash
  • DATE=$(date +%Y-%m-%d)
  • SOURCE=“pi@192.168.1.100:/var/www/html/“
  • DEST=“/mnt/nas/ev-travel-blog/“
  • LOG=“/var/log/backup_$DATE.log“
  • # Mount NAS (falls nicht dauerhaft gemountet)
  • mkdir -p /mnt/nas
  • mount -t nfs 192.168.0.10:/volume1/backup /mnt/nas  # Oder SMB, je nach NAS-Konfig
  • # Rsync vom WordPress-Raspberry
  • rsync -avz –delete -e ssh „$SOURCE“ „$DEST/daily_$DATE“ > „$LOG“ 2>&1
  • # Alte Backups löschen (älter als 7 Tage)
  • find „$DEST“ -maxdepth 1 -type d -name „daily_*“ -mtime +7 -exec rm -rf {} \;
  • # Status-E-Mail
  • STATUS=“Backup vom $DATE abgeschlossen. Details in $LOG.“
  • echo -e „Subject: Backup Status $DATE\n\n$STATUS“ | ssmtp dein.email@gmail.com
  • # Unmount NAS (optional)
  • umount /mnt/nas
  • Mache das Skript ausführbar:
    chmod +x /home/pi/backup.sh

c) SSH ohne Passwort

  • Generiere einen SSH-Schlüssel auf dem Backup-Raspberry:
    ssh-keygen -t rsa
  • Kopiere den Schlüssel zum WordPress-Raspberry:
    ssh-copy-id pi@192.168.1.100

d) NAS-Mount

  • Wenn du NFS nutzen willst (schneller als SMB), aktiviere es im Synology DSM unter „Dateidienste“ > „NFS“ und erstelle eine Freigabe für /volume1/backup. Dann teste den Mount:
    sudo mount -t nfs 192.168.0.10:/volume1/backup /mnt/nas
  • Alternativ nutze SMB (einfacher):
    sudo apt install cifs-utils
  • sudo mount -t cifs //192.168.0.10/backup /mnt/nas -o username=,password=
  • Für dauerhaften Mount füge eine Zeile in /etc/fstab hinzu.

e) Cron-Job

  • Auf dem Backup-Raspberry:
    crontab -e
  • Eintrag für 03:00 Uhr:
    0 3 * * * /home/pi/backup.sh

f) E-Mail über Gmail

  • Installiere und konfiguriere ssmtp auf dem Backup-Raspberry (wie im vorherigen Beispiel):
    sudo apt install ssmtp
  • /etc/ssmtp/ssmtp.conf:
    root=dein.email@gmail.com
  • mailhub=smtp.gmail.com:587
  • AuthUser=dein.email@gmail.com
  • AuthPass=dein-app-passwort
  • UseSTARTTLS=YES

g) Datenbank-Sicherung

  • Da der Zugriff jetzt vom Backup-Raspberry erfolgt, sichere die MySQL-Datenbank remote:
    • Füge dies in backup.sh vor rsync ein:
      ssh pi@192.168.1.100 „mysqldump -u [user] -p[pass] wordpress_db“ > „$DEST/daily_$DATE/db_backup_$DATE.sql“
    • Stelle sicher, dass MySQL auf dem WordPress-Raspberry für Remote-Zugriff von 192.168.0.101 konfiguriert ist (oder nutze SSH-Tunnel).

4. NAS-Zeitschaltung

  • Wie zuvor: Stelle im Synology DSM ein, dass das NAS um 02:50 startet und um 05:50 herunterfährt.

5. Test und Feinschliff

  • Teste das Skript manuell:
    /home/pi/backup.sh
  • Prüfe das Log, das Backup-Verzeichnis auf dem NAS und die E-Mail.
  • Falls der NAS-Mount automatisiert werden soll, passe fstab oder das Skript an.

Fazit

Mit dieser Lösung hast du eine sichere, pull-basierte Backup-Strategie: Der Backup-Raspberry im 192.168.0.x-Netz initiiert alles, während der WordPress-Raspberry nur SSH-Zugriff erlauben muss. Das ist sauber getrennt und minimiert Sicherheitsrisiken. Wenn du Fragen hast oder etwas spezifischer ausgearbeitet haben möchtest (z. B. MySQL-Konfig oder Firewall-Regeln), lass es mich wissen!


Ich kann das rollierende Backup noch nicht nachvollziehen. Gemeint war max 7 Backups zu haben. Tag 1, Tag 2, und am 8. Tag wird das Backup von Tag 1 wieder überschrieben.

Danke für die Rückmeldung! Ich verstehe jetzt besser, was du mit dem rollierenden Backup meinst: Du möchtest maximal 7 Backups behalten (für Tag 1 bis Tag 7), und am 8. Tag soll das Backup von Tag 1 überschrieben werden, am 9. Tag das von Tag 2 usw. Das ist ein klassisches zyklisches oder rotierendes Backup-Modell mit festen Slots. Ich passe den Ansatz an, damit das klar und einfach umgesetzt wird.

Anpassung: Rollendes Backup mit maximal 7 festen Slots

Konzept

  • Statt neue Verzeichnisse mit Datumsstempel zu erstellen und alte zu löschen, nutzen wir genau 7 feste Backup-Slots (z. B. backup_1 bis backup_7).
  • Jeden Tag wird ein Slot überschrieben, basierend auf einem Zyklus. Dafür können wir den Wochentag (1–7, entsprechend Montag–Sonntag) verwenden oder eine fortlaufende Nummer modulo 7 berechnen.
  • Das Skript bleibt auf dem Backup-Raspberry (192.168.0.101) und zieht die Daten vom WordPress-Raspberry (192.168.1.100).

Geändertes Skript

Hier ist das angepasste backup.sh, das einen 7-Tage-Zyklus verwendet:

#!/bin/bash

# Wochentag ermitteln (1 = Montag, 7 = Sonntag)

DAY=$(date +%u)

# Zielverzeichnis auf dem NAS

DEST=“/mnt/nas/ev-travel-blog/“

SOURCE=“pi@192.168.1.100:/var/www/html/“

LOG=“/var/log/backup_day_$DAY.log“

# Mount NAS (falls nicht dauerhaft gemountet)

mkdir -p /mnt/nas

mount -t nfs 192.168.0.10:/volume1/backup /mnt/nas  # Oder SMB, je nach Konfig

# Backup-Slot bestimmen (backup_1 bis backup_7)

BACKUP_SLOT=“backup_$DAY“

# Rsync: Überschreibt den Slot für den aktuellen Tag

rsync -avz –delete -e ssh „$SOURCE“ „$DEST/$BACKUP_SLOT“ > „$LOG“ 2>&1

# Datenbank sichern (überschreibt ebenfalls den Slot für den Tag)

ssh pi@192.168.1.100 „mysqldump -u [user] -p[pass] wordpress_db“ > „$DEST/$BACKUP_SLOT/db_backup.sql“

# Status-E-Mail

STATUS=“Backup für Tag $DAY abgeschlossen. Slot $BACKUP_SLOT überschrieben.“

echo -e „Subject: Backup Status Tag $DAY\n\n$STATUS“ | ssmtp dein.email@gmail.com

# Unmount NAS (optional)

umount /mnt/nas

Erklärung

  1. date +%u: Gibt den Wochentag als Zahl (1–7) zurück. Montag ist 1, Sonntag ist 7. Das passt perfekt für einen 7-Tage-Zyklus.
  2. Feste Slots: Anstatt dynamische Verzeichnisse zu erstellen, gibt es jetzt genau 7 Unterverzeichnisse auf dem NAS: backup_1, backup_2, …, backup_7. Jeden Tag wird der entsprechende Slot überschrieben.
  3. –delete in rsync`: Entfernt Dateien im Ziel-Slot, die im Quellverzeichnis nicht mehr existieren, und sorgt dafür, dass der Slot immer eine exakte Kopie des aktuellen Stands ist.
  4. Datenbank: Auch die Datenbank wird pro Slot gesichert (z. B. backup_1/db_backup.sql), sodass du immer eine konsistente Datei- und DB-Sicherung hast.

Beispielablauf

  • Montag (Tag 1): backup_1 wird geschrieben/überschrieben.
  • Dienstag (Tag 2): backup_2 wird geschrieben/überschrieben.
  • Sonntag (Tag 7): backup_7 wird geschrieben/überschrieben.
  • Nächster Montag (Tag 8): backup_1 wird überschrieben.
  • Nächster Dienstag (Tag 9): backup_2 wird überschrieben.

Am Ende hast du immer genau 7 Backups, die die letzten 7 Tage abdecken, und der Speicherbedarf bleibt konstant.

Einrichtung

  1. Verzeichnisse vorbereiten: Auf dem NAS (z. B. nach dem ersten Mount):
    mkdir -p /mnt/nas/ev-travel-blog/backup_{1..7}
  2. Skript testen: Führe es manuell aus und prüfe, ob der richtige Slot (backup_$DAY) aktualisiert wird:
    /home/pi/backup.sh
  3. Cron: bleibt unverändert (03:00 Uhr täglich):
    crontab -e
  4. 0 3 * * * /home/pi/backup.sh

Alternative: Fortlaufende Nummer statt Wochentag

Falls du keinen wochenbasierten Zyklus willst, sondern eine fortlaufende Rotation (Tag 1, Tag 2, …, unabhängig vom Wochentag), könntest du eine Zählvariable nutzen:

#!/bin/bash

COUNTER_FILE=“/home/pi/backup_counter.txt“

if [ ! -f „$COUNTER_FILE“ ]; then

    echo 1 > „$COUNTER_FILE“

fi

DAY=$(cat „$COUNTER_FILE“)

NEXT_DAY=$(( (DAY % 7) + 1 ))

echo „$NEXT_DAY“ > „$COUNTER_FILE“

DEST=“/mnt/nas/ev-travel-blog/“

SOURCE=“pi@192.168.1.100:/var/www/html/“

LOG=“/var/log/backup_day_$DAY.log“

# Mount, rsync, etc. wie oben

BACKUP_SLOT=“backup_$DAY“

rsync -avz –delete -e ssh „$SOURCE“ „$DEST/$BACKUP_SLOT“ > „$LOG“ 2>&1

ssh pi@192.168.1.100 „mysqldump -u [user] -p[pass] wordpress_db“ > „$DEST/$BACKUP_SLOT/db_backup.sql“

STATUS=“Backup für Slot $DAY abgeschlossen.“

echo -e „Subject: Backup Status Slot $DAY\n\n$STATUS“ | ssmtp dein.email@gmail.com

umount /mnt/nas

Hier zählt ein Zähler von 1 bis 7 und springt dann wieder auf 1 zurück, unabhängig vom Wochentag.

Fazit

Mit der Wochentag-Variante (date +%u) ist es einfacher und nutzt die eingebaute Logik des Datums. Du hast immer genau 7 Backups, und der jeweilige Slot wird täglich überschrieben – genau wie gewünscht. Ist das jetzt klarer? Soll ich etwas weiter vertiefen oder anpassen?

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen