| | | |

n8n: Part II – Installation

Dieser Beitrag baut auf diesen Grundlagen-Beiträgen auf:

Wir installieren n8n auf einem eigenen Server (VPS) – sicher erreichbar über eine eigene Domain und mit SSL-Zertifikat versehen. Am Ende läuft n8n unter einer Adresse wie https://n8n.meine-domain.de und ist bereit für erste Workflows.

Das Setup entspricht dem, das wir selbst produktiv betreiben.

n8n ist ein Open-Source-Tool für Workflow-Automatisierung. Damit lassen sich wiederkehrende Aufgaben automatisieren und verschiedene Dienste miteinander verbinden – ohne dass für jede Verbindung selbst Code geschrieben werden muss.

Wer mehr über n8n und seine Einsatzmöglichkeiten erfahren möchte, findet in unserem Einführungsbeitrag zu n8n einen guten Überblick.

Hier geht es jetzt um die Installation – also darum, n8n auf einem eigenen Server zum Laufen zu bringen.

  • Einen VPS (z.B. mit Debian 13) mit SSH-Zugang
  • Docker & Docker Compose installiert (Anleitung)
  • Nginx Proxy Manager läuft bereits (Anleitung)
  • Das Docker-Netzwerk shared_proxy existiert bereits (wird im NPM-Beitrag angelegt)
  • Domain (oder Subdomain), die auf die IP des VPS zeigt – z. B. n8n.meine-domain.de

Hinweis zum Netzwerk: Damit n8n und der Nginx-Proxy-Manager (NPM) miteinander kommunizieren können, müssen beide im selben Docker-Netzwerk laufen. Wir nennen es shared_proxy. Wer dem NPM-Beitrag gefolgt ist, hat dieses Netzwerk bereits.

Hinweis: wer sich mit der Materie nicht weiter beschäftigen oder keine Zeit investieren möchte, kann auch mit nur einer Zeile Code n8n installieren. Dafür einfach zum Installations-Skript vorspringen.

Wir organisieren auf dem VPS unsere Dienste unter dem Verzeichnis /opt. Für n8n legen wir ein eigenes Verzeichnis an und wechseln hinein:

mkdir /opt/n8n
cd /opt/n8n

Innerhalb dieses Verzeichnisses wird n8n seine Daten speichern. Wir legen dafür gleich einen Unterordner an und zusätzlich einen für spätere Backups:

mkdir backups
mkdir n8n_data
chown -R 1000:1000 n8n_data

In n8n_data landen später alle Workflows, Credentials und Einstellungen – also das Herzstück von n8n. Dieser Ordner sollte regelmäßig gesichert werden.

Jetzt erstellen wir die zentrale Steuerdatei für Docker Compose:

nano docker-compose.yml

Den folgenden Inhalt kopieren und in die leere Datei einfügen:

services:
  n8n:
    image: n8nio/n8n:2.22.3
    container_name: n8n
    restart: unless-stopped
    expose:
      - "5678"
    environment:
      - GENERIC_TIMEZONE=Europe/Berlin
      - N8N_HOST=${N8N_DOMAIN}
      - N8N_PORT=5678
      - WEBHOOK_URL=https://${N8N_DOMAIN}/
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_ENABLED=true
      - N8N_RUNNERS_BROKER_PORT=5679
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_RUNNERS_AUTH_TOKEN=${N8N_RUNNERS_AUTH_TOKEN}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_NATIVE_PYTHON_RUNNER=true
      - N8N_PROXY_HOPS=1
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
      - EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
    volumes:
      - ./n8n_data:/home/node/.n8n
    networks:
      - shared_proxy

  task-runners:
    image: n8nio/runners:2.22.3
    restart: unless-stopped
    environment:
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
      - N8N_RUNNERS_AUTH_TOKEN=${N8N_RUNNERS_AUTH_TOKEN}
    depends_on:
      - n8n
    networks:
      - shared_proxy

networks:
  shared_proxy:
    external: true

Datei speichern: Strg + X, dann Y (Yes), dann ENTER.

Die docker-compose.yml arbeitet mit Token, die wir in eine Datei namens .env packen. Das sorgt dafür, dass man Schlüssel einfach rotieren könnte und die Datei selbst, bspw. beim Teilen, keine Geheimnisse aus Versehen herausgibt. Der folgende Code erstellt die Datei und setzt dabei randomisierte Schlüssel. Bevor der Befehl abgesetzt wird, muss der Domainname (hier: n8n.your-domain.com) angepasst werden.

( printf "N8N_RUNNERS_AUTH_TOKEN=%s\n" "$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 48)"
  printf "N8N_ENCRYPTION_KEY=%s\n"      "$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c 48)"
  printf "N8N_DOMAIN=%s\n"             "n8n.your-domain.com"
) > /opt/n8n/.env && chmod 600 /opt/n8n/.env

