Zum Inhalt springen
SONOYA .com
Web & Code

Anleitung: n8n-Daten automatisch auf DigitalOcean Spaces sichern

n8n speichert Deine Workflows und vor allem Deine Zugangsdaten in einem Docker-Volume auf dem Server. Geht das Droplet verloren, ist ohne Backup alles weg, denn ein automatisches Volume-Backup gibt es nicht. In dieser Anleitung sicherst Du Deine n8n-Daten jede Nacht automatisch auf DigitalOcean Spaces…

Von Sonoya Redaktion 4 Min. Lesezeit
Anleitung: n8n-Daten automatisch auf DigitalOcean Spaces sichern
Anleitung: n8n-Daten automatisch auf DigitalOcean Spaces sichern

n8n speichert Deine Workflows und vor allem Deine Zugangsdaten in einem Docker-Volume auf dem Server. Geht das Droplet verloren oder zerlegst Du Dir die Installation bei einem Update, ist ohne Backup alles weg, denn weder n8n noch DigitalOcean sichern dieses Volume von allein. In dieser Anleitung richten wir ein automatisches Backup ein, das Deine n8n-Daten jede Nacht als komprimiertes Archiv auf DigitalOcean Spaces hochlädt und alte Sicherungen von selbst wieder aufräumt.

Was genau gesichert werden muss

n8n legt alle wichtigen Daten im Verzeichnis /home/node/.n8n innerhalb des Containers ab. Dort liegen die Datenbank mit Deinen Workflows (standardmäßig eine database.sqlite) und der Verschlüsselungs-Key, mit dem n8n Deine gespeicherten Zugangsdaten chiffriert. Genau dieser Key ist der Knackpunkt: Geht er verloren, lassen sich die Credentials laut der offiziellen n8n-Dokumentation zum Encryption Key nach einer Wiederherstellung nicht mehr entschlüsseln, und Du müsstest jede Verbindung neu anlegen.

Die gute Nachricht: Beim Selfhosting mit Docker landet dieses Verzeichnis in einem persistenten Volume, üblicherweise n8n_data. Wenn wir dieses eine Volume sichern, haben wir Datenbank und Key zusammen in einem Archiv, und die Wiederherstellung ist vollständig.

Voraussetzungen

Schritt 1: s3cmd installieren und für Spaces einrichten

Spaces ist S3-kompatibel, deshalb nutzen wir das schlanke Kommandozeilen-Werkzeug s3cmd. Melde Dich per SSH auf dem Droplet an und installiere es:

Code
apt update && apt install s3cmd -y

Starte danach die Konfiguration:

Code
s3cmd --configure

Trag bei den Abfragen die folgenden Werte ein und bestätige den Rest mit Enter:

  • Access Key und Secret Key: das Schlüsselpaar aus dem DigitalOcean-Dashboard.
  • Default Region: US (DigitalOcean wertet dieses Feld nicht aus, der Standard genügt).
  • S3 Endpoint: die Region Deines Space, zum Beispiel fra1.digitaloceanspaces.com für Frankfurt.
  • DNS-style bucket+hostname template: %(bucket)s.fra1.digitaloceanspaces.com, wieder mit Deiner Region statt fra1.
  • Use HTTPS protocol: Yes.

Am Ende fragt s3cmd, ob die Einstellungen getestet und gespeichert werden sollen. Bestätige beides. Die genauen Felder beschreibt auch die offizielle DigitalOcean-Dokumentation zu s3cmd.

Schritt 2: Den Speicherort der n8n-Daten bestätigen

Bevor wir sichern, vergewissern wir uns, wo das Volume auf dem Host wirklich liegt. Lass Dir zuerst die Volumes anzeigen und such das n8n-Volume heraus:

Code
docker volume ls | grep n8n

Lass Dir dann den echten Pfad auf dem Server ausgeben (ersetze n8n_data durch den Namen, den Du gerade gesehen hast):

Code
docker volume inspect n8n_data --format '{{ .Mountpoint }}'

Du bekommst einen Pfad wie /var/lib/docker/volumes/n8n_data/_data. Das ist das Verzeichnis, das wir sichern. Wenn Du mehr darüber wissen willst, warum Docker-Daten an diesem Ort liegen und nicht dort, wo der Container sie zu sehen glaubt, erklärt das die Anleitung Wo sind die Volumes für Persistent Storage für eine WordPress Installation mit Docker in Coolify? ausführlich.

