n8n auf einem VPS: die eigene Automatisierungsplattform ohne manuelle Routinearbeit
Eine Anfrage geht über die Website ein. n8n prüft die Daten, sucht nach Duplikaten, legt einen Vorgang an, erstellt mithilfe von KI einen Antwortentwurf und benachrichtigt den zuständigen Mitarbeiter per Telegram. Ein Mensch greift nur dort ein, wo eine Entscheidung erforderlich ist – nicht, um Daten zwischen Browser-Tabs zu übertragen.
Im Folgenden sehen wir uns an, wie n8n funktioniert und wie Sie es mit Docker Compose, PostgreSQL, HTTPS und isolierter Codeausführung auf einem VPS installieren.
n8n in sieben Schritten
Der minimale Startplan:
- Erstellen Sie einen VPS und richten Sie eine Subdomain darauf aus, zum Beispiel
n8n.example.com. - Installieren Sie Docker und Docker Compose.
- Starten Sie n8n mit PostgreSQL, einem externen Task Runner und Caddy.
- Öffnen Sie die Oberfläche über HTTPS und erstellen Sie das Eigentümerkonto.
- Verbinden Sie Telegram, ein CRM, E-Mail oder eine beliebige externe API.
- Konfigurieren Sie die Fehlerbehandlung und die Aufbewahrungsdauer der Ausführungsdaten.
- Automatisieren Sie Backups der Datenbank, der Daten und des Verschlüsselungsschlüssels.
Für eine kleine produktive Installation ist ein Einstieg mit 2 vCPU und 4 GB RAM sinnvoll. Für Tests reichen häufig 2 GB, doch PostgreSQL, Docker und parallele Prozesse verbrauchen die verbleibenden Reserven schnell.
Was n8n ist und wie es funktioniert
n8n ist eine Plattform zur Automatisierung von Workflows. Ein Ablauf wird aus Nodes zusammengesetzt: Einer startet den Prozess, die folgenden rufen Daten ab und verarbeiten sie, und der letzte führt eine Aktion aus.
Ein einfacher Workflow sieht so aus:
Webhook → Datenprüfung → CRM → Telegram → Antwort an die Website
Die Kette kann durch einen Webhook, einen Zeitplan, eine E-Mail, eine Nachricht oder ein Ereignis eines externen Dienstes ausgelöst werden. Zwischen den Nodes stehen Bedingungen, Schleifen, Filter, Wartezeiten und Fehlerbehandlung zur Verfügung.
Eine Stärke von n8n besteht darin, dass die Automatisierung nicht auf fertige Integrationen beschränkt ist. Jeder Dienst mit einer API kann über HTTP Request angesprochen werden, während sich individuelle Logik in einem Code node mit JavaScript oder Python schreiben lässt. Damit liegt n8n zwischen einem einfachen No-Code-Baukasten und selbst entwickeltem serverseitigem Code.
Warum es um mehr als die Weiterleitung von Daten geht
n8n ist besonders nützlich, wenn ein Prozess mehrere Systeme durchläuft und eine Entscheidung erfordert:
Formular → Prüfung → Duplikatsuche → KI-Bewertung → Freigabe durch den Mitarbeiter → CRM
Der Mensch kann auf einen einzigen Kontrollpunkt beschränkt werden. So erstellt die KI beispielsweise eine Antwort, die jedoch erst nach der Freigabe durch einen Mitarbeiter an den Kunden gesendet wird.
Typische Szenarien:
- Vertrieb und Support: Anfragen erfassen, Leads verteilen und Vorgänge anlegen;
- Content und KI: Entwürfe erstellen, Anfragen klassifizieren und nach Freigabe veröffentlichen;
- DevOps: Störungsmeldungen, Webhooks aus Git und API-Prüfungen;
- interne Abläufe: Tabellen, E-Mail, Kalender und Unternehmenssysteme synchronisieren.
Eine selbst gehostete Installation gibt Ihnen Kontrolle über den Prozess und die Datenbank, macht externe Dienste jedoch nicht lokal. Daten, die an Telegram, ein CRM oder ein cloudbasiertes KI-Modell gesendet werden, verlassen den VPS.
n8n Cloud oder eigener Server
| Parameter | n8n Cloud | n8n auf einem VPS |
|---|---|---|
| Start | Keine Serverkonfiguration | Domain, Docker und HTTPS erforderlich |
| Updates | Werden von n8n durchgeführt | Werden vom Eigentümer durchgeführt |
| Datenbank und Dateien | In der Infrastruktur des Dienstes | Auf dem ausgewählten Server |
| Skalierung | Nach den Bedingungen des Cloud-Tarifs | Eigenständig konfigurierbar |
| Verantwortung | Weniger Administrationsaufwand | Backups, Schutz und Monitoring liegen beim Eigentümer |
| Geeignet für | Schneller Start ohne DevOps | Kontrolle, Anpassung und dauerhaft laufende Prozesse |
Die Community Edition kann kostenlos selbst gehostet und für persönliche sowie interne Geschäftsprozesse verwendet werden. n8n wird jedoch nicht unter einer klassischen Open-Source-Lizenz, sondern im Fair-Code-Modell unter der Sustainable Use License vertrieben. Sie erlaubt die interne Nutzung und Modifikation, gestattet es aber nicht, n8n einfach bereitzustellen, mit dem eigenen Logo zu versehen und den Zugang als eigenständiges SaaS zu verkaufen. Für ein solches Produkt müssen die Lizenzbedingungen gesondert geprüft werden.
Serveranforderungen von n8n
Die Last hängt von Datenmenge, Parallelität und Art der Vorgänge ab. Dateien, lange Listen, Code nodes und Workflows mit KI benötigen mehr Arbeitsspeicher als das Übertragen kleiner JSON-Daten zwischen APIs.
| Szenario | Einstiegskonfiguration |
|---|---|
| Tests und persönliche textbasierte Workflows | 1 vCPU, 2 GB RAM, 20 GB NVMe |
| Kleine produktive Installation | 2 vCPU, 4 GB RAM, 25–40 GB NVMe |
| Parallele Prozesse, KI oder Dateien | 4 vCPU, 8 GB RAM oder mehr |
| Mehrere Worker-Prozesse im queue mode | Auslegung nach Anzahl der Ausführungen |
SQLite eignet sich zum Kennenlernen und für eine kleine Einzelinstanz. Für den produktiven Einsatz ist PostgreSQL praktischer: Backups sind einfacher, und ein späterer Wechsel in den queue mode ist leichter möglich.
So installieren Sie n8n auf einem VPS
In diesem Beispiel kommen Ubuntu 24.04, PostgreSQL, Caddy und ein externer Task Runner zum Einsatz. Ersetzen Sie n8n.example.com und die Zeitzone durch Ihre eigenen Werte.
1. DNS einrichten und Server vorbereiten
Erstellen Sie einen DNS-A-Eintrag, der auf die IPv4-Adresse des VPS verweist, und verbinden Sie sich anschließend per SSH:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslInstallieren Sie Docker Engine und das Compose-Plugin aus dem offiziellen Repository:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionÖffnen Sie ausschließlich SSH, HTTP und HTTPS:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableSchließen Sie die aktuelle SSH-Sitzung erst, wenn Sie geprüft haben, dass eine neue Verbindung funktioniert.
2. Umgebungsvariablen erstellen
Bereiten Sie das Verzeichnis vor:
mkdir -p /opt/n8n
cd /opt/n8nErstellen Sie .env. Die folgenden Befehle erzeugen sofort unterschiedliche zufällige Geheimnisse für PostgreSQL, die n8n-Verschlüsselung und den Task Runner:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envFür den ersten Start ist das Tag stable praktisch. Nach der Überprüfung der Installation sollten Sie eine konkrete n8n-Version festlegen, damit ein künftiges Image-Update nicht unerwartet erfolgt.
N8N_ENCRYPTION_KEY darf nicht verloren gehen. Mit diesem Schlüssel verschlüsselt n8n gespeicherte Passwörter, Tokens und andere Zugangsdaten. Wenn nur PostgreSQL ohne den Schlüssel wiederhergestellt wird, bleiben die Einträge zwar in der Datenbank, n8n kann sie jedoch nicht lesen.
3. Docker Compose erstellen
Erstellen Sie die Datei compose.yaml:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
environment:
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_HOST: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configDer externe Task Runner führt Code getrennt vom Hauptprozess von n8n aus. Das ist sicherer als der interne Modus und verhindert, dass ein Fehler in einem Code node so leicht den Editor und die Verarbeitung von Webhooks beeinträchtigt.
4. HTTPS anbinden
Erstellen Sie die Datei Caddyfile:
{$N8N_HOST} {
reverse_proxy n8n:5678
}Caddy bezieht automatisch ein TLS-Zertifikat, wenn DNS bereits auf den VPS verweist und die Ports 80 und 443 erreichbar sind. Der interne Port 5678 wird nicht im Internet veröffentlicht: Von außen sind nur 80 und 443 erreichbar, während Caddy über das Docker-Netzwerk auf n8n zugreift.
Die Variablen N8N_WEBHOOK_URL und N8N_PROXY_HOPS sind erforderlich, damit der Editor korrekte öffentliche Webhook-Adressen erzeugt und den Headern eines Reverse Proxys vertraut.
5. n8n starten
Prüfen Sie die endgültige Konfiguration und starten Sie die Container:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyÖffnen Sie:
https://n8n.example.comErstellen Sie das Eigentümerkonto. Geben Sie dessen Passwort nicht an Kollegen weiter: Verwenden Sie für die Zusammenarbeit getrennte Konten und gewähren Sie nur die jeweils benötigten Rechte.
Der erste nützliche Workflow
Ein guter Test ist die Verarbeitung einer Anfrage von der Website:
- Fügen Sie einen
Webhook-Node mit der MethodePOSThinzu. - Behalten Sie mit
Edit Fieldsnur Name, E-Mail-Adresse und Quelle bei. - Lehnen Sie mit einem
If-Node Anfragen ohne Pflichtangaben ab. - Legen Sie einen Vorgang im CRM an oder senden Sie über
HTTP Requesteine Anfrage. - Fügen Sie eine Benachrichtigung in Telegram hinzu.
- Beenden Sie die Kette mit einem
Respond to Webhook-Node. - Aktivieren Sie den Workflow nach dem Test und ersetzen Sie den Test-Webhook durch die produktive URL.
Dieses Beispiel prüft unmittelbar Domain, HTTPS, eingehende Anfragen, Zugangsdaten und die externe Integration. Anschließend sollten Sie einen separaten Error Workflow hinzufügen, der über einen Ausfall der Hauptkette informiert.
Sicherheit von n8n nach der Installation
Ein installiertes n8n ist noch kein zuverlässiges n8n. Prüfen Sie nach dem Start, ob:
- der Editor ausschließlich über HTTPS erreichbar ist;
.envdie Rechte600besitzt und nicht in Git landet;- externe API-Schlüssel nur die minimal erforderlichen Rechte haben;
- Webhooks die Signatur oder das Geheimnis der Quelle prüfen;
- der Ausführungsverlauf automatisch bereinigt wird;
- Fehler kritischer Workflows an den Administrator gesendet werden.
Community nodes werden als Pakete installiert und können Zugriff auf Workflow-Daten und den Server erhalten. Fügen Sie keine unbekannten Nodes ohne Prüfung hinzu. Wenn Sie sie nicht benötigen, deaktivieren Sie sie mit N8N_COMMUNITY_PACKAGES_ENABLED=false.
Starten Sie die integrierte Prüfung:
docker compose exec n8n n8n auditSie hilft dabei, ungeschützte Webhooks, riskante Nodes und Probleme mit Zugangsdaten zu erkennen, ersetzt jedoch keine manuelle Kontrolle.
Ausführungsverlauf und personenbezogene Daten
n8n speichert Ein- und Ausgabedaten zur Fehlersuche. Zusammen mit ihnen können E-Mails, Telefonnummern, Dokumente und API-Antworten in der Datenbank verbleiben.
In der oben gezeigten Konfiguration werden Ausführungen nach sieben Tagen gelöscht und ihre Anzahl auf 10.000 begrenzt. Bei sensiblen Prozessen sollte die Frist nach der Richtlinie zur Datenaufbewahrung gewählt und unnötige Felder sollten vor Abschluss des Workflows entfernt werden.
Backups und Updates
Für eine Wiederherstellung benötigen Sie einen PostgreSQL-Dump, das Volume n8n_data, die Konfigurationsdateien und .env mit N8N_ENCRYPTION_KEY. Stoppen Sie vor dem Kopieren die verarbeitenden Container, während PostgreSQL weiterläuft. Dadurch entsteht eine kurze Unterbrechung der Workflows:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runnerDas Archiv mit .env enthält Geheimnisse: Verschlüsseln Sie es und bewahren Sie es außerhalb des VPS auf. Überprüfen Sie die Kopie regelmäßig durch eine testweise Wiederherstellung.
Erstellen Sie vor einem Update ein Backup und lesen Sie die Versionshinweise:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psTask Runner und Hauptcontainer müssen dasselbe Versions-Tag verwenden.
Wann eine Skalierung erforderlich wird
Beginnen Sie nicht mit Redis und mehreren Workern, bevor eine reale Last besteht. Eine einzelne Instanz mit PostgreSQL lässt sich einfacher verwalten und reicht für kleine interne Prozesse in der Regel aus.
Der queue mode wird benötigt, wenn lang laufende Aufgaben Webhooks verzögern, viele Workflows gleichzeitig starten oder die Dateiverarbeitung regelmäßig den gesamten Arbeitsspeicher belegt. Dann nimmt die Hauptinstanz Ereignisse entgegen, Redis verteilt die Aufträge und Worker führen sie parallel aus. Alle Komponenten müssen mit derselben PostgreSQL-Datenbank verbunden sein und denselben N8N_ENCRYPTION_KEY verwenden.
Welcher VPS für n8n geeignet ist
Für die Kombination aus n8n, PostgreSQL, Caddy und Task Runner ist ein Einstieg mit 2 vCPU, 4 GB RAM und einem NVMe-Laufwerk sinnvoll. Bei tropic.host entspricht dies dem Tarif Light: 2 vCPU, 4 GB RAM und 25 GB NVMe. Das reicht für die ersten produktiven Workflows ohne aufwendige Dateiverarbeitung.
Für Dokumente, große Datenmengen und zahlreiche parallele Workflows mit KI sind 8 GB RAM die bessere Wahl. Auch ein stabiles Netzwerk ist wichtig: Webhooks, OAuth-Rückrufe und geplante Aufgaben müssen dauerhaft erreichbar bleiben.
Fazit
n8n verwandelt wiederkehrende Arbeitsschritte in übersichtliche Abläufe: Fertige Nodes beschleunigen den Start, HTTP Request bindet nahezu jede API an, und ein Code node ermöglicht eigene Logik.
Die selbst gehostete Version bietet Kontrolle über Server und Datenbank, erfordert jedoch HTTPS, eingeschränkte Schlüssel, die Bereinigung des Verlaufs und geprüfte Backups. Bewahren Sie N8N_ENCRYPTION_KEY zusammen mit PostgreSQL auf: Ohne ihn lassen sich wiederhergestellte Zugangsdaten nicht entschlüsseln.
FAQ
Kann n8n kostenlos verwendet werden?
Ja. Die Community Edition kann für persönliche und interne Prozesse kostenlos auf dem eigenen Server bereitgestellt werden. Der Weiterverkauf eines gehosteten n8n als eigenständiges SaaS wird durch die Fair-Code-Lizenz eingeschränkt.
Kann n8n ohne Domain installiert werden?
Für einen lokalen Test ja. Für öffentliche Webhooks und OAuth sollten Sie eine Domain und HTTPS verwenden.
Wie viel Arbeitsspeicher benötigt n8n?
Für einfache persönliche Workflows reichen häufig 2 GB RAM. Für n8n mit PostgreSQL, Caddy und Task Runner sind 4 GB sinnvoller; Dateien und parallele Ausführungen können 8 GB oder mehr erfordern.
Bleiben alle Daten innerhalb des VPS?
Nur die Daten, die der Workflow nicht nach außen sendet. Datenbank und Ausführungsverlauf liegen auf dem VPS, doch Nodes für Telegram, CRM oder ein externes KI-Modell übertragen die ausgewählten Daten an den jeweiligen Dienst.
Was gehört in ein n8n-Backup?
Ein PostgreSQL-Dump, das Volume n8n_data, compose.yaml, Caddyfile und .env mit N8N_ENCRYPTION_KEY. Bewahren Sie die Kopie verschlüsselt außerhalb des VPS auf und prüfen Sie sie durch eine Wiederherstellung.