Jetzt starten wir n8n:

docker compose up -d

Docker lädt das n8n-Image herunter (beim ersten Start dauert das einen Moment) und startet den Container im Hintergrund (`-d` = detached).

Ob alles läuft, prüfen wir mit:

docker ps

In der Ausgabe sollte ein Container namens n8n mit dem Status Up erscheinen.

Logs anschauen (hilfreich bei Problemen):

docker logs n8n

n8n läuft jetzt intern auf Port 5678. Damit es sicher über https://n8n.meine-domain.de erreichbar wird, richten wir im Nginx Proxy Manager einen Proxy Host ein.

Zunächst muss sichergestellt sein, dass die Subdomain n8n.meine-domain.de per DNS auf die IP des VPS zeigt. Das wird beim Domain-Anbieter eingestellt (A-Record auf die VPS-IP).

Im NPM-Dashboard (http://SERVER-IP:81 oder eigene Domain) auf Hosts → Proxy Hosts Add Proxy Host klicken.

Im nun erscheinenden Modal (Fenster) die Tabs Details und SSL befüllen:

FeldWert
Domain Namesn8n.meine-domain.de
Schemehttp
Forward Hostname / IPn8n
Forward Port5678
Block Common Exploits✅ aktivieren
Websockets Support✅ aktivieren
FeldWert
SSL CertificateRequest a new SSL Certificate
Force SSL✅ aktivieren
HTTP/2 Support✅ aktivieren

Mit Save speichern. NPM beantragt automatisch ein kostenloses SSL-Zertifikat über Let’s Encrypt.

Nach ein paar Sekunden Wartezeit sollte n8n jetzt erreichbar sein unter:

https://n8n.meine-domain.de

Beim ersten Aufruf erscheint n8n’s Setup-Assistent:

  • E-Mail-Adresse eingeben (wird der Admin-Account)
  • Vorname / Nachname eingeben
  • Passwort wählen (mindestens 8 Zeichen +)
  • Fertig – n8n ist einsatzbereit!

Wichtig: Accounts stets gut absichern. n8n bietet einen 2. Faktor zur Anmeldung an. Wir halten das für selbstverständlich, den auch zu nutzen.

Ein weiterer Schritt zu mehr Sicherheit könnte sein, den Zugriff auf n8n zu „whitelisten“. So würden sich nur bestimmte IPs mit der Website verbinden können. Hierbei ist dann darauf zu achten, dass alle Webseiten, die mit n8n interagieren (sollen), dann auch erlaubt werden.

Alles Wichtige liegt im Ordner /opt/n8n/n8n_data. Diesen Ordner regelmäßig sichern – z. B. als komprimiertes Archiv:

tar -czf "/opt/n8n/backups/n8n_backup_$(date +%Y%m%d).tar.gz" -C /opt/n8n n8n_data

Das Backup wäre in diesem Fall dann hier zu finden: /opt/n8n/backups/. Diese Aufgabe ließe sich übrigens vortrefflich automatisieren.

Neue Version holen und Container neu starten:

cd /opt/n8n
docker compose pull          # Neues Image laden
docker compose up -d         # Container neu starten
docker image prune -f        # Alte Images aufräumen

Hinweis: Vor jedem Update ein Backup machen!

Aktuelle Versionen bringen oft auch Sicherheitsverbesserungen mit sich. Daher ist uns daran gelegen, unsere Services und Tools aktuell zu halten. Dafür haben wir uns ein Skript entwickelt, dass wir nutzen, um unsere Instanz rasch und sicher zu aktualisieren. Wer das nutzen mag oder sich inspirieren lassen möchte, schaut hier.

docker ps                    # Laufende Container anzeigen
docker logs n8n              # Logs von n8n anzeigen
docker logs n8n --tail 50    # Nur die letzten 50 Zeilen
docker compose stop          # Container stoppen
docker compose start         # Container starten
docker compose restart       # Container neu starten

Wir stellen auch ein Installations-Skript via Github zur Verfügung. Mit nur eine Zeile Code interaktiv zur eigenen n8n Instanz (s. Video):

bash <(curl -fsSL https://raw.githubusercontent.com/nephilim75/scripts/main/n8n/install/install-n8n.sh)

Wer nicht so auf intuitives „learning by doing“ steht, findet neben unzähligen Tutorials im Netz, direkt bei und von n8n bereitgestellte Kurse. Sie sind kostenlos und bieten einen sehr guten Einstieg in das gesamte Thema.

Wir unterstützen Sie gern dabei, Ihre Infrastruktur vorzubereiten, anzupassen oder aufzubauen. Schreiben Sie uns, wir freuen uns auf Ihre Nachricht.

Ähnliche Beiträge