Das NordBastion-Eisbär-Maskottchen sitzt auf einer aus Stein gehauenen Bank in einem dunklen nordischen Tresorraum, einen Laptop auf dem Schoß, über ihm schwebt ein großer cyanfarbener holografischer Automatisierungs-Workflow — sechs abgerundete Nodes, verbunden durch leuchtende geschwungene Drähte —, das cyanfarbene N-Schild lehnt an der Bank, daneben ein Serverrack
Anleitung · Selbst hosten·13 Min. Lesezeit · 30 Min. Praxis

n8n selbst auf einem VPS hosten.
Ihre Automatisierungs-Engine, Ihre Credentials, Ihr Metall.

Sechs Schritte von einem nackten nordischen VPS zu einem TLS-terminierten n8n auf Ihrer eigenen Domain — Docker Compose, Caddy, PostgreSQL, Webhooks, die tatsächlich feuern. Ausführungen begrenzt durch Ihre CPU, nicht durch eine Plan-Stufe, auf einer Box, die $3.90 im Monat kostet. Getestet auf Debian 12 mit n8n 2.x.

Die sechs Schritte
  1. 01

    Bereitstellen

    VPS + ein A-Eintrag

  2. 02

    Installieren

    get.docker.com

  3. 03

    Compose

    n8n + Caddy + Postgres

  4. 04

    Erster Boot

    Owner-Konto + 2FA

  5. 05

    Webhooks

    WEBHOOK_URL

  6. 06

    Absichern

    Bereinigen, stummschalten, sichern

Bevor Sie beginnen · Lizenz und Kosten

Was Sie tatsächlich installieren. Und was die Lizenz Ihnen damit zu tun erlaubt.

n8n ist eine Workflow-Automatisierungs-Engine: eine visuelle Canvas, auf der Sie einen Trigger — einen Webhook, einen Zeitplan, eine neue Zeile in einer Datenbank, eine Nachricht in einer Queue — mit einer Kette von Nodes verdrahten, die APIs aufrufen, Daten transformieren, anhand von Bedingungen verzweigen, beliebiges JavaScript oder Python ausführen und das Ergebnis an das Nächste weiterreichen. Mehrere Hundert Integrations-Nodes sind bereits eingebaut, dazu ein generischer HTTP-Request-Node, der alles andere abdeckt. Seit der 1.x-Reihe bringt es außerdem AI-Agent- und LLM-Nodes mit, weshalb ein großer Teil der Leute, die es 2026 installieren, Agenten bauen statt klassischer ETL-Verrohrung.

Der Teil, der wichtig ist, bevor Sie auch nur einen Befehl eintippen, ist die Lizenz, denn n8n ist nicht Open Source im Sinne der OSI, und der Unterschied ist nicht akademisch. Der Kern wird unter der Sustainable Use License ausgeliefert: eine nicht-exklusive, lizenzgebührenfreie, weltweite Gewährung, die Software für interne Geschäftszwecke und für persönliche oder nicht-kommerzielle Nutzung zu verwenden, zu kopieren, zu verändern und weiterzugeben. Was sie vorenthält, ist das Recht, anderen n8n oder ein Derivat davon in Rechnung zu stellen — das ist die Klausel, die den Aufbau eines kostenpflichtigen „Managed n8n"-Produkts darauf ausschließt. Getrennt davon ist jede Datei, die .ee. im Namen oder .ee im Pfad trägt, vollständig aus dieser Lizenz ausgenommen und erfordert eine kostenpflichtige n8n Enterprise License.

Klar gesagt: n8n auf einem VPS zu betreiben, um die eigene Firma zu automatisieren, die Arbeit für die eigenen Kunden, die man als Dienstleistung erbringt, oder das eigene Privatleben, liegt innerhalb der kostenlosen Gewährung und lag es schon immer. n8n-als-Hosting-Produkt zu verkaufen, nicht. Fast jede „Ist n8n wirklich kostenlos?"-Diskussion im Internet besteht aus zwei Leuten, die genau über diese Grenze hinweg aneinander vorbeireden.

Die Kostenseite. n8n Cloud wird pro Ausführung abgerechnet: Der Starter-Plan kostet €20 im Monat, jährlich abgerechnet, für 2 500 Ausführungen, Pro kostet €50 im Monat für 10 000, Business kostet €667 im Monat für 40 000. Selbst gehostet ist die Anzahl der Ausführungen überhaupt kein Rechnungsposten — sie ist nur durch die CPU- und Speicherkapazität der Box begrenzt. Ein Workflow, der alle fünf Minuten eine API pollt, verbraucht allein schon 8 640 Ausführungen im Monat; auf Cloud zwingt dieser eine Workflow bereits die Pro-Stufe, und auf einem $3.90-VPS ist er ein Rundungsfehler gegenüber der Leerlauf-CPU.

Option Monatlich Ausführungen inklusive Wer betreibt es
n8n Cloud · Starter€202 500n8n GmbH
n8n Cloud · Pro€5010 000n8n GmbH
n8n Cloud · Business€66740 000n8n GmbH
Self-Hosted · Sentinel VPS$3.90CPU-gebunden, nicht limitiertSie