Schritt 3: Das Backup-Skript erstellen

Leg das Skript unter /usr/local/bin/n8n-backup.sh an:

Code
nano /usr/local/bin/n8n-backup.sh

Füge folgenden Inhalt ein und passe oben den Volume-Pfad und den Namen Deines Space an:

Code
#!/bin/bash

# n8n-backup.sh
# Sichert das n8n-Datenvolume auf DigitalOcean Spaces.

# Konfiguration
VOLUME_PATH="/var/lib/docker/volumes/n8n_data/_data"
BUCKET="s3://dein-space-name/n8n-backups"
TMP_DIR="/tmp"
RETENTION_DAYS=14
LOGFILE="/var/log/n8n-backup.log"

DATE=$(date +"%Y-%m-%d_%H-%M")
ARCHIVE="$TMP_DIR/n8n_backup_$DATE.tar.gz"

echo "n8n-Backup gestartet am $(date)" | tee -a "$LOGFILE"

# Archiv des n8n-Datenverzeichnisses erstellen
tar -czf "$ARCHIVE" -C "$VOLUME_PATH" .

# Auf DigitalOcean Spaces hochladen
s3cmd put "$ARCHIVE" "$BUCKET/" >> "$LOGFILE" 2>&1

# Lokales Archiv wieder entfernen
rm -f "$ARCHIVE"

# Backups löschen, die älter als RETENTION_DAYS Tage sind
CUTOFF=$(date -d "$RETENTION_DAYS days ago" +%s)
s3cmd ls "$BUCKET/" | while read -r line; do
  FILE_DATE=$(echo "$line" | awk '{print $1}')
  FILE_PATH=$(echo "$line" | awk '{print $4}')
  if [ -n "$FILE_DATE" ] && [ "$(date -d "$FILE_DATE" +%s)" -lt "$CUTOFF" ]; then
    s3cmd del "$FILE_PATH" >> "$LOGFILE" 2>&1
  fi
done

echo "n8n-Backup abgeschlossen am $(date)" | tee -a "$LOGFILE"

Speichere mit Strg + O, bestätige mit Enter und schließe den Editor mit Strg + X.

Schritt 4: Skript ausführbar machen und einmal testen

Mach das Skript ausführbar:

Code
chmod +x /usr/local/bin/n8n-backup.sh

Starte es danach einmal von Hand, um zu sehen, ob alles läuft:

Code
/usr/local/bin/n8n-backup.sh

Prüf anschließend im DigitalOcean-Dashboard, ob im Space unter n8n-backups ein frisches .tar.gz liegt. Wenn ja, funktioniert die Kette aus Archivieren, Hochladen und Aufräumen.

Schritt 5: Das Backup per Cronjob automatisieren

Damit die Sicherung jede Nacht von selbst läuft, richtest Du einen Cronjob ein. Öffne den Crontab des root-Users:

Code
crontab -e

Füge die folgende Zeile hinzu, die das Backup jeden Tag um 2:45 Uhr morgens startet, also zu einer Zeit mit wenig Last:

Code
45 2 * * * /usr/local/bin/n8n-backup.sh >> /var/log/n8n-backup.log 2>&1

Speichern und schließen genügt, ab jetzt sichert sich Deine n8n-Instanz selbst.

Fazit

Mit einem kleinen Shell-Script, s3cmd und einem Cronjob hast Du Deine n8n-Daten sauber im Griff: Datenbank und Verschlüsselungs-Key landen jede Nacht zusammen in einem Archiv auf DigitalOcean Spaces, alte Sicherungen verschwinden automatisch nach zwei Wochen, und ein verlorenes Droplet kostet Dich höchstens noch ein paar Minuten Wiederherstellung statt Deiner kompletten Automatisierung. Wenn Du Deine n8n-Instanz nach demselben Prinzip auch automatisch aktuell halten möchtest, hilft Dir die Anleitung Fertiges Shell-Script: n8n auf einem DigitalOcean 1-Click-Droplet aktualisieren, die das Update per Cronjob übernimmt. Und falls Du noch kein eigenes Droplet betreibst, bekommst Du über diesen Affiliate-Link zu DigitalOcean (Affiliate Link) Startguthaben zum Ausprobieren.

Weiterlesen .