💾 Backup mit Synology

In diesem Abschnitt werden unsere Pterodactyl-Docker-Server automatisch auf einem Synology NAS gesichert. Pterodactyl kann per Cronjob Backups erstellen – wir nutzen diese Funktion, um die Backups regelmäßig auf unser NAS zu übertragen.

📋 Ablauf im Überblick

So funktioniert das Backup

  1. Um 0:00 Uhr erstellt Pterodactyl automatisch Backups für jeden Server
  2. ~5–10 Minuten später verbindet sich das NAS per SSH-Key mit dem Server
  3. Ein Script auf dem Server fasst die Backups als ZIP zusammen
  4. Das NAS lädt die ZIP-Datei per SCP herunter
  5. Lokal wird ein Ordner mit dem aktuellen Datum erstellt
  6. Die temporäre ZIP auf dem Server wird gelöscht
  7. Backups älter als 30 Tage werden lokal gelöscht

🔑 SSH-Login & Schlüssel erstellen (Server)

1. Neuen Benutzer anlegen

Auf dem Pterodactyl-Server per SSH einen neuen User erstellen:

adduser --shell /bin/bash username

Anschließend den User zur SSH-Gruppe hinzufügen. Auf Debian 12/13 heißt die Gruppe _ssh (mit Unterstrich) – --ingroup '_ssh' wird von adduser abgelehnt, daher separat via usermod:

# Debian 12 / 13:
usermod -aG _ssh username

# Debian 10 / 11 (alte Gruppe ohne Unterstrich):
# usermod -aG ssh username

Den neuen Benutzer in die SSH-Konfiguration eintragen:

nano /etc/ssh/sshd_config
AllowUsers username

2. SSH-Schlüssel generieren

Zum neuen Benutzer wechseln und einen 4096-Bit RSA-Schlüssel ohne Passwort generieren (für automatischen Ablauf):

su username
ssh-keygen -t rsa -b 4096

Dateinamen mit Enter bestätigen, Passphrase leer lassen.

3. Schlüssel autorisieren

Den SSH-Schlüssel als autorisierten Schlüssel einrichten (Benutzername anpassen!):

mv /home/username/.ssh/id_rsa.pub /home/username/.ssh/authorized_keys
chmod 700 /home/username/.ssh
chmod 600 /home/username/.ssh/authorized_keys

4. Private Key exportieren

Den privaten Schlüssel anzeigen und in eine Textdatei kopieren:

cat /home/username/.ssh/id_rsa

Die gesamte Ausgabe (von -----BEGIN OPENSSH PRIVATE KEY----- bis -----END OPENSSH PRIVATE KEY-----) in eine Datei namens „Syno-ServerKey" (ohne .txt!) speichern.

5. SSH-Key umwandeln (PuTTYgen)

  • PuTTYgen öffnen und „Load" klicken
  • Unter „Alle Dateien (*.*)" den gespeicherten Syno-ServerKey auswählen
  • Conversions → Export OpenSSH key
  • Speichern als „Syno-ServerKey.pem"

📜 Backup-Script auf dem Server

6. Script erstellen

Ordner und Script anlegen (Benutzernamen anpassen!):

mkdir /home/username/scripts
nano /home/username/scripts/backup.sh

Folgendes Script eintragen (nur SERVERUSER anpassen!):

#!/bin/bash
# Normal Filesystem Backup
# You can Change the variable of "SERVERUSER"
SERVERUSER="username"

# DONT EDIT HERE!
d=`date +%d-%m-%Y`
h=$(hostname -s)

# Change to directory of the backup folder from Pterodactyl
cd /var/lib/pterodactyl/backups/

# Pack all created backups as one ZIP with server name and date
zip -r "$h$d".zip *

# Move the created .ZIP file to the home backup folder
if [[ ! -e "/home/$SERVERUSER/backups" ]]; then
    mkdir -p /home/$SERVERUSER/backups
fi
mv /var/lib/pterodactyl/backups/*.zip /home/$SERVERUSER/backups/

# Assign permissions to SERVERUSER for the download
chown -R $SERVERUSER /home/$SERVERUSER/backups
chmod 700 /home/$SERVERUSER/backups

echo "ZIP Done";

Rechte setzen:

chmod 700 /home/username/scripts/backup.sh

7. Sudo-Recht für das Script

Wieder als Root anmelden und Sudoers-Datei bearbeiten:

su -
visudo

Folgenden Eintrag hinzufügen (Benutzernamen anpassen!):

# User alias specification
username ALL=(ALL) NOPASSWD: /home/username/scripts/backup.sh

⏰ Pterodactyl Server Backups einstellen

8. Automatische Backups in Pterodactyl

Wichtig: Für jeden Server im Webinterface das Backup Limit auf 1 setzen!

Auf dem Game-/Voice-Server im Panel:

  • Unter „Schedules" einen neuen Cronjob anlegen → z. B. „Auto-Backup"
  • Jeden Sonntag um 0 Uhr: 0 0 * * 7
  • „New Task" → Action: „Create Backup"
  • Optional: Unter „Ignored files" Ordner/Dateien ausschließen (mit / beginnen)

💡 Für andere Zeitpunkte: crontab.guru

🏠 Synology NAS konfigurieren

9. SSH auf der Synology aktivieren

  • Systemsteuerung → Terminal & SNMP
  • Haken bei „SSH-Dienst aktivieren"
  • SSH-Port aus Sicherheitsgründen ändern (z. B. 40722)
  • Systemsteuerung → Benutzer & Gruppe → Erweitert → Benutzer-Home-Dienst aktivieren

10. SSH-Key auf NAS einrichten

Die Syno-ServerKey.pem in den .ssh-Ordner des Adminbenutzers auf dem NAS kopieren.

Per Putty auf das NAS verbinden und Rechte setzen:

chmod 700 /var/services/homes/AdminName/.ssh/Syno-ServerKey.pem

Einmalige manuelle Verbindung für den Fingerprint:

ssh -i /var/services/homes/AdminName/.ssh/Syno-ServerKey.pem -pSSHPort username@ServerIP

Den Fingerprint bestätigen. Danach Putty wieder schließen.

11. Aufgabenplanung auf der Synology

Systemsteuerung → Aufgabenplaner → Geplante Aufgabe → Benutzerdefiniertes Script

  • Name: „Server-Backups"
  • Benutzer: Adminuser (wichtig!)
  • Zeitplan: Jeden Sonntag um 00:10 Uhr

Unter Aufgabeneinstellungen folgendes Script eintragen:

#!/bin/sh
# User editable Variables
NASUSER=""
VOLUME=""
SSHKEY=""
SERVERIP=""
SSHPORT=""
SERVERUSER=""
#-------------------------------------------------------------
# DONT EDIT HERE!
echo "connect to external server...";
ssh -i /"$VOLUME"/homes/"$NASUSER"/.ssh/"$SSHKEY" -p"$SSHPORT" "$SERVERUSER"@"$SERVERIP" "sudo ./scripts/backup.sh"

echo "waiting for zipping script on external server...";
wait

# Create a folder with the date of today
TODAY="$(date +'%d-%m-%Y')"
mkdir -p /"$VOLUME"/homes/"$NASUSER"/ServerBackups/"$TODAY"/

# Download the ZIP file via SCP (SFTP)
echo "Download Files...";
scp -i /"$VOLUME"/homes/"$NASUSER"/.ssh/"$SSHKEY" -P"$SSHPORT" "$SERVERUSER"@"$SERVERIP":/home/"$SERVERUSER"/backups/*.zip /"$VOLUME"/homes/"$NASUSER"/ServerBackups/"$TODAY"/
echo "Download done";

wait

# Delete ZIP file on server
echo "Remove temporary zip...";
ssh -i /"$VOLUME"/homes/"$NASUSER"/.ssh/"$SSHKEY" -p"$SSHPORT" "$SERVERUSER"@"$SERVERIP" "rm backups/*.zip"

# Find and delete backups that are older than 30 days locally
echo "Remove files older than 30 days";
find /"$VOLUME"/homes/"$NASUSER"/ServerBackups/ -mtime +30 -delete

echo "BACKUP FINISH!";

12. Variablen anpassen

Im oberen Abschnitt des NAS-Scripts die Werte eintragen:

Variable Beispiel
NASUSERAdmin
VOLUMEvolume1
SSHKEYSyno-ServerKey.pem
SERVERIP192.168.0.555
SSHPORT40822
SERVERUSERsynology

Übernehmen und mit Rechtsklick einen Testlauf starten.

💡 Unter Aufgabenplaner → Einstellungen können Ausgabeergebnisse gespeichert werden, um Fehler zu diagnostizieren.

✅ Jetzt solltet ihr jeden Sonntag ein neues Backup auf eurem NAS bekommen!

← Vorherige Seite Hauptseite