Einleitung
n8n ist eines der leistungsstärksten Open-Source-Tools zur Workflow-Automatisierung, die derzeit verfügbar sind. Im Gegensatz zu SaaS-Alternativen wie Zapier oder Make bietet Ihnen n8n die volle Kontrolle über Ihre Daten und Automatisierungen – allerdings nur, wenn Sie die Lösung selbst hosten. Ein Linux-VPS ist hierfür die ideale Umgebung: stets verfügbar, kostengünstig und vollständig unter Ihrer Kontrolle.
Dieser Leitfaden führt Sie durch den gesamten Prozess der Einrichtung einer produktionsreifen, selbst gehosteten n8n-Instanz auf einem Linux-VPS. Sie beginnen mit einem leeren Server und erhalten am Ende eine vollständig gesicherte, SSL-fähige n8n-Bereitstellung mit Docker, Nginx, PostgreSQL, automatisierten Backups und einer gehärteten Sicherheitskonfiguration.
Das Wichtigste auf einen Blick
- n8n auf einem VPS bietet Ihnen unbegrenzte Workflows, keine Nutzungsbeschränkungen und vollständige Datenhoheit
- Docker ist die empfohlene Installationsmethode für einfachere Updates und Isolierung
- PostgreSQL ist die empfohlene Datenbank für Produktionsumgebungen (nicht SQLite)
- Für den produktiven Einsatz ist ein Reverse-Proxy (Nginx) mit Let’s Encrypt SSL erforderlich
- Ihr VPS sollte mindestens 1 vCPU und 2 GB RAM haben, um einen reibungslosen Betrieb von n8n mit PostgreSQL zu gewährleisten
- Regelmäßige automatisierte Backups schützen Ihre Workflow-Daten und Anmeldedaten
Was ist n8n?
n8n (ausgesprochen „n-acht-n“) ist eine Open-Source-Plattform zur Workflow-Automatisierung, mit der Sie Apps, APIs und Dienste mithilfe eines visuellen, knotenbasierten Editors miteinander verbinden können. Sie unterstützt von Haus aus über 400 Integrationen und ermöglicht es Ihnen, benutzerdefinierten JavaScript- oder Python-Code innerhalb von Workflows auszuführen.
Der wesentliche Unterschied zwischen n8n und seinen Mitbewerbern lässt sich auf drei Punkte zurückführen: Eigentumsrechte, Kosten und Flexibilität.
**Eigentumsverhältnisse: **Wenn Sie n8n selbst hosten, verlassen Ihre Workflow-Daten, Anmeldedaten und Ausführungsprotokolle niemals Ihren Server. Für Teams, die mit sensiblen Kundendaten, Finanzunterlagen oder firmeneigener Geschäftslogik arbeiten, ist dies von enormer Bedeutung. Cloud-Plattformen speichern Ihre Automatisierungslogik auf ihrer Infrastruktur, wobei diese ihren Richtlinien zur Datenaufbewahrung und ihren Sicherheitsvorkehrungen unterliegt.
**Kosten: **Der n8n-Cloud-Tarif berechnet Gebühren pro Workflow-Ausführung, was sich bei Automatisierungen mit hohem Durchsatz schnell summiert. Ein mittelgroßes Team, das täglich Tausende von Ausführungen durchführt, kann monatlich Hunderte von Dollar ausgeben. Auf Ihrem eigenen VPS sind die Ausführungen nach der einmaligen Bezahlung des Servers unbegrenzt und ohne zusätzliche Kosten möglich.
**Flexibilität: **Mit selbst gehostetem n8n können Sie Community-Knoten installieren, beliebigen Code innerhalb von Workflows ausführen, Verbindungen zu internen Diensten herstellen, auf die vom öffentlichen Internet aus kein Zugriff besteht, und jeden Aspekt der Bereitstellung nach Ihren Wünschen konfigurieren. Cloud-Tarife schränken viele dieser Möglichkeiten ein.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- Ein Linux-VPS mit Ubuntu 22.04 oder 24.04 (empfohlen). Überprüfen Sie, ob Ihr Anbieter Ubuntu für das von Ihnen gewählte Paket anbietet, da einige Einstiegspakete nur andere Distributionen enthalten
- Ein Nicht-Root-Benutzer mit sudo-Rechten
- Ein Domainname, der auf die IP-Adresse Ihres VPS verweist (z. B. n8n.yourdomain.com)
- SSH-Zugriff auf Ihren Server
- Grundlegende Kenntnisse der Linux-Befehlszeile
Auswahl des richtigen VPS
Der von dir gewählte Server hat direkten Einfluss auf die Leistung von n8n. Du benötigst mindestens 1 vCPU, 2 GB RAM und 20 GB SSD-Speicher. Der zusätzliche RAM im Vergleich zu einer minimalen SQLite-basierten Installation ist erforderlich, da PostgreSQL, Nginx und n8n gleichzeitig laufen.
Die All-in-One-Plattform für effektives SEO
Hinter jedem erfolgreichen Unternehmen steht eine starke SEO-Kampagne. Aber bei den zahllosen Optimierungstools und -techniken, die zur Auswahl stehen, kann es schwierig sein, zu wissen, wo man anfangen soll. Nun, keine Angst mehr, denn ich habe genau das Richtige, um zu helfen. Ich präsentiere die Ranktracker All-in-One-Plattform für effektives SEO
Wir haben endlich die Registrierung zu Ranktracker absolut kostenlos geöffnet!
Ein kostenloses Konto erstellenOder melden Sie sich mit Ihren Anmeldedaten an
Für Teams mit mehreren Benutzern, komplexen mehrstufigen Workflows oder hohem Webhook-Durchsatz empfiehlt sich ein Upgrade auf 2 vCPU und 4 GB RAM. Der Speicherplatz sollte mindestens 40 GB betragen, wenn Sie lange Ausführungsprotokolle aufbewahren möchten.
PetroSky bietet NVMe-VPS-Tarife in Paris und Montreal an, wobei n8n an der Kasse als Ein-Klick-Anwendung verfügbar ist: Ein Open-Source-Installationsskript stellt n8n mit Docker Compose bereit und richtet HTTPS automatisch über Caddy und Let’s Encrypt ein. Diese Anleitung behandelt die manuelle Vorgehensweise, die bei jedem Anbieter funktioniert.
Berücksichtigen Sie bei der Auswahl eines VPS-Anbieters auch den geografischen Standort. Hosten Sie Ihre n8n-Instanz in der Region, die den Diensten am nächsten liegt, mit denen sie am häufigsten verbunden sein wird – dies reduziert die API-Latenz bei der Ausführung Ihrer Workflows.
Schritt 1: Aktualisieren Sie Ihren Server
Stellen Sie eine SSH-Verbindung zu Ihrem VPS her und führen Sie vor der Installation ein vollständiges System-Update durch:
sudo apt update && sudo apt upgrade -y
Dadurch stellst du sicher, dass du über die neuesten Sicherheitspatches verfügst und alle Systembibliotheken auf dem aktuellen Stand sind, bevor du Docker und andere Software installierst.
Starten Sie den Server neu, falls ein Kernel-Update durchgeführt wurde:
sudo reboot
Nachdem Sie sich erneut per SSH verbunden haben, erstellen Sie einen dedizierten Systembenutzer für die Ausführung von n8n. Das Ausführen von Diensten als root stellt ein Sicherheitsrisiko dar:
sudo adduser n8nuser
sudo usermod -aG sudo n8nuser
su - n8nuser
Schritt 2: Docker und Docker Compose installieren
Die von n8n offiziell empfohlene Installationsmethode ist Docker. Docker isoliert n8n und seine Abhängigkeiten vom Rest Ihres Systems, wodurch Updates und Rollbacks unkompliziert sind.
Installiere Docker mithilfe des offiziellen Skripts:
curl -fsSL https://get.docker.com | sudo sh
In der Docker-Dokumentation wird darauf hingewiesen, dass das Komfort-Skript für Produktionsumgebungen nicht empfohlen wird, da es die neueste Version installiert, ohne dass Sie eine Version auswählen können. Wenn Sie Docker-Versionen festlegen möchten, verwenden Sie stattdessen die apt-Repository-Methode aus der Ubuntu-Installationsanleitung von Docker (docs.docker.com/engine/install/ubuntu/).
Füge deinen Benutzer zur Docker-Gruppe hinzu, damit du Docker-Befehle ohne `sudo` ausführen kannst:
sudo usermod -aG docker $USER
newgrp docker
Überprüfen Sie, ob Docker ordnungsgemäß läuft:
docker --version
docker compose version
Beide Befehle sollten ohne Fehler Versionsangaben ausgeben. Falls Docker Compose nicht gefunden wird, installieren Sie es manuell:
sudo apt install docker-compose-plugin -y
Schritt 3: PostgreSQL für den Produktivbetrieb einrichten
Standardmäßig verwendet n8n SQLite als Datenbank. SQLite eignet sich gut für den privaten Gebrauch und einfache Workflows, kann jedoch gleichzeitige Schreibvorgänge nur schlecht bewältigen, was sich in Verlangsamungen und „Datenbank ist gesperrt“-Fehlern äußert, sobald viele Workflows gleichzeitig ausgeführt werden. Für eine Produktionsumgebung ist PostgreSQL die richtige Wahl.
Die All-in-One-Plattform für effektives SEO
Hinter jedem erfolgreichen Unternehmen steht eine starke SEO-Kampagne. Aber bei den zahllosen Optimierungstools und -techniken, die zur Auswahl stehen, kann es schwierig sein, zu wissen, wo man anfangen soll. Nun, keine Angst mehr, denn ich habe genau das Richtige, um zu helfen. Ich präsentiere die Ranktracker All-in-One-Plattform für effektives SEO
Wir haben endlich die Registrierung zu Ranktracker absolut kostenlos geöffnet!
Ein kostenloses Konto erstellenOder melden Sie sich mit Ihren Anmeldedaten an
Führen Sie PostgreSQL innerhalb von Docker zusammen mit n8n aus:
mkdir ~/n8n && cd ~/n8n
Erstellen Sie eine Umgebungsdatei, um Ihre Geheimnisse sicher zu speichern. Schreiben Sie Passwörter niemals fest in Ihre Compose-Datei:
nano ~/n8n/.env
Füge Folgendes hinzu und ersetze die Platzhalterwerte durch sichere, eindeutige Passwörter:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=dein_starkes_Datenbankpasswort_hier
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=deine_zufällige_32-Zeichen-Zeichenkette_hier
Generieren Sie einen sicheren Verschlüsselungsschlüssel mit:
openssl rand -hex 16
Verwende die Ausgabe als deinen N8N_ENCRYPTION_KEY. Dieser Schlüssel verschlüsselt die in n8n gespeicherten Anmeldedaten – wenn du ihn verlierst, sind alle gespeicherten Anmeldedaten unwiederherstellbar.
Schritt 4: Erstellen Sie die n8n-Docker-Compose-Datei
Erstellen Sie die Datei „docker-compose.yml“ in Ihrem n8n-Verzeichnis:
nano ~/n8n/docker-compose.yml
Fügen Sie die folgende Konfiguration ein:
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
Wiederholungsversuche: 10
n8n:
Image: docker.n8n.io/n8nio/n8n
Neustart: immer
Ports:
- "127.0.0.1:5678:5678"
Umgebung:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Europe/London
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- EXECUTIONS_MODE=regular
- N8N_LOG_LEVEL=info
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
n8n_data:
Hinweise zur Konfiguration:
- Die Portbindung 127.0.0.1:5678:5678 stellt sicher, dass n8n nur lokal erreichbar ist. Nginx übernimmt den gesamten externen Datenverkehr – der Port 5678 darf niemals direkt ins Internet freigegeben werden.
- „depends_on“ mit der Bedingung „service_healthy“ stellt sicher, dass n8n wartet, bis PostgreSQL vollständig bereit ist, bevor es gestartet wird. Ohne diese Einstellung schlägt n8n beim ersten Start fehl, wenn die Datenbank noch keine Verbindungen akzeptiert.
- N8N_LOG_LEVEL=info liefert Ihnen nützliche Betriebsprotokolle, ohne den Festplattenspeicher so zu überfluten, wie es bei „debug“ der Fall wäre.
Schritt 5: Nginx installieren und konfigurieren
Nginx fungiert als Reverse-Proxy und leitet den HTTPS-Datenverkehr vom Port 443 an Ihren N8N-Container auf Port 5678 weiter. Außerdem übernimmt es die SSL-Terminierung, sodass N8N selbst keine Zertifikate verwalten muss.
sudo apt install nginx -y
Entfernen Sie die Standard-Site und erstellen Sie einen neuen Serverblock für n8n:
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/n8n
Fügen Sie Folgendes ein:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name n8n.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
chunked_transfer_encoding on;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 90s;
client_max_body_size 50m;
}
}
Der Map-Block am Anfang verarbeitet die WebSocket-Upgrade-Header korrekt. n8n nutzt WebSockets für Echtzeit-Aktualisierungen im Editor, daher ist diese Konfiguration wichtig – ohne sie funktioniert der visuelle Editor nicht ordnungsgemäß.
Die Anweisung `client_max_body_size 50m` ermöglicht es Workflows, große Webhook-Nutzdaten zu empfangen. Die Standardgrenze von Nginx liegt bei 1 MB, was für Workflows, die Datei-Uploads oder große JSON-Antworten verarbeiten, zu gering ist.
Aktivieren Sie die Konfiguration und testen Sie sie:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Schritt 6: SSL-Zertifikat mit Let’s Encrypt ausstellen
Installieren Sie Certbot und das Nginx-Plugin:
sudo apt install certbot python3-certbot-nginx -y
Beantragen Sie ein Zertifikat für Ihre Domain:
sudo certbot --nginx -d n8n.yourdomain.com
Folgen Sie den Anweisungen. Wenn Sie gefragt werden, ob der HTTP-Verkehr auf HTTPS umgeleitet werden soll, wählen Sie „Ja“ (Option 2). Certbot aktualisiert automatisch Ihre Nginx-Konfiguration, um diese Umleitung zu ermöglichen, und installiert die vollständige Zertifikatskette.
Überprüfen Sie, ob die automatische Verlängerung korrekt konfiguriert ist:
sudo certbot renew --dry-run
Certbot installiert einen systemd-Timer, der Zertifikate alle 12 Stunden automatisch erneuert. Zertifikate werden erneuert, wenn ihre Gültigkeit in weniger als 30 Tagen abläuft. Eine manuelle Erneuerung sollte niemals erforderlich sein.
Schritt 7: Starte n8n
Kehren Sie in Ihr n8n-Verzeichnis zurück und starten Sie alle Dienste:
cd ~/n8n
docker compose up -d
Docker lädt die PostgreSQL- und n8n-Images herunter, erstellt die Volumes, startet zuerst PostgreSQL, wartet, bis der Zustandscheck erfolgreich abgeschlossen ist, und startet dann n8n. Dieser Vorgang dauert beim ersten Durchlauf 1–3 Minuten.
Überprüfen Sie, ob beide Container laufen:
docker compose ps
Sie sollten sowohl „postgres“ als auch „n8n“ mit dem Status „Up“ in der Liste sehen. Wenn bei n8n „Restarting“ angezeigt wird, überprüfen Sie die Protokolle:
docker compose logs n8n --tail=50
Sobald beide Container einwandfrei funktionieren, öffnen Sie Ihren Browser und rufen Sie https://n8n.yourdomain.com auf. Sie werden aufgefordert, ein Eigentümerkonto mit einer E-Mail-Adresse und einem Passwort anzulegen. Dieses Konto verfügt über volle Administratorrechte für Ihre n8n-Instanz.
Schritt 8: Konfigurieren Sie n8n so, dass es beim Systemstart automatisch gestartet wird
Die Anweisung „restart: always“ in Ihrer `docker-compose.yml` stellt sicher, dass alle Container bei einem Absturz oder einem Neustart des Servers automatisch neu gestartet werden.
Überprüfen Sie dies, indem Sie Ihren Server neu starten:
sudo reboot
Nachdem du dich erneut per SSH verbunden hast, überprüfe, ob n8n automatisch wieder gestartet wurde:
docker compose -f ~/n8n/docker-compose.yml ps
Beide Container sollten ohne manuelles Eingreifen als „running“ angezeigt werden.
Schritt 9: Automatische Backups einrichten
Ihre n8n-Daten – Workflows, Anmeldedaten und Ausführungsverlauf – befinden sich an zwei Orten: in der PostgreSQL-Datenbank und im Docker-Volume „n8n_data“ (in dem Verschlüsselungsschlüssel und einige Konfigurationsdaten gespeichert sind). Sichern Sie beide regelmäßig.
Erstellen Sie ein Backup-Skript:
nano ~/n8n/backup.sh
Fügen Sie Folgendes ein:
#!/bin/bash
BACKUP_DIR="/home/n8nuser/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
LOG_FILE="$BACKUP_DIR/backup.log"
# Stelle zunächst sicher, dass das Sicherungsverzeichnis existiert
mkdir -p "$BACKUP_DIR"
# PostgreSQL sichern
DUMP_FILE="$BACKUP_DIR/n8n_db_$DATE.sql"
docker compose -f /home/n8nuser/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n > "$DUMP_FILE"
# Überprüfen, ob der Dump erfolgreich war und nicht leer ist
if [ $? -ne 0 ] || [ ! -s "$DUMP_FILE" ]; then
echo "FEHLER: Datenbank-Backup am $DATE fehlgeschlagen" >> "$LOG_FILE"
rm -f "$DUMP_FILE"
exit 1
fi
# Den Verschlüsselungsschlüssel und die Umgebungsvariablen sichern
cp /home/n8nuser/n8n/.env "$BACKUP_DIR/n8n_env_$DATE.bak"
# Das n8n_data-Volume sichern (Instanzkonfiguration und installierte Community-Knoten)
docker run --rm -v n8n_n8n_data:/data -v "$BACKUP_DIR":/backup alpine \
tar czf /backup/n8n_data_$DATE.tar.gz -C /data .
# Datenbank-Dump komprimieren
gzip "$DUMP_FILE"
# Nur die Backups der letzten 7 Tage behalten
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.bak" -mtime +7 -delete
find "$BACKUP_DIR" -name "n8n_data_*.tar.gz" -mtime +7 -delete
echo "Sicherung abgeschlossen: n8n_db_$DATE.sql.gz" >> "$LOG_FILE"
Der Volume-Name „n8n_n8n_data“ ergibt sich daraus, dass Docker Compose dem Volume den Namen des Projektordners (n8n) voranstellt. Überprüfen Sie Ihren Namen mit dem Befehl „docker volume ls“.
Machen Sie das Skript ausführbar und planen Sie es mit cron ein:
chmod +x ~/n8n/backup.sh
crontab -e
Füge diese Zeile hinzu, um die Sicherung täglich um 2 Uhr morgens auszuführen:
0 2 * * * /home/n8nuser/n8n/backup.sh >> /home/n8nuser/backups/backup.log 2>&1
Für eine externe Redundanz sollten Sie in Erwägung ziehen, Ihr Backup-Verzeichnis mithilfe von `rclone` oder `aws s3 sync` mit einem S3-kompatiblen Objektspeicheranbieter zu synchronisieren.
Schritt 10: Grundlegende Sicherheitsmaßnahmen aktivieren
Richten Sie eine Firewall ein
Installieren Sie UFW und lassen Sie nur die Ports zu, die Ihr Server benötigt:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Überprüfen Sie, ob die Regeln aktiv sind:
sudo ufw status verbose
Port 22 (SSH), 80 (HTTP) und 443 (HTTPS) sollten als zugelassen angezeigt werden. Ein Hinweis: Docker schreibt eigene Firewall-Regeln und umgeht UFW bei veröffentlichten Container-Ports. Port 5678 bleibt privat, weil die Compose-Datei ihn an 127.0.0.1 bindet – nicht wegen UFW. Ändern Sie diese Bindung daher niemals auf 0.0.0.0.
Deaktiviere die Passwortauthentifizierung für SSH
Wenn du SSH-Schlüssel verwendest (was du tun solltest), deaktiviere die passwortbasierte SSH-Anmeldung vollständig. Stelle zunächst sicher, dass sich das Konto „n8nuser“ mit deinem Schlüssel anmelden kann. Führe auf deinem lokalen Rechner folgenden Befehl aus:
ssh-copy-id n8nuser@deine_Server-IP
Bearbeite anschließend die SSH-Serverkonfiguration:
sudo nano /etc/ssh/sshd_config
Legen Sie die folgenden Werte fest:
PasswordAuthentication no
PermitRootLogin no
sudo systemctl restart ssh
Bei vielen Ubuntu-Cloud-Images legt eine Datei in /etc/ssh/sshd_config.d/ (häufig 50-cloud-init.conf) „PasswordAuthentication yes“ fest, und diese Einstellung hat Vorrang, da sshd den ersten Wert verwendet, den es liest. Überprüfen Sie, welche Einstellung tatsächlich wirksam ist:
sudo sshd -T | grep -i passwordauthentication
Es sollte „passwordauthentication no“ ausgegeben werden. Ist dies nicht der Fall, ändern Sie den Wert in der Übersteuerungsdatei und starten Sie SSH erneut.
Schließe deine aktuelle SSH-Sitzung erst, wenn du überprüft hast, dass die schlüsselbasierte Anmeldung in einem neuen Terminalfenster funktioniert.
Ratenbegrenzung für die n8n-Anmeldeseite
Fügen Sie eine Ratenbegrenzung hinzu, um Brute-Force-Angriffe auf den n8n-Anmelde-Endpunkt zu verlangsamen.
Die All-in-One-Plattform für effektives SEO
Hinter jedem erfolgreichen Unternehmen steht eine starke SEO-Kampagne. Aber bei den zahllosen Optimierungstools und -techniken, die zur Auswahl stehen, kann es schwierig sein, zu wissen, wo man anfangen soll. Nun, keine Angst mehr, denn ich habe genau das Richtige, um zu helfen. Ich präsentiere die Ranktracker All-in-One-Plattform für effektives SEO
Wir haben endlich die Registrierung zu Ranktracker absolut kostenlos geöffnet!
Ein kostenloses Konto erstellenOder melden Sie sich mit Ihren Anmeldedaten an
**Wichtig: **Die Anweisung „limit_req_zone“ muss innerhalb des „http {}“-Blocks in Ihrer Nginx-Hauptkonfiguration stehen – nicht innerhalb des Server-Blocks. Öffnen Sie die Hauptkonfiguration:
sudo nano /etc/nginx/nginx.conf
Fügen Sie diese Zeile innerhalb des bestehenden http {}-Blocks ein:
http {
...
limit_req_zone $binary_remote_addr zone=n8n_login:10m rate=5r/m;
...
}
Fügen Sie anschließend in Ihrer n8n-Site-Konfiguration (/etc/nginx/sites-available/n8n) diesen `location`-Block innerhalb des `server`-Blocks hinzu, der auf Port 443 lauscht (Certbot hat ihn in Schritt 6 erstellt), direkt neben dem bestehenden `location /`. Nginx überträgt keine Proxy-Header aus `location /`, daher werden sie hier wiederholt:
location /rest/login {
limit_req zone=n8n_login burst=5 nodelay;
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Nginx neu laden, um die Änderungen zu übernehmen:
sudo nginx -t && sudo systemctl reload nginx
Dadurch wird jede IP-Adresse auf etwa 5 Anmeldeversuche pro Minute begrenzt, wobei eine geringe Spitzenbelastung zulässig ist.
Halten Sie n8n und PostgreSQL auf dem neuesten Stand
Regelmäßig die neuesten Images abrufen und neu starten:
cd ~/n8n
docker compose pull
docker compose up -d
Docker lädt die neuesten n8nio/n8n- und Postgres-Images herunter und startet nur die Container neu, für die eine neuere Version verfügbar ist.
Für den Produktiveinsatz sollten Sie erwägen, das n8n-Image an ein bestimmtes Versionstag zu binden (docker.n8n.io/n8nio/n8n:<version>, entnommen aus den Release-Notes von n8n) und Upgrades gezielt durchzuführen, damit bei einem routinemäßigen Pull niemals eine Hauptversion übersprungen wird, bevor Sie das Changelog gelesen haben.
Fehlerbehebung bei häufigen Problemen
Der n8n-Container startet immer wieder neu
Überprüfen Sie die Container-Protokolle unmittelbar nach Beginn der Neustartschleife:
docker compose logs n8n --tail=100
Häufige Ursachen:
- Fehler bei der Datenbankverbindung: Stelle mit `docker compose ps` sicher, dass PostgreSQL ordnungsgemäß läuft. Überprüfe, ob das `POSTGRES_PASSWORD` in deiner `.env`-Datei mit dem Wert übereinstimmt, mit dem die Datenbank initialisiert wurde.
- Verschlüsselungsschlüssel fehlt oder wurde geändert: Wenn N8N_ENCRYPTION_KEY nicht gesetzt ist oder nach dem ersten Lauf geändert wurde, kann n8n die gespeicherten Anmeldedaten nicht entschlüsseln und stürzt ab.
- Unzureichender Arbeitsspeicher: PostgreSQL und n8n können zusammen 1–1,5 GB RAM beanspruchen. Überprüfen Sie den verfügbaren Arbeitsspeicher mit `free -h`.
Webhooks funktionieren nicht
Für Webhooks muss n8n über das Internet auf Ihrer Domain erreichbar sein. Überprüfen Sie Folgendes:
- Der DNS-A-Eintrag Ihrer Domain verweist auf die IP-Adresse Ihres VPS: dig n8n.yourdomain.com
- Nginx läuft: `sudo systemctl status nginx`
- Port 443 ist offen: `sudo ufw status`
- Die Umgebungsvariable `WEBHOOK_URL` stimmt genau mit Ihrer öffentlichen Domain überein, einschließlich des abschließenden Schrägstrichs
Der n8n-Editor wird nicht richtig geladen
Wenn der visuelle Editor zwar geladen wird, aber eine leere Workflow-Arbeitsfläche anzeigt oder Echtzeit-Aktualisierungen nicht mehr funktionieren, ist die WebSocket-Verbindung unterbrochen. Überprüfen Sie, ob der Block `$http_upgrade` in Ihrer Nginx-Konfiguration vorhanden ist und ob Sie in der Zeile `proxy_set_header Connection` die Variable `$connection_upgrade` verwenden – nicht die wörtliche Zeichenfolge „upgrade“.
SSL-Zertifikatsfehler
Wenn Certbot mit einem Fehler bei der Domain-Validierung scheitert, überprüfen Sie, ob Port 80 über das Internet erreichbar ist:
curl -I http://n8n.yourdomain.com
Wenn die Anfrage zeitlich abläuft, blockiert möglicherweise die Firewall Ihres VPS-Anbieters Port 80. Überprüfen Sie zusätzlich zu UFW die Firewall-Regeln in der Cloud-Konsole.
Fazit
Das Selbsthosting von n8n auf einem Linux-VPS bietet Ihnen eine produktionsreife Plattform zur Workflow-Automatisierung ohne Ausführungsbeschränkungen, mit vollständigem Datenschutz und der Flexibilität, jede benötigte Integration auszuführen. Die in dieser Anleitung beschriebene Konfiguration – Docker, PostgreSQL, Nginx-Reverse-Proxy, Let’s Encrypt SSL, automatisierte Backups und Sicherheitshärtung – entspricht dem in Produktionsumgebungen verwendeten Stack und bietet Ihnen eine stabile, sichere Grundlage, auf der Sie aufbauen können.
Im Gegensatz zu einer minimalen Installation per Docker-Befehl ist diese Konfiguration so ausgelegt, dass sie Server-Neustarts übersteht, gleichzeitige Workflow-Ausführungen bewältigt und sich bei Ausfällen reibungslos wiederherstellt. Ihre Anmeldedaten sind verschlüsselt, Ihre Daten werden nächtlich gesichert und Ihr Anmelde-Endpunkt ist gegen Brute-Force-Angriffe durch eine Ratenbegrenzung geschützt.
Sobald Ihre Instanz läuft, entdecken Sie die integrierten Knoten von n8n für Datenbanken, APIs, Webhooks und KI-Integrationen, um sofort mit der Automatisierung Ihrer Workflows zu beginnen. Das selbst gehostete Community-Forum unter community.n8n.io ist zudem eine hervorragende Quelle für Workflow-Ideen, Fehlerbehebung bei Knoten und Tipps zur Bereitstellung.

