rsync logo

Serverbackup mit RSYNC auf Synology sichern

Ich betreibe meinen eigenen Web- und Mailserver. Vor ein paar Tagen habe ich mir dann meinen Mailserver zerschossen und durfte ihn neu aufsetzen. Der eigentliche Aufwand war gering, doch ich habe meine alten Mails verloren, da ich kein Backup hatte. Ok, selber schuld. Dieses mal will ich es besser machen und regelmäßige Backups anlegen, gut das es RSYNC und Synologys gibt.

Ich werde euch zeigen, wie ihr eure WordPress Daten sichert und diese dann mittels RSYNC auf die Synology bekommt.

Backup-Scripts auf dem Server erstellen

Damit euer Server ein Backup erstellt, werden wir ein kleines Script erzeugen, welches über einen Cronjob regelmäßig gestartet wird.

Wir erstellen ein neues Verzeichnis namens backup und legen danach das Script an. In meinen Beispiel sichere ich mein komplettes WordPress-Verzeichnis unter /var/www/wirdpress und die dazu passende SQL-Datenbank wordpress. Ihr müsst die Einstellungen natürlich euren Gegebenheiten anpassen.

mkdir /backup
vi /root/backup.sh

Das eigentliche Script besteht aus folgenden Zeilen. Die erste Zeile ist auskommentiert und löscht alle Datein im Backupverzeichnis. Ich lösche die Dateien, damit mir der Platz nicht ausgeht und da ich die Backups eh abhole. Das Script erzeugt ein Zip-File mit der Angabe von Jahr, Monat und Tag des WordPress-Verzeichnisses (in meinem Fall /var/www/wordpress). Em Ende erhalte ich eine ZIP- und ein SQL-File. In der Zeile mysqldump müsst ihr noch einen entsprechenden SQL User mit Passwort eintragen.

#rm /backup/*
zip -r "/backup/wordpress-$(date +"%Y-%m-%d").zip" /var/www/wordpress
mysqldump --add-drop-table -u YOURACCOUNT -pYOURPASSWORD wordpress > "/backup/wordpress-$(date +"%Y-%m-%d").sql"

Damit das Script ausführbar ist, müsst ihr noch folgenden Befehl ausführen. Anschließend testet ihr es mit /root/backup.sh Anschließend schaut ihr in eurem Backupverzeichnis, ob das Backup angelegt wurde.

chmod +x /root/backup.sh

Da wir alle faul sind, wollen wir das Script natürlich nicht immer händisch starten. Wir legen mittels crontab -e einen Cronjob an. Fügt die nachfolgende Zeile ein und euer Script wird jede Nacht um 0 Uhr ausgheführt. Die erste 0 steht für die Minuten und die zweite für die Stunden. Passt die Werte euren Bedürfnissen an.

0 0 * * * /root/backup.sh

Ok, was haben wir bisher erreicht?

Es wird nun jede Nacht das Webverzeichnis und die SQL-Datenbank eurer WordPress Installation gesichert. Solltet ihr also was verbocken, könnt ihr das Backup wieder zurückspielen. Sollte jedoch euer Server abrauchen, habt ihr nix mehr, daher wollen wir noch die Backups extern sichern.

SSH Keys erzeugen

Damit der ganze Prozess automatisch ablaufen kann, müssen wir SSH Keys erzeugen. Mit den Keys authentifiziert sich die Synology später gegenüber dem Webserver. Ihr verbindet euch also wieder mit eurem zu sichernden Server.

Mittels ssh-keygen erzeugen wir ein Schlüsselpaar, bestehen aus privatem und öffentlichem Schlüssel. Eine passphrase vergeben wir nicht. Der Name ist egal, wählt aber besser etwas sinniges, damit ihr die Keys auseinanderhalten könnt.

root@iot:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): synobackup
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in synobackup.
Your public key has been saved in synobackup.pub.
The key fingerprint is:
SHA256:afkjashfkjdshfkjdshfdkjsfdjshfdjshfdkjshf root@iot
The key's randomart image is:
+---[RSA 2048]----+
|        o+oBoo . |
|       .  + = o  |
|      .    +  oo |
|     o   .. . .*.|
|      + S+ o  + +|
|  .   o=..B .. ..|
| . + . + . B  .  |
|..E +   . o o+   |
|. .+      .o. o  |
+----[SHA256]-----+

Den pub Key kopiert ihr in eure Authorized Keys und den Anderen kopiert ihr auf eure Synology.

cp key.pub /root/.ssh/authorized_keys

RSYNC Script erstellen

Nun wechseln wir zur Synology und erzeugen hier ein Script, damit die Daten auf der Synology gesichert werden.

Ich nutze dabei folgende Ordnerstruktur, die ihr natürlich anpassen könnt.

Allgemein: /volume1/ServerBackup

Scripte und Keys: /volume1/ServerBackup/scripts

Backups: /volume1/ServerBackup/wordpress

Das zuvor erzeugte Key file legen wir im Ordner scripts ab und erzeugen dort auch unser backup Script. Logt euch dazu per ssh und dem admin-Account in eure Synology ein. Das Key-File muss mittels chmod 600 /volume1/ServerBackup/scripts/synobackup noch die richtige Berechtigung bekommen. Nun legen wir das Script an mittels vi /volume1/ServerBackup/scripts/backup.sh und folgendem Inhalt. Den Namen eueres Quell-Servers müsst ihr natürlich ebenfalls anpassen.

#!/bin/ash

#Private Key
PRIVKEY="/volume1/ServerBackup/scripts/synobackup"

#Source Folder
HOSTFOLDER=/backup/*

#Destination Folder on Synology
DESTFOLDER="volume1/ServerBackup/wordpress"

#rsync command to source server
/usr/bin/rsync -avz -e "ssh -i $PRIVKEY" root@yourserver.de:$HOSTFOLDER $DESTFOLDER

Anschließend setzen wir noch die Berechtigung mittels chmod +x /volume1/ServerBackup/scripts/backup.sh und starten das Script das erste Mal mit /volume1/ServerBackup/scripts/backup.sh , beantwortet noch die Abfrage mit yes und der ssh-key wird in den known_hosts abgelegt. Anschließend läuft das Script auch ohne weitere Eingabe. Überprüft ebenfalls ob die Daten auch im Zielverzeichnis abgelegt werden.

RSYNC automatisieren

Und auch hier wollen wir natürlich alles automatisieren und nichts manuell machen müssen. In der Weboberfläche eurer Synology startet ihr den Aufgabenplaner, welchen ihr in der Systemsteuerung findet. Hier erstellen wir ein neue Geplante Aufgabe als Benutzerdefiniertes Skript.

  • vergebt einen wiedererkennbaren Namen und wählt als Benutzer admin
  • Definiert einen Zeitplan
  • Verweist auf euer Script

Anschließend startet ihr das Script über Ausführen.

Aufräumen

Damit die Synology nicht voll läuft, löschen wir nun automatisch alle Backups die älter als 14 Tage sind. Dazu erzeugen wir ein weiteres Script, mit folgendem Inhalt

#!/bin/ash

find /volume1/ServerBackup/wordpress -type f -mtime +14 -exec rm {} \;

Dieses lassen wir wieder täglich durch den Aufgabenplaner ausführen.

Somit hält eure Synology nun die Backups der letzten 14 Tage vor und ihr seid auf der sicheren Seite. In meinem Fall sync ich diese Backups noch in die Cloud zu OneDrive.

1 Gefällt mir

Schreibe einen Kommentar