Wie man n8n mit Docker selbst hostet: Schritt-für-Schritt-Anleitung (HTTPS, Backups, Updates)

Eine praktische Anleitung zum Ausführen von n8n auf Ihrem eigenen Server mit Docker Compose, einschließlich HTTPS, PostgreSQL, dem Verschlüsselungsschlüssel, Webhooks, Backups und sicheren Updates.

n8n ist eines der beliebtesten Werkzeuge zur Automatisierung von Workflows, und einer seiner größten Vorteile ist, dass Sie es selbst hosten können. Das gibt Ihnen die volle Kontrolle über Ihre Daten, keine Gebühren pro Ausführung und die Freiheit, interne Systeme zu verbinden.

Dieser Leitfaden zeigt, wie man eine produktionsbereite, selbstgehostete n8n-Instanz mit Docker Compose einrichtet: HTTPS, eine PostgreSQL-Datenbank, korrekte Webhook-URLs, Backups und Updates. Wenn Sie noch ein Tool auswählen, lesen Sie zuerst meinen n8n vs Zapier vs Make Vergleich.

Was Sie benötigen

  • Ein Linux VPS (zum Beispiel Ubuntu LTS) mit mindestens 2 GB RAM für kleine Arbeitslasten, mehr für schwere oder KI-Workflows.
  • Eine Domain oder Subdomain, zum Beispiel n8n.example.com, die auf die IP des Servers verweist.
  • Docker und das Docker Compose-Plugin installiert
  • Grundlegender Komfort mit der Befehlszeile

Schritt 1: Docker installieren

Auf Ubuntu folgen Sie den offiziellen Installationsanweisungen von Docker für Docker Engine und das Compose-Plugin. Überprüfen Sie dann:

docker --version
docker compose version

Schritt 2: Schneller Testlauf (optional)

Um n8n in einer Minute zum Laufen zu bringen:

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Öffnen Sie http://SERVER-IP:5678. Das ist gut für Tests, aber nicht für die Produktion: kein HTTPS, SQLite-Datenbank und keine automatischen Neustarts.

Schritt 3: Erstellen Sie den Projektordner

mkdir -p ~/n8n && cd ~/n8n

Schritt 4: Erstellen Sie die .env-Datei

DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Europe/Amsterdam
POSTGRES_USER=n8n
POSTGRES_PASSWORD=change-this-strong-password
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=change-this-long-random-string

Generieren Sie einen starken Verschlüsselungsschlüssel, zum Beispiel mit openssl rand -hex 32.

Wichtig: n8n verwendet N8N_ENCRYPTION_KEY, um gespeicherte Anmeldeinformationen zu verschlüsseln. Wenn Sie es verlieren, verlieren Sie den Zugriff auf jede gespeicherte Anmeldeinformation. Bewahren Sie es in Ihrem Passwort-Manager auf.

Schritt 5: Erstellen Sie docker-compose.yml

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - db_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_HOST=${DOMAIN}
      - N8N_PROTOCOL=https
      - N8N_PORT=5678
      - WEBHOOK_URL=https://${DOMAIN}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  db_data:
  n8n_data:

Einige Anmerkungen:

  • Port 5678 ist nur an 127.0.0.1 gebunden, sodass n8n nur über den Reverse-Proxy erreichbar ist.
  • WEBHOOK_URL stellt sicher, dass die in n8n angezeigten Webhook-URLs Ihre öffentliche HTTPS-Domain verwenden.
  • In der Produktion sollten Sie das n8n-Image auf ein bestimmtes Versions-Tag anstelle von latest festlegen, damit Updates erfolgen, wenn Sie es wählen.

Schritt 6: Fügen Sie HTTPS mit einem Reverse-Proxy hinzu

Die einfachste Option ist Caddy, das Let’s Encrypt-Zertifikate automatisch erhält und erneuert. Installieren Sie Caddy auf dem Host und verwenden Sie diese Caddyfile:

n8n.example.com {
    reverse_proxy 127.0.0.1:5678
}

Nginx mit Certbot oder Traefik funktioniert ebenso gut. Stellen Sie sicher, dass WebSocket-Verbindungen durchgeleitet werden, der n8n-Editor benötigt sie.

Schritt 7: Starte n8n

docker compose up -d
docker compose logs -f n8n

Öffnen Sie https://n8n.example.com und erstellen Sie das Eigentümerkonto.

Schritt 8: Den Server sichern

  • Erlaube nur die Ports 22, 80 und 443 in der Firewall (zum Beispiel mit ufw)
  • Verwenden Sie SSH-Schlüssel und deaktivieren Sie die Passwortanmeldung
  • Halten Sie das Betriebssystem und Docker auf dem neuesten Stand
  • Beschränken Sie, wer Konten in n8n erstellen kann, und aktivieren Sie die Zwei-Faktor-Authentifizierung, wo verfügbar.
  • Seien Sie vorsichtig mit Knoten, die Code oder Befehle ausführen können, insbesondere wenn mehrere Personen die Instanz verwenden.

Schritt 9: n8n sichern

Sie müssen zwei Dinge sichern: die Datenbank und den Verschlüsselungsschlüssel (Ihre .env-Datei).

Datenbanksicherung:

docker compose exec -T postgres pg_dump -U n8n n8n | gzip > n8n-$(date +%F).sql.gz

Sie können auch Workflows und Anmeldeinformationen mit der n8n CLI exportieren:

docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json

Kopieren Sie Backups vom Server. Ein Backup auf demselben Server ist kein Backup. Mein Server-Backup-Leitfaden erklärt eine einfache, zuverlässige Einrichtung.

Schritt 10: n8n sicher aktualisieren

docker compose pull
docker compose up -d

Vor größeren Updates:

  1. Lesen Sie die Versionshinweise von n8n für breaking changes
  2. Machen Sie ein Datenbank-Backup
  3. Testen Sie wichtige Workflows nach dem Update

Skalierung: Warteschlangenmodus

Für hohe Volumina unterstützt n8n Warteschlangenmodus: die Hauptinstanz empfängt Trigger und Webhooks, Redis hält eine Warteschlange, und separate Worker-Container führen Workflows aus. Beginnen Sie einfach und wechseln Sie in den Warteschlangenmodus, wenn Ausführungen warten müssen oder der Server ständig beschäftigt ist.

Fehlerbehebung

Webhook-URLs zeigen localhost an

Setzen Sie WEBHOOK_URL auf Ihre öffentliche HTTPS-URL und starten Sie neu.

„Verbindung verloren“ im Editor

In der Regel leitet der Reverse-Proxy keine WebSocket-Verbindungen weiter. Überprüfen Sie Ihre Proxy-Konfiguration.

Anmeldeinformationen können nach dem Verschieben von Servern nicht entschlüsselt werden.

Der N8N_ENCRYPTION_KEY auf dem neuen Server ist anders. Verwenden Sie den ursprünglichen Schlüssel.

Falsche Zeiten in Zeitplänen

Setze GENERIC_TIMEZONE und TZ auf deine Zeitzone.

Häufig gestellte Fragen

Ist selbstgehostetes n8n kostenlos?

Die Software kann unter der Lizenz von n8n selbst gehostet werden; einige Funktionen sind kostenpflichtigen Plänen vorbehalten. Sie zahlen für Ihren Server und die Zeit, die für die Wartung benötigt wird. Überprüfen Sie die aktuellen Lizenzbedingungen von n8n für Ihren Anwendungsfall.

SQLite oder PostgreSQL?

SQLite eignet sich für Tests und kleine Setups. PostgreSQL ist robuster für die Produktion, größere Ausführungshistorien und den Wartemodus.

Wie viel Server benötige ich?

Kleine Instanzen laufen mit 2 GB RAM. Workflows, die große Dateien, viele Elemente oder KI-Aufrufe verarbeiten, benötigen mehr. Überwachen Sie den Speicher und skalieren Sie bei Bedarf hoch.

Möchten Sie n8n richtig einrichten?

Ich richte selbstgehostete n8n-Instanzen ein und pflege sie und baue die Workflows darauf auf: Speicherung, CRM, E-Mail, ERP und KI-Integrationen. Siehe meinen Marketing-Automatisierungsdienst und Server- und Backup-Dienst, oder fordere Hilfe an.