Home › How-Tos › n8n selbst hosten: Schritt-für-Schritt-Anleitung mit Docker, Caddy & HTTPS

Ehrlich-Hinweis (Affiliate-Transparenz): An n8n self-hosted verdienen wir nichts — kein Affiliate-Programm, keine Provision, keine versteckten Links. Wir empfehlen es trotzdem, weil es DSGVO-technisch und preislich kaum zu schlagen ist: Deine Daten bleiben auf deinem Server in der EU, und ein kleiner VPS kostet weniger als ein Netflix-Abo. Die einzige Stelle, an der wir potenziell mitverdienen würden, ist die bequeme Cloud-Alternative ganz unten — die ist klar mit (Affiliate) gekennzeichnet. Du entscheidest.

n8n ist das Open-Source-Schwergewicht unter den Automatisierungs-Tools — die ehrliche Alternative zu Zapier und Make, bei der du deine Workflows selbst kontrollierst. Der größte Vorteil: Du kannst es auf deinem eigenen Server laufen lassen. Kein monatliches Task-Limit, keine Daten, die durch fremde US-Clouds wandern, volle Kontrolle.

Diese Anleitung führt dich von „leerer VPS" bis „n8n läuft sicher über HTTPS" — mit Docker, Docker-Compose und Caddy. Wir reden hier nicht um den heißen Brei herum: Du brauchst dafür ein bisschen Server-Grundwissen. Wenn du noch nie eine SSH-Verbindung aufgebaut hast, ist das machbar, aber rechne mit Lesen und gelegentlichem Fluchen.

Warum n8n selbst hosten?

Drei nüchterne Gründe:

Ehrliche Voraussetzung: Self-Hosting heißt, du bist der Admin. Updates, Backups, Sicherheit — das liegt jetzt bei dir. Wenn dir das zu viel ist, lies direkt den Abschnitt „Wann sich Self-Hosting nicht lohnt". Keine Schande, ehrlich.

Wie n8n grundsätzlich gegen die Konkurrenz dasteht, haben wir hier verglichen: n8n vs. Zapier und Make.com vs. n8n.

Was du brauchst

[Screenshot: Hetzner Cloud Console mit Übersicht der Server-Tarife]


Schritt 1: VPS bestellen

Stand Juni 2026, bitte prüfen. Empfohlene Methode für n8n im Self-Hosting ist Docker bzw. Docker-Compose — das ist heute der De-facto-Standard und macht spätere Updates schmerzfrei.

  1. Account bei Hetzner Cloud anlegen, neues Projekt erstellen.
  2. Standort: ein EU-Rechenzentrum wählen (z. B. Nürnberg, Falkenstein oder Helsinki). Für DSGVO-Sauberkeit empfehlen wir Deutschland.
  3. Image: Ubuntu (aktuelle LTS-Version, z. B. 24.04).
  4. Typ: ein Tarif mit ~2 vCPU / 4 GB RAM. Stand Juni 2026, bitte prüfen ist das der CX22-Tarif, preislich im niedrigen einstelligen Euro-Bereich pro Monat. Exakte Zahlen ändern sich — schau im Hetzner-Preisrechner nach.
  5. SSH-Key: Lade hier direkt deinen öffentlichen SSH-Key hoch (siehe Schritt 2). Mach das jetzt — dann kannst du dir das Root-Passwort-Theater sparen.
  6. Server erstellen, IP-Adresse notieren.

[Screenshot: Hetzner Server-Konfiguration mit ausgewähltem EU-Standort und CX22-Tarif]


Schritt 2: Server absichern

Das Wichtigste zuerst — ein frisch aufgesetzter Server, der offen im Netz hängt, wird innerhalb von Minuten von Bots abgeklopft. Sicherheit ist keine Kür.

SSH-Key statt Passwort

Falls du noch keinen SSH-Key hast, erzeuge ihn lokal:

ssh-keygen -t ed25519 -C "deine@email.de"

Den öffentlichen Schlüssel (~/.ssh/id_ed25519.pub) hinterlegst du bei Hetzner. Dann einloggen:

ssh root@DEINE_SERVER_IP

System aktualisieren & Nutzer anlegen

apt update && apt upgrade -y
adduser deinname
usermod -aG sudo deinname

Ab jetzt arbeitest du mit deinname statt root. Kopiere deinen SSH-Key in den neuen Account und deaktiviere danach den Root-Login sowie Passwort-Logins in /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no

Danach: sudo systemctl restart ssh

Achtung: Teste den Login mit dem neuen Nutzer in einem zweiten Terminal, bevor du die erste Session schließt. Sonst sperrst du dich aus.

Firewall

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Nur SSH, HTTP und HTTPS sind offen. Port 5678 (n8n) bleibt zu — der läuft gleich nur intern.

fail2ban (kurz)

fail2ban sperrt IPs, die zu oft falsche Logins versuchen:

sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban

Die Standardkonfiguration schützt bereits SSH. Mehr brauchst du fürs Erste nicht.

[Screenshot: Terminal mit erfolgreichem ufw status-Output]


Schritt 3: Docker & Docker-Compose installieren

Offizielle, saubere Methode:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Danach einmal aus- und wieder einloggen, damit die Gruppenrechte greifen. Docker Compose ist in modernen Docker-Versionen als Plugin dabei. Prüfen:

docker --version
docker compose version

Wenn beide eine Version ausgeben, bist du startklar.


Schritt 4: n8n via Docker-Compose starten

Für den Produktivbetrieb empfehlen wir PostgreSQL statt der Standard-SQLite-Datenbank — Stand Juni 2026, bitte prüfen ist das die gängige Empfehlung für bessere Performance und einfachere Backups.

Lege ein Projektverzeichnis an:

mkdir ~/n8n && cd ~/n8n

Erzeuge einen Encryption-Key und merke ihn dir gut:

openssl rand -hex 32

Kritisch: Der N8N_ENCRYPTION_KEY verschlüsselt alle gespeicherten Zugangsdaten. Verlierst du ihn, sind sämtliche Credentials unwiederbringlich futsch — es gibt keinen Master-Key, keinen Reset, keinen Support, der das rettet. Sichere ihn in deinem Passwortmanager. Sofort.

Jetzt die docker-compose.yml (Platzhalter wie DEIN_KEY, n8n.deinedomain.de und die Passwörter ersetzen):

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=EIN_STARKES_PASSWORT
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=EIN_STARKES_PASSWORT
      - N8N_ENCRYPTION_KEY=DEIN_KEY
      - N8N_HOST=n8n.deinedomain.de
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.deinedomain.de/
      - GENERIC_TIMEZONE=Europe/Berlin
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  postgres_data:
  n8n_data:

Beachte: n8n lauscht hier auf 127.0.0.1:5678 — also nur lokal. Von außen erreichbar wird es erst über den Reverse Proxy in Schritt 5. So gehört es sich.

Starten:

docker compose up -d

Logs prüfen:

docker compose logs -f n8n

[Screenshot: Terminal mit laufenden n8n- und postgres-Containern via docker compose ps]


Schritt 5: HTTPS & Domain via Reverse Proxy (Caddy)

HTTPS ist Pflicht, nicht optional. n8n verwaltet Zugangsdaten zu deinen ganzen Diensten — das unverschlüsselt über HTTP laufen zu lassen wäre grob fahrlässig.

Caddy ist der einfachste Weg: Es holt und erneuert Let's-Encrypt-Zertifikate vollautomatisch, und die Konfiguration ist quasi zwei Zeilen lang. Stand Juni 2026, bitte prüfen ist das die unkomplizierteste Variante für Einsteiger.

Vorbereitung: Setze einen A-Record für n8n.deinedomain.de auf die IP deines Servers. Warte, bis die DNS-Auflösung greift (kann ein paar Minuten dauern).

Ergänze deine docker-compose.yml um einen Caddy-Service:

  caddy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - n8n

Und ergänze unten die Volumes:

  caddy_data:
  caddy_config:

Lege im selben Ordner ein Caddyfile an:

n8n.deinedomain.de {
    reverse_proxy n8n:5678
}

Das war's. Caddy übernimmt Ports 80/443, beantwortet die ACME-Challenge und reicht alles intern an n8n weiter. Neu starten:

docker compose up -d

Beim ersten Aufruf von https://n8n.deinedomain.de holt Caddy automatisch ein gültiges Zertifikat. Grünes Schloss, fertig.

Alternative Traefik: Wer mehrere Dienste auf einem Server betreibt oder dynamisches Routing braucht, ist mit Traefik besser bedient — flexibler, aber deutlich steilere Lernkurve. Für einen einzelnen n8n-Dienst ist Caddy schlicht angenehmer. Bleib bei Caddy, wenn du nicht weißt, dass du Traefik brauchst.

[Screenshot: Browser mit aufgerufener n8n-URL, grünem Schloss und gültigem HTTPS-Zertifikat]


Schritt 6: Ersteinrichtung im Browser

Ruf https://n8n.deinedomain.de auf. Beim ersten Start legst du den Owner-Account an:

  1. E-Mail und ein starkes, einzigartiges Passwort vergeben. Nimm den Passwortmanager — das ist der Generalschlüssel zu allem.
  2. Optionalen Lizenz-Key überspringen (Community Edition reicht).
  3. Fertig — du landest im Workflow-Editor.

[Screenshot: n8n Owner-Account-Setup-Maske im Browser]

Lege jetzt direkt einen ersten Test-Workflow an (z. B. einen manuellen Trigger plus „No-Op"-Node) und führe ihn aus, um zu sehen, dass alles läuft. Wie das Bauen genau geht, zeigen wir am Make-Beispiel in unserer Workflow-Anleitung — das Prinzip ist bei n8n dasselbe.


Schritt 7: Backups einrichten

Self-Hosting ohne Backup ist eine Zeitbombe. Drei Dinge musst du sichern — Stand Juni 2026, bitte prüfen:

  1. Die PostgreSQL-Datenbank (Workflows, Credentials, Execution-Logs).
  2. Das n8n-Datenverzeichnis (/home/node/.n8n im Container — Konfiguration, ggf. eigene Nodes).
  3. Den Encryption-Key (steht in deiner Compose-Datei — gehört zusätzlich in den Passwortmanager).

Datenbank-Dump

pg_dump erstellt einen konsistenten Snapshot, während n8n weiterläuft:

docker compose exec -T postgres pg_dump -U n8n n8n > ~/n8n-backups/db-$(date +%F).sql

Datenvolume sichern

docker run --rm -v n8n_n8n_data:/data -v ~/n8n-backups:/backup \
  alpine tar czf /backup/n8n-data-$(date +%F).tar.gz -C /data .

(Der Volume-Name ist meist <ordnername>_n8n_data — prüfe mit docker volume ls.)

Automatisieren per Cron

Pack beide Befehle in ein Skript backup.sh, mach es ausführbar und richte einen täglichen Cronjob ein:

crontab -e
0 3 * * * /home/deinname/n8n/backup.sh

Damit läuft das Backup jede Nacht um 3 Uhr. Wichtig: Kopiere die Backups regelmäßig weg vom Server (z. B. in einen verschlüsselten Object-Storage oder lokal). Ein Backup, das mit dem Server stirbt, ist kein Backup.


Updates einspielen

Dank Docker ist das angenehm kurz. Im Projektverzeichnis:

docker compose pull
docker compose up -d

Damit ziehst du das neueste Image und startest die Container neu — deine Daten in den Volumes bleiben erhalten. Tipp: Mach vorher ein Backup, und überleg dir, ob du im Compose-File statt latest eine feste Versionsnummer pinnen willst. Dann updatest du bewusst und nicht versehentlich auf einen Breaking Change. Stand Juni 2026, bitte prüfen — bei größeren Versionssprüngen lohnt ein Blick ins n8n-Changelog.


Wann sich Self-Hosting nicht lohnt

Ehrlich bleibt ehrlich: Self-Hosting ist nicht für jeden. Lass es lieber, wenn …

In diesen Fällen ist die gehostete Variante n8n Cloud die ehrlichere Wahl — inklusive EU-Region für DSGVO-Konformität, ohne dass du den Server selbst betreibst. Sie kostet mehr als ein VPS, nimmt dir aber die komplette Infrastruktur ab. Welche DSGVO-konformen Optionen es sonst noch gibt, findest du in unserem Überblick: Zapier-Alternative mit DSGVO.


FAQ

Wie viel kostet n8n self-hosted im Monat? Nur den Server. Stand Juni 2026, bitte prüfen startet ein passender EU-VPS (z. B. Hetzner CX22 mit 2 vCPU / 4 GB RAM) im niedrigen einstelligen Euro-Bereich pro Monat. Die n8n Community Edition selbst ist kostenlos. Exakte Preise bitte beim Anbieter prüfen.

Brauche ich zwingend PostgreSQL, oder reicht SQLite? Für reines Ausprobieren reicht die Standard-SQLite. Für Produktivbetrieb empfehlen wir PostgreSQL — Stand Juni 2026, bitte prüfen ist das die gängige Empfehlung wegen besserer Performance bei parallelen Zugriffen und einfacheren, konsistenten Backups via pg_dump.

Ist Self-Hosting DSGVO-konform? Es kann es sein — wenn dein Server in der EU steht und du die üblichen Pflichten erfüllst (Verschlüsselung, Zugriffskontrolle, Backups, Verarbeitungsverzeichnis). Wichtig: Mit Self-Hosting bist du der Verantwortliche im Sinne der DSGVO. Diese Anleitung ist keine Rechtsberatung — im Zweifel mit einem Datenschutzbeauftragten klären.

Was passiert, wenn ich meinen Encryption-Key verliere? Dann sind alle in n8n gespeicherten Zugangsdaten dauerhaft nicht mehr entschlüsselbar. Es gibt keinen Reset und keine Wiederherstellung. Deshalb: Key sofort in den Passwortmanager und in dein Backup.

Caddy oder Traefik — was soll ich nehmen? Für einen einzelnen n8n-Dienst nimm Caddy: minimaler Aufwand, automatisches HTTPS, zweizeilige Konfiguration. Traefik lohnt sich erst, wenn du mehrere Dienste mit dynamischem Routing auf demselben Server betreibst — dafür mit deutlich steilerer Lernkurve.


Zuletzt geprüft: Juni 2026.

Quellen

← Zurueck zur Startseite