Cloud-Preise wie auf n8n.io im August 2026 veröffentlicht, jährlich abgerechnet; monatliche Abrechnung kostet mehr. Der Tausch ist nicht nur eine Frage des Geldes — Self-Hosting verlagert Upgrades, Backups, TLS-Erneuerung und Uptime auf Ihre Seite der Grenze.

Bevor Sie beginnen · Dimensionierung

Die Box dimensionieren. Vier Gigabyte sind die Untergrenze, die Festplatte ist der unterschätzte Faktor.

n8ns eigene Docker-Compose-Dokumentation gibt 2 vCPU und 4 GB RAM als Minimum an. Das ist keine Marketing-Zahl: darunter kämpfen das Editor-Frontend und ein mäßig verzweigter Workflow um den Speicher, und der erste große JSON-Payload wird den Container mit einem Out-of-Memory-Kill lahmlegen.

Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/Monat. Der richtige Standard. Betreibt n8n, PostgreSQL und Caddy zusammen mit Spielraum für eine persönliche Instanz oder eine Instanz für ein kleines Team mit ein paar Hundert Ausführungen am Tag. Der Leerlaufspeicher liegt bei rund 700 MB über die drei Container hinweg.

Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/Monat. Die Stufe darüber, wenn Sie Queue Mode mit Redis und ein oder zwei Worker-Containern hinzufügen, wenn Workflows routinemäßig mehrere Megabyte große Payloads im Speicher halten, oder wenn Sie einen komfortablen Spielraum für KI-Agenten-Workflows wollen, die sich in mehrere parallele Zweige auffächern.

Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/Monat. Eine Team-Instanz mit Tausenden Ausführungen pro Tag und binärlastiger Arbeit — PDF-Erstellung, Bildverarbeitung, Audio-Transkription. Dedizierte Kerne sind hier entscheidend, weil diese Workloads CPU-gebunden statt API-gebunden sind.

Die Festplatte ist der Teil, den man vergisst. n8n speichert den vollständigen Input und Output jedes Nodes jeder Ausführung. Ein geschwätziger Workflow, der jede Minute läuft, schreibt Hunderte Megabyte pro Woche. Die Standardwerte bereinigen zwar — EXECUTIONS_DATA_PRUNE ist true, EXECUTIONS_DATA_MAX_AGE ist 336 Stunden (vierzehn Tage), und EXECUTIONS_DATA_PRUNE_MAX_COUNT ist 10 000 —, aber vierzehn Tage einer stark ausgelasteten Instanz sind immer noch eine Menge NVMe. Schritt 06 verschärft das.

Schritt 01 · Bereitstellen

Ein nordischer VPS und ein DNS-Eintrag. In dieser Reihenfolge.

Im Panel: Order → VPS → Sentinel, Image Debian 12. Für die Kontoeröffnung ist keine E-Mail-Adresse erforderlich, an keiner Stelle wird ein Ausweisdokument verlangt, und die Rechnung wird in Monero, Bitcoin, Lightning oder einem der anderen unterstützten Assets beglichen. Wählen Sie den Bastion nach der Latenz zu den Diensten, die Sie automatisieren, statt zu sich selbst — ein Automatisierungsserver spricht weit mehr mit APIs als mit Ihnen.

Legen Sie dann den DNS-Eintrag an, bevor Sie den Server anfassen: einen A-Eintrag für n8n.example.com, der auf die VPS-IPv4 zeigt, und einen AAAA-Eintrag, falls Sie IPv6 nutzen. Das muss zuerst geschehen, weil Caddy in dem Moment, in dem der Stack startet, bei Let's Encrypt ein Zertifikat anfordert, und eine Zertifikatsanfrage für einen Namen, der nicht auflöst, schlägt fehl — zieht sich dann zurück, und Sie verbringen zwanzig Minuten damit, sich zu fragen, warum die Seite nicht erreichbar ist.

Geben Sie dem DNS eine Minute zum Propagieren und bestätigen Sie es von Ihrer eigenen Maschine aus, bevor Sie fortfahren:

dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else

Bevor irgendetwas auf einem öffentlichen Port lauscht, arbeiten Sie die Härtungs-Checkliste für die erste Stunde ab — SSH nur mit Key, eine Firewall, die ausschließlich 22, 80 und 443 zulässt, und unbeaufsichtigte Sicherheitsupdates. Ein Automatisierungsserver ist ein Credential-Tresor; er verdient die volle Stunde.

Schritt 02 · Installieren

Docker, und sonst nichts. Ein Befehl.

Verbinden Sie sich per SSH und installieren Sie die Docker Engine mit dem Compose-v2-Plugin:

apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version

Das Convenience-Script installiert Engine, CLI, containerd und das Compose-Plugin aus Dockers eigenem Repository. Die letzte Zeile sollte Docker Compose version v2 oder höher ausgeben; wenn stattdessen „docker: 'compose' is not a docker command" erscheint, haben Sie das ältere docker.io-Paket der Distribution installiert und sollten es zuerst entfernen.

Es gibt einen Einzeiler-Installer für n8n, der das alles kapselt, und er funktioniert. Diese Anleitung schreibt die Compose-Datei stattdessen von Hand, weil alles, was Sie später ändern müssen werden — der Verschlüsselungsschlüssel, die Datenbank, die Webhook-URL, die Aufbewahrungsrichtlinie, die Anzahl der Worker — in dieser Datei lebt, und ein Stack, den Sie nicht lesen können, ist ein Stack, den Sie um 3 Uhr morgens nicht reparieren können.

Schritt 03 · Compose

Drei Dateien in /opt/n8n. n8n, PostgreSQL, Caddy.

Legen Sie zuerst das Verzeichnis an und generieren Sie die beiden Secrets. Generieren Sie sie jetzt, in dieser Reihenfolge, und fügen Sie sie dabei in die .env ein — insbesondere der Verschlüsselungsschlüssel muss vor dem ersten Boot von n8n existieren, nicht danach.

mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32   # → N8N_ENCRYPTION_KEY
openssl rand -hex 24   # → POSTGRES_PASSWORD

/opt/n8n/.env

DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm

N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here

Sperren Sie die Datei sofort ab — sie enthält den Schlüssel zu jedem Credential, das die Instanz jemals speichern wird:

chmod 600 /opt/n8n/.env

/opt/n8n/docker-compose.yml

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${DOMAIN}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://${DOMAIN}
      - WEBHOOK_URL=https://${DOMAIN}/
      - N8N_PROXY_HOPS=1
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_PERSONALIZATION_ENABLED=false
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  pg_data:
  n8n_data:

/opt/n8n/Caddyfile

{$DOMAIN} {
    encode zstd gzip
    tls {$LETSENCRYPT_EMAIL}
    reverse_proxy n8n:5678
}

Zwei Designentscheidungen, die es wert sind, benannt zu werden. Erstens veröffentlicht n8n keinen Port. Nur Caddy bindet 80 und 443; n8n lauscht auf 5678 innerhalb des Compose-Netzwerks, wo nichts außerhalb des Hosts es erreichen kann. Eine überraschende Zahl selbst gehosteter n8n-Instanzen hängt ohne vorgeschaltetes TLS öffentlich am Port 5678 im Internet, und Suchmaschinen für exponierte Dienste indexieren sie. Zweitens bleibt das n8n-Datenvolume gemountet, obwohl PostgreSQL die Workflows jetzt hält — dieses Verzeichnis trägt weiterhin die Instanzeinstellungen, die Log-Dateien und die Source-Control-Assets.

Starten Sie den Stack:

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy   # watch the certificate being issued
Schritt 04 · Erster Boot

Das Owner-Konto, und der Schlüssel, den Sie nicht verlieren dürfen. Diesen Abschnitt zweimal lesen.

Öffnen Sie https://n8n.example.com. Der erste Bildschirm ist die Einrichtung des Owner-Kontos — E-Mail, Passwort, Name. Es gibt keine HTTP-Basic-Auth-Umgebungsvariable mehr zu konfigurieren; die Benutzerverwaltung ist seit der 1.x-Reihe fest in n8n eingebaut, und das Konto, das Sie hier erstellen, ist der Instanzinhaber. Verwenden Sie ein Passwort aus Ihrem Passwort-Manager, gehen Sie dann direkt zu Settings → Personal → Two-factor authentication und schalten Sie es ein. Dieser Login ist die Haustür zu jedem API-Key, den Sie jemals in einen Node einfügen werden.

Der eine irreversible Fehler

n8n verschlüsselt jedes gespeicherte Credential mit N8N_ENCRYPTION_KEY. Wenn Sie ihn nicht setzen, generiert n8n beim ersten Boot einen und schreibt ihn in das Datenvolume. Legen Sie dieses Volume neu an — ein docker compose down -v, eine Migration auf einen neuen Server, eine misslungene Wiederherstellung — generiert die neue Instanz einen anderen Schlüssel, jedes Credential in der Datenbank wird unentschlüsselbar, und es gibt überhaupt keinen Wiederherstellungsweg. Sie geben jeden API-Key, jedes OAuth-Token und jedes Passwort von Hand neu ein. Setzen Sie den Schlüssel explizit, wie diese Anleitung es tut, und bewahren Sie eine Kopie abseits des Servers auf.

Der richtige Aufbewahrungsort für diese Kopie ist ein Passwort-Manager, den Sie ebenfalls selbst kontrollieren — die Anleitung zum selbst gehosteten Vaultwarden deckt einen davon ab, und der bewusste Punkt ist, dass er nicht auf derselben Box leben sollte wie das, was er entsperrt.

Überprüfen Sie, dass die Datenbank tatsächlich PostgreSQL ist und nicht der SQLite-Fallback — wenn die DB_-Variablen einen Tippfehler enthalten, startet n8n stillschweigend mit SQLite, und Sie merken es erst drei Monate später:

docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
Schritt 05 · Webhooks

Die Hälfte, die still und leise nicht funktioniert. Webhooks hinter einem Proxy.

Ein n8n, das bootet, den Editor anzeigt und einen manuellen Test ausführt, ist noch kein funktionierendes n8n. Die Hälfte, die still und leise kaputtgeht, sind eingehende Webhooks, und zwar auf eine Weise, die so aussieht, als läge der Fehler beim Drittanbieter-Dienst.

WEBHOOK_URL. Ohne sie baut n8n Webhook-URLs aus N8N_HOST und N8N_PORT und liefert Ihnen etwas wie http://localhost:5678/webhook/abc — das Sie dann in Stripe oder GitHub einfügen, wo es niemals erreicht werden kann. Die Compose-Datei oben setzt WEBHOOK_URL auf die öffentliche HTTPS-Root, die der Editor anzeigen wird und die die Außenwelt tatsächlich aufrufen kann.

N8N_EDITOR_BASE_URL. Die öffentliche URL, die n8n für Links in den E-Mails verwendet, die es versendet — Passwort-Resets, Nutzereinladungen. Ist sie hier falsch, zeigt ein Einladungslink auf localhost, was eher ein Support-Ticket von einem Kollegen nach sich zieht als eine kaputte Integration.

N8N_PROXY_HOPS. n8n liest die Client-IP aus X-Forwarded-For und vertraut dabei nur so vielen Hops, wie diese Zahl angibt. Mit einem Reverse-Proxy davor — dem Caddy in diesem Stack — ist der Wert 1. Stellen Sie Cloudflare vor Caddy, wird er zu 2. Belassen Sie ihn beim Standardwert 0, scheint jede Anfrage vom Proxy selbst zu kommen, was Rate-Limits und jede IP-basierte Logik in Ihren Workflows still und leise zerstört.

N8N_SECURE_COOKIE. Es ist standardmäßig true, was bedeutet, dass das Session-Cookie nur über HTTPS gesendet wird. Das ist die richtige Einstellung, und dieser Stack erfüllt sie. Das lohnt sich zu wissen, weil es das klassische Symptom eines ersten Versuchs über einfaches http erklärt: Das Login-Formular akzeptiert das Passwort und schickt Sie dann wieder zurück zum Login-Formular, endlos. Die Lösung ist TLS, nicht das Abschalten des Flags.

Testen Sie es richtig. Erstellen Sie einen Workflow mit einem Webhook-Node, aktivieren Sie den Workflow, kopieren Sie die Production-URL, und rufen Sie sie dann von einer Maschine auf, die nicht der Server ist:

curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor

Die Unterscheidung, über die jeder einmal stolpert: Die Test-URL lauscht nur, solange Sie den Editor geöffnet und „Listen for test event" scharf geschaltet haben. Die Production-URL existiert nur, wenn der Workflow auf Active geschaltet ist. Ein Webhook, der im Editor funktioniert und in Production ein 404 liefert, ist so gut wie immer ein inaktiver Workflow.

Schritt 06 · Härten

Bereinigen, stummschalten, sichern. Die drei, die entscheiden, ob es ein Jahr übersteht.

Aufbewahrung. Die Standardeinstellungen behalten vierzehn Tage oder 10 000 Ausführungen, je nachdem, was zuerst eintritt, mit vollständigen Input- und Output-Daten für jeden Node. Auf einer kleinen NVMe mit einem stark beschäftigten Schedule-Trigger ist genau das der Grund, warum die Festplatte volläuft. Fügen Sie Folgendes zum n8n-Environment-Block hinzu und starten Sie neu:

- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168          # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise

EXECUTIONS_DATA_SAVE_ON_SUCCESS=none ist der mit Abstand größte Gewinn bei einer hochfrequenten Instanz: Es stoppt das Schreiben der Payloads erfolgreicher Läufe, während jeder fehlgeschlagene Lauf weiterhin vollständig gespeichert wird, damit Sie ihn debuggen können. Lassen Sie es auf „all", solange Sie den Workflow noch bauen, und schalten Sie es um, sobald der Workflow langweilig geworden ist.

Stille. Die Compose-Datei schaltet bereits die Diagnose, die Versionsbenachrichtigungen und die Personalisierungs-Umfrage ab. Der verbleibende ausgehende Aufruf ist die Template-Galerie, die von api.n8n.io lädt; setzen Sie N8N_TEMPLATES_ENABLED=false, wenn Sie überhaupt keinen Drittanbieter-Aufruf wollen. Wenn Sie die Versionsbenachrichtigungen deaktivieren, tragen Sie sich eine monatliche Erinnerung in den Kalender ein, um die Release Notes zu lesen — eine selbst gehostete Instanz, die niemand aktualisiert, ist ein schlechteres Ergebnis als eine, die nach Versionen fragt.

Der Code-Node. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, bereits in der Datei enthalten, verhindert, dass Expressions und Code-Nodes Prozessumgebungsvariablen lesen — was auf dieser Box das PostgreSQL-Passwort und den Verschlüsselungsschlüssel bedeutet. Wenn Sie die öffentliche REST-API nicht nutzen, fügen Sie N8N_PUBLIC_API_DISABLED=true hinzu und schließen Sie auch diese Angriffsfläche.

Backups — alle drei Teile oder keiner. Ein Backup allein der Datenbank ist ohne den Verschlüsselungsschlüssel wertlos, und der Schlüssel allein stellt nichts wieder her. Sichern Sie den PostgreSQL-Dump, das n8n-Datenvolume und die .env gemeinsam, und bewahren Sie mindestens eine Kopie außerhalb des Servers auf:

cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)

Der Volume-Name setzt sich aus dem Compose-Projektnamen plus dem Volume-Namen zusammen; wenn Ihr Verzeichnis nicht n8n heißt, führen Sie docker volume ls aus und verwenden Sie, was Sie sehen. Packen Sie die drei Zeilen in einen Cronjob, verschicken Sie die Archive an einen anderen Ort, und testen Sie einmal eine Wiederherstellung — ein ungetestetes Backup ist ein Glaube, kein Backup.

Updates. docker compose pull, gefolgt von docker compose up -d. Erstellen Sie zuerst einen Snapshot: n8n führt beim Start Datenbankmigrationen aus, und Migrationen sind nicht dafür ausgelegt, zurückgerollt zu werden. Bei einem Major-Versionssprung — etwa dem Sprung von 1.x auf 2.x — lesen Sie die Release Notes vor dem Pull statt danach, und erwägen Sie, einen expliziten Image-Tag statt :latest zu pinnen, damit ein unbeaufsichtigter Neustart Sie nie überraschend upgradet.

Weiterführend · Skalierung

Wenn ein Prozess nicht genug ist. Queue Mode, Redis und Worker.

Standardmäßig läuft n8n im Regular Mode: Derselbe Prozess, der den Editor bereitstellt und Webhooks empfängt, führt auch die Workflows aus. Das ist einfach und funktioniert korrekt — bis ein langer Workflow die anderen warten lässt. Das Symptom ist unverkennbar: Ausführungen bleiben minutenlang auf „running" stehen, der Editor wird träge, und ein Webhook, der in 200 ms antworten sollte, antwortet erst nach acht Sekunden.

Queue Mode teilt die Arbeit auf. Die Hauptinstanz behält den Editor, die Trigger und die Webhook-Endpunkte; sie schiebt Execution-IDs in Redis; separate Worker-Prozesse holen sie ab, laden den Workflow aus PostgreSQL, führen ihn aus und melden über Redis zurück. Aus dieser Architektur folgen drei Regeln, und alle drei beißen jeden, der sie überspringt: Jede Instanz muss dieselbe PostgreSQL-Datenbank teilen, jede Instanz muss denselben N8N_ENCRYPTION_KEY tragen, und SQLite wird überhaupt nicht unterstützt.

Die Ergänzungen zur Compose-Datei sind ein Redis-Dienst und ein Worker-Dienst, der dasselbe n8n-Image ist, nur mit dem worker-Befehl ausgeführt:

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
    volumes:
      - redis_data:/data

  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    command: worker --concurrency=5
    depends_on:
      - redis
      - postgres
    environment:
      # the SAME encryption key and the SAME database as the main instance
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}

Fügen Sie EXECUTIONS_MODE=queue und QUEUE_BULL_REDIS_HOST=redis auch beim Haupt-n8n-Dienst hinzu — beide Seiten müssen sich über den Modus einig sein. Zwei Optionen lohnt es sich, gleich am ersten Tag zu setzen: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, damit ein Klick auf „Test workflow" im Editor den Hauptprozess nicht blockiert, und N8N_GRACEFUL_SHUTDOWN_TIMEOUT, das standardmäßig 30 Sekunden beträgt und bestimmt, wie lange ein Worker bei einem Redeploy Zeit hat, seinen aktuellen Job zu beenden. Wenn Ihre Workflows routinemäßig länger als eine halbe Minute laufen, erhöhen Sie den Wert, sonst tötet jedes Deployment laufende Arbeit ab.

Fangen Sie nicht hier an. Queue Mode fügt zwei bewegliche Teile und eine Fehlerklasse hinzu, die es im Regular Mode schlicht nicht gibt. Bleiben Sie im Regular Mode, bis Sie sehen, dass die Queue wächst oder ein Workflow einen anderen blockiert, und fügen Sie dann einen einzelnen Worker auf derselben Box hinzu, bevor Sie eine zweite Box hinzufügen. Diese Abstufung — Sentinel im Regular Mode, Garrison mit einem Worker, Ravelin mit dreien — deckt alles ab, was kurz vor einem wirklich großen Deployment liegt.

Die Schicht unter der Anwendung

Was die Maschine tatsächlich enthält. Und warum das ändert, wer sie besitzen sollte.

Die meisten Self-Hosting-Anleitungen behandeln die Wahl des Hosts als Performance-Frage. Für eine Automatisierungs-Engine ist sie das nicht. Eine n8n-Instanz enthält zwei Dinge zusammen, die fast nichts anderes, was Sie selbst hosten, zusammen enthält: eine einzige verschlüsselte Tabelle mit den API-Keys, OAuth-Tokens und Mail-Passwörtern jedes Dienstes, den Sie automatisieren, und — direkt daneben — einen Graphen, der genau beschreibt, wie Ihre Organisation funktioniert. Welches CRM. Welcher Bankfeed. Welcher Lieferant. Welche Kunden welche E-Mail bekommen, bei welchem Trigger. Lesen Sie die Workflow-Liste eines Unternehmens, und Sie haben das Unternehmen gelesen.

Ebene eins — wer der Host glaubt, dass Sie sind. Die Anwendungsschicht ist hier wirklich gut: Credentials sind im Ruhezustand verschlüsselt, der Editor liegt hinter TLS und 2FA. Die Schicht, die leckt, ist die darunterliegende. Ein gehosteter Plan kennt Ihre Rechtsperson, Ihre Rechnungsadresse und Ihre Karte. Ein Hyperscaler kennt dasselbe und bewahrt es jahrelang auf. Das ist keine hypothetische Exposition; es ist der Verknüpfungsschlüssel zwischen „ein verschlüsselter Tresor existiert" und „er gehört diesem namentlich genannten Unternehmen". Eine Anmeldung ohne E-Mail und ohne Ausweisdokument, beglichen in Monero, entfernt den Verknüpfungsschlüssel statt des Tresors.

Ebene zwei — die Festplatte. Verschlüsselung im Ruhezustand hilft nur gegen jemanden, der den Schlüssel nicht ebenfalls besitzt, und bei einer Standardinstallation liegt der Schlüssel auf demselben Dateisystem wie die Datenbank. Halten Sie die .env auf Modus 600, bewahren Sie eine Kopie des Schlüssels abseits der Maschine auf, und bevorzugen Sie einen Anbieter, dessen Rechtsprechung ein Rechenzentrum nicht zu einem bequemen Ort für eine Zustellung macht — genau das ist das gesamte Argument der Anleitung zu nordischen Rechtsordnungen.

Ebene drei — die Exit-IP. Jeder HTTP-Request-Node geht von der VPS-Adresse aus, und diese Adresse trägt eine Reputation. Hyperscaler-Bereiche sind im Internet am aggressivsten ratenlimitiert und mit CAPTCHAs verriegelt, weil genau dort die Scraper leben; ein Workflow, der scrapt oder pollt, wird auf einer AWS- oder DigitalOcean-IP viel früher scheitern als auf einem ruhigeren nordischen Bereich. n8n respektiert außerdem die Standardvariablen HTTP_PROXY, HTTPS_PROXY, ALL_PROXY und NO_PROXY, sodass die Handvoll Workflows, die einen anderen Ausgang brauchen, über einen lokalen SOCKS-Proxy oder Tor geroutet werden kann, während alles andere direkt geht.

Noch eine Tür, neu in der 2.x-Reihe: n8n kann einen MCP-Server auf Instanzebene bereitstellen, damit ein KI-Agent Ihre Workflows als Tools aufrufen kann. Das ist wirklich nützlich, aber auch ein öffentlicher Endpunkt in Ihre Automatisierungsschicht, der dieselbe Behandlung verdient wie jeder andere — siehe die Anleitung zum Remote-MCP-Server für die Überlegungen zu TLS, OAuth und Exposure.

Feldnotizen · Sechs Fallen

Sechs Arten, wie es schiefgeht. In der Reihenfolge, in der Leute darüber stolpern.

Falle 01 · Irreversibel

Jedes Credential lässt sich plötzlich nicht mehr entschlüsseln

Das Datenvolume wurde neu angelegt, und n8n hat einen neuen Verschlüsselungsschlüssel generiert. Nichts stellt die alten Credentials wieder her. Setzen Sie N8N_ENCRYPTION_KEY immer explizit, und bewahren Sie eine Kopie abseits des Servers auf.

Falle 02 · Integration

Die Webhook-URL sagt localhost

WEBHOOK_URL ist nicht gesetzt, sodass n8n URLs aus N8N_HOST baut. Setzen Sie WEBHOOK_URL und N8N_EDITOR_BASE_URL auf die öffentliche HTTPS-Adresse und starten Sie den Container neu.

Falle 03 · Zugriff

Das Login-Formular dreht sich endlos im Kreis

Sie erreichen den Editor über einfaches http, und das sichere Session-Cookie wird verweigert. Schließen Sie das TLS-Setup ab, statt N8N_SECURE_COOKIE bei einer öffentlichen Instanz auf false zu setzen.

Falle 04 · Kapazität

Die Festplatte läuft nach zwei Monaten voll

Vierzehn Tage vollständiger Ausführungsdaten von einem minütlichen Trigger. Verschärfen Sie EXECUTIONS_DATA_MAX_AGE und PRUNE_MAX_COUNT, und speichern Sie erfolgreiche Läufe nicht mehr.

Falle 05 · Upgrade

Ein unbeaufsichtigter Neustart hat eine Major-Version gepullt

Der :latest-Tag plus Datenbankmigrationen, die sich nicht zurückrollen lassen. Pinnen Sie einen expliziten Tag, erstellen Sie vor jedem Pull einen Snapshot, und lesen Sie die Release Notes über Major-Versionen hinweg.

Falle 06 · Zeitplanung

Schedule-Trigger feuern zur falschen Stunde

GENERIC_TIMEZONE ist standardmäßig America/New_York, was selten das ist, was jemand will. Setzen Sie GENERIC_TIMEZONE und TZ auf dieselbe echte Zeitzone und starten Sie neu.

FAQ · n8n selbst hosten

Fragen, beantwortet.

Zehn Fragen, die vor, während und nach dem Umzug einer n8n-Instanz auf den eigenen Server aufkommen.

Ist Self-Hosting von n8n wirklich kostenlos?

Für Ihre eigenen Automatisierungen: ja. n8n wird unter der Sustainable Use License ausgeliefert: Sie dürfen es für interne Geschäftszwecke und für persönliche oder nicht-kommerzielle Nutzung kostenlos verwenden, kopieren, verändern und weitergeben. Was die Lizenz verbietet, ist, anderen n8n oder ein Derivat davon in Rechnung zu stellen — in der Praxis also der Weiterverkauf von „n8n-Hosting" als Produkt. Dateien mit .ee. im Dateinamen oder .ee im Verzeichnispfad sind aus dieser Lizenz herausgenommen und erfordern eine kostenpflichtige n8n Enterprise License. Kurz: Die eigene Firma auf einem gemieteten VPS zu automatisieren, liegt eindeutig innerhalb der kostenlosen Gewährung; darauf ein gehostetes n8n-Geschäft aufzubauen, nicht.

Wie viel VPS brauche ich, um n8n zu betreiben?

n8ns eigene Docker-Compose-Dokumentation nennt ein Minimum von 2 vCPU und 4 GB RAM. Das ist genau die Sentinel-Stufe ($3.90/Monat — 2 vCPU, 4 GB, 120 GB NVMe), die n8n plus PostgreSQL plus Caddy für eine persönliche Instanz oder eine Instanz für ein kleines Team komfortabel betreibt. Steigen Sie auf den Garrison (4 vCPU, 8 GB, $7.90/Monat) um, wenn Sie Queue-Mode-Worker hinzufügen oder Workflows betreiben, die große Payloads im Speicher halten, und auf den Ravelin (8 vCPU, 16 GB, $16.90/Monat) für eine Team-Instanz mit Tausenden Ausführungen am Tag mit Binärdaten — PDFs, Bilder, Audio.

SQLite oder PostgreSQL für n8n?

SQLite ist der Standard, und für eine einzelne Person mit einer Handvoll Workflows ist es wirklich in Ordnung. Wechseln Sie zu PostgreSQL, sobald Sie parallele Ausführungen haben, die Execution-History auf über ein paar Hunderttausend Zeilen wächst, oder Sie eine Skalierung planen — und beachten Sie, dass Queue Mode SQLite überhaupt nicht unterstützt. Eine spätere Migration bedeutet, Workflows und Credentials zu exportieren und in eine neue Instanz zu reimportieren, was ein Nachmittag wird, den Sie nicht genießen werden. Bei jeder Chance auf Wachstum starten Sie mit PostgreSQL; die Compose-Datei in dieser Anleitung tut das bereits.

Was passiert, wenn ich den N8N_ENCRYPTION_KEY verliere?

Jedes Credential in der Datenbank wird dauerhaft unlesbar. n8n verschlüsselt gespeicherte Credentials — OAuth-Tokens, API-Keys, SMTP-Passwörter — mit diesem Schlüssel, und es gibt weder einen Wiederherstellungsmechanismus noch ein Support-Ticket, das sie zurückholt. Sie geben jedes Credential von Hand neu ein. Das ist die mit Abstand häufigste Art, wie eine selbst gehostete n8n-Instanz zerstört wird: Jemand legt das Docker-Volume neu an, n8n generiert einen neuen Schlüssel, und jeder Workflow beginnt sofort mit einem Entschlüsselungsfehler zu scheitern. Setzen Sie den Schlüssel vor dem ersten Boot explizit in Ihrer .env, und bewahren Sie eine Kopie an einem Ort auf, der nicht der Server ist.

Warum feuern meine n8n-Webhooks nicht?

Vier Ursachen, nach Häufigkeit geordnet. (1) WEBHOOK_URL ist nicht gesetzt, sodass der Editor Ihnen eine http://localhost:5678/webhook/…-URL liefert, die kein externer Dienst erreichen kann — setzen Sie sie auf Ihre öffentliche HTTPS-URL. (2) Der Workflow ist nicht aktiviert; die Test-URL lauscht nur, solange der Editor geöffnet ist, die Produktions-URL existiert erst, sobald der Workflow aktiv ist. (3) DNS oder die Firewall: Der Eintrag löst nicht auf, oder die Ports 80/443 sind geschlossen. (4) Sie befinden sich hinter einer zusätzlichen Proxy-Schicht und haben N8N_PROXY_HOPS nicht gesetzt, sodass n8n die falsche Client-IP liest. Testen Sie mit einem einfachen curl von einer Maschine, die nicht der Server ist.

Kann ich n8n zusammen mit anderen Diensten auf demselben VPS betreiben?

Ja, und das ist das normale Muster — ein Caddy davor, ein Compose-Netzwerk, n8n auf einem Hostnamen und Vaultwarden, Nextcloud oder SearXNG auf anderen. Zwei Vorbehalte. Speicher: n8n plus PostgreSQL läuft im Leerlauf bei rund 700 MB, und ein anspruchsvoller Workflow kann weit darüber hinausschießen, also lassen Sie Spielraum. Blast Radius: Die n8n-Datenbank ist das Credential-dichteste, was auf der Box ist, also erbt alles andere, das sich diesen Host teilt, ihr Risikoprofil. Bei einer $3.90/Monat-Stufe ist es sinnvoll, der Automatisierungs-Engine einen eigenen Server zu geben.

Telefoniert selbst gehostetes n8n nach Hause?

Standardmäßig drei Endpunkte. Anonyme Produkt-Telemetrie (N8N_DIAGNOSTICS_ENABLED, Standard true), die Prüfung auf neue Versionen und Sicherheitsupdates gegen api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, Standard true), und der Workflow-Template-Browser, der von https://api.n8n.io lädt (N8N_TEMPLATES_ENABLED, Standard true). Keiner von ihnen überträgt Ihre Credentials oder Ihre Workflow-Daten, aber alle drei verraten, dass unter Ihrer IP eine Instanz existiert. Setzen Sie alle drei auf false, wenn die Box still sein soll — Sie verlieren dann die Template-Galerie und das Update-Banner, also behalten Sie die Releases selbst im Auge.

n8n Cloud oder Self-Hosted — wo liegt der Break-even?

n8n Cloud Starter kostet €20/Monat, jährlich abgerechnet, für 2 500 Ausführungen; Pro kostet €50/Monat für 10 000. Ein Sentinel-VPS kostet $3.90/Monat, und die Anzahl der Ausführungen ist nur durch CPU und RAM begrenzt, was bei typischen Webhook-und-API-Workflows Zehntausende bedeutet. Der finanzielle Break-even ist sofort erreicht; die eigentlichen Kosten sind operativ. Self-Hosting bedeutet, dass Ihnen die Upgrades, die Backups, die TLS-Erneuerung und der Disk-full-Vorfall um 3 Uhr morgens gehören. Die ehrliche Regel: Wenn Sie die Instanz nicht selbst innerhalb eines Monats nach einem Security-Release aktualisiert hätten, zahlen Sie für Cloud. Wenn ein monatliches docker compose pull bereits Teil Ihres Lebens ist, hosten Sie selbst.

Warum ist ein KYC-freier Host speziell für einen Automatisierungsserver wichtig?

Wegen dessen, was eine n8n-Instanz enthält. Die Credential-Tabelle ist ein einziger verschlüsselter Speicher für die API-Keys, OAuth-Tokens und Mail-Passwörter jedes Dienstes, den Sie automatisieren, und der Workflow-Graph daneben ist eine lesbare Karte davon, wie Ihr Unternehmen tatsächlich funktioniert — welches CRM, welcher Bankfeed, welcher Lieferant, welche Kunden. Eine statische Website verrät nichts davon. Die Anwendungsschicht schützt es gut; auf der Metadatenschicht sickert es durch. Wenn die Anmeldung für die Maschine einen Passscan und eine Karte mit sich bringt, haben Sie den Tresor verschlüsselt und Ihren Namen an die Tür geschrieben. Ein no-KYC-Host, bezahlt in Monero, hält die beiden Ebenen im Einklang.

Kann ich KI-Agenten in n8n auf diesem VPS betreiben?

Ja, für die übliche Form — ein AI-Agent-Node, der eine entfernte Modell-API aufruft. Diese Workload ist I/O-gebunden, sie wartet auf den Provider, und ein Sentinel bewältigt das. Was nicht passt, ist das Modell selbst laufen zu lassen: Ein lokales 7B-Modell will rund 8 GB RAM, und echte Inferenzgeschwindigkeit will eine GPU, die diese Tiers nicht mitbringen. Richten Sie n8n auf einen entfernten OpenAI-kompatiblen Endpunkt aus und halten Sie den VPS leicht. Die begleitende Anleitung zum Betrieb eines KI-Agenten rund um die Uhr deckt die Laufzeitseite ab — Restart-Policies, Secrets, Ausgabenobergrenzen und die Crash-Loop-Falle.

Das Metall beschaffen

Ein nordischer VPS für Ihre Automatisierungs-Engine. KYC-frei, mit Krypto bezahlt.

Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/Monat) erfüllt das n8n-Minimum mit Spielraum für PostgreSQL und Caddy auf derselben Box. Keine E-Mail bei der Anmeldung, kein Ausweisdokument, unbegrenzte Ausführungen.

Zuletzt überprüft · 2026-08-24 · Quellen · n8n-Hosting-Dokumentation, n8n LICENSE.md (Sustainable Use License), n8n.io-Preisseite, Docker- und Caddy-Upstream-Dokumentation · Rhythmus · jährlich