Workflow-Automatisierung durch Self-Hosting von n8n

Veröffentlicht am·Merle Büschking·12 Min. Lesezeit

Moderne Softwareumgebungen können komplex sein. Die meisten Unternehmen nutzen eine wachsende Mischung aus Tools: Projektmanagement-Apps, Messaging-Plattformen, Datenbanken und mehr. Jedes Tool funktioniert für sich gut, aber sie verbinden sich nicht immer reibungslos. Informationen landen oft verstreut über verschiedene Systeme, und jemand muss manuell Daten kopieren, prüfen oder eigene Skripte schreiben, um alles synchron zu halten.

Workflow-Automatisierung löst dieses Problem, indem die eingesetzten Tools automatisch zusammenarbeiten. Einfach ausgedrückt: Wenn in einem System etwas passiert, wird eine Reihe von Aktionen in anderen Systemen ausgelöst. Einmal eingerichtet, läuft alles von selbst. Das spart Zeit, reduziert Fehler und ermöglicht es, sich auf die wirklich wichtige Arbeit zu konzentrieren.

Ein praktisches Beispiel: Eine Anwendung hat ein Support-Ticket-Formular. Normalerweise müssen Mitarbeiter ein eingehendes Ticket lesen, entscheiden wie sie antworten, und manuell antworten. Manchmal auch noch eine Aufgabe oder ein Ticket für das zuständige Team erstellen. Mit einem automatisierten Workflow vereinfacht n8n diesen Prozess: KI bearbeitet einfache Support-Anfragen automatisch mit einer sofortigen Antwort, während komplexere oder unklare Anfragen zur manuellen Prüfung an einen Mitarbeiter weitergeleitet werden. So wird jedes Ticket schnell, präzise und konsistent bearbeitet, ohne das Team zusätzlich zu belasten.

Beispiel eines automatisierten Workflows
Beispiel eines automatisierten Workflows

Ob regelbasiert oder KI-gestützt, Workflow-Automatisierung ist für wiederkehrende Aufgaben gemacht, und genau das ist es, wofür n8n entwickelt wurde.

Workflow-Automatisierung ist besonders nützlich, wenn Prozesse klar und linear sind und wenn mehrere APIs verbunden werden müssen, um deren Ausgaben effizient zu kombinieren. In solchen Szenarien können visuelle Workflows erheblich Entwicklungszeit sparen und die Integration über verschiedene Systeme hinweg vereinfachen.

Es gibt jedoch Fälle, in denen das Entwickeln einer eigenen Software die bessere und wartbarere Lösung sein kann. Workflow-Automatisierung ist möglicherweise nicht ideal, wenn:

  • komplexe Geschäftslogik mit vielen Sonderfällen vorliegt, da visuelle Workflows schnell schwer zu warten werden können.
  • die Anwendung hohe Performance erfordert oder große Datenmengen verarbeitet.
  • robustes Versioning, Testing und Code Reviews benötigt werden, die in der klassischen Softwareentwicklung einfacher durchzusetzen sind.
  • erweitertes Error Handling und detailliertes Logging entscheidend sind.
  • man oder das Team bereits erfahren in der Softwareentwicklung ist. In diesem Fall kann ein gut strukturiertes Skript oder ein Service klarer und einfacher zu warten sein als ein komplexer visueller Workflow.

Es gibt viele Workflow-Automatisierungs-Tools. Zapier und Make sind beliebt, aber die meisten davon sind Cloud-only. Das bedeutet, die Daten laufen über deren Server, und die Kosten können schnell steigen, wenn die Nutzung zunimmt. n8n verfolgt einen anderen Ansatz: Es ist source-available und kann vollständig self-hosted betrieben werden, was es zur starken Wahl für alle macht, denen Datenschutz, Kostenkontrolle oder die volle Kontrolle über die eigene Infrastruktur wichtig ist.

Im Kern ist n8n ein visueller Workflow-Editor und eine Low-Code-Plattform. Jede App, jeder Service oder logische Schritt wird als Node dargestellt, und man verbindet sie, indem man Linien zwischen ihnen zieht. Kein Programmieren erforderlich. Dieses Drag-and-Drop-System macht den Aufbau auch komplexer Automatisierungs-Pipelines intuitiv, selbst für Menschen ohne Programmierkenntnisse.

n8n wird mit Hunderten von integrierten Integrationen für beliebte Services geliefert. Für Services, die nicht enthalten sind, kann ein generischer HTTP-Request-Node verwendet werden, um sich mit jeder beliebigen API zu verbinden, was nahezu unbegrenzte Möglichkeiten bietet. Es gibt außerdem KI-Agent-Nodes, mit denen sich Large Language Models einbinden und intelligente, reasoning-basierte Schritte in Workflows integrieren lassen.

n8n auf der eigenen Infrastruktur zu betreiben hat einige klare Vorteile. Die Daten bleiben auf den eigenen Servern – besonders wichtig, wenn die Workflows sensible Geschäfts- oder Nutzerdaten verarbeiten. Per-Task- oder per-Operation-Pricing entfällt, da die Hauptkosten der eigene Server sind. Und da man die Instanz selbst verwaltet, hat man volle Kontrolle über Updates, Konfiguration und Zugriff.

n8n ist besonders nützlich, wenn Workflows Verzweigungslogik mit If-else-Bedingungen erfordern, wenn Datenschutz wichtig ist, oder wenn eine Verbindung zu Services benötigt wird, die auf anderen Plattformen keine offiziellen Integrationen haben. Wer Flexibilität und Kontrolle möchte, wird mit n8n kaum eine bessere Alternative finden.

Genug Theorie, in den folgenden Abschnitten wird n8n auf einem Seed eingerichtet und es werden zwei Beispiel-Workflows mit der dataforest API erstellt: einer prüft automatisch auf VM-Upgrades, der andere sendet regelmäßig einen Kostenbericht für alle laufenden Seeds.

Für das Deployment von n8n gibt es mehrere Möglichkeiten. Eine Option ist die Nutzung einer automatischen Deployment-Lösung wie Coolify oder Dokploy, die Management-Aufgaben übernimmt. Das ist besonders hilfreich, wenn neben n8n noch weitere Anwendungen deployt werden sollen. Eine detaillierte Anleitung zur Installation von n8n über Coolify findet sich in diesem Guide.

Alternativ lässt sich n8n auf einer eigenen virtuellen Maschine mit Docker Compose betreiben. Die folgende Kurzanleitung führt durch den Setup-Prozess.

Vor dem Start sollte der Seed die Systemanforderungen für den Betrieb von n8n erfüllen. Als Betriebssystem kann eines der folgenden gewählt werden: Debian, Ubuntu (LTS), RockyLinux oder AlmaLinux. Der Seed sollte mit einem SSH-Key für sicheren Zugriff eingerichtet sein.

Außerdem sollte folgendes vorbereitet sein:

  • Docker Engine und Docker Compose installiert
  • SSH-Zugriff auf die VM
  • eine Subdomain für den Seed (es kann auch der bereits erstellte Hostname des Seeds verwendet werden)

Die folgende Anleitung basiert auf diesem Guide für den Betrieb von n8n auf einem Seed mit Docker Compose.

Verbindung per SSH zum Seed herstellen:

bash
ssh root@your-seed-ip

Ein Projektverzeichnis erstellen und hinein navigieren:

bash
mkdir n8n-compose && cd n8n-compose

Darin eine .env-Datei erstellen:

bash
nano .env

Folgenden Inhalt einfügen. DOMAIN_NAME, SUBDOMAIN, GENERIC_TIMEZONE und SSL_EMAIL müssen mit den eigenen Daten befüllt werden. Wenn der Hostname des Seeds verwendet wird, z. B. https://my-seed.mycloudvps.de, statt einer eigenen Domain, wäre die Domain mycloudvps.de und die Subdomain my-seed.

text
# DOMAIN_NAME and SUBDOMAIN together determine where n8n will be reachable from
# The top level domain to serve from
DOMAIN_NAME=example.com

# The subdomain to serve from
SUBDOMAIN=n8n

# The above example serve n8n at: https://n8n.example.com

# Optional timezone to set which gets used by Cron and other scheduling nodes
# New York is the default value if not set
GENERIC_TIMEZONE=Europe/Berlin

# The email address to use for the TLS/SSL certificate creation
SSL_EMAIL=user@example.com

Wer PostgreSQL statt des standardmäßigen SQLite verwenden möchte, um Credentials, vergangene Ausführungen und Workflows zu speichern, kann zusätzliche Umgebungsvariablen hinzufügen.

Zurück im Projektverzeichnis wird ein Ordner local-files erstellt, der für den Datenaustausch zwischen der n8n-Instanz und dem Host-System zuständig ist:

bash
mkdir local-files

Dann eine Docker-Compose-Datei compose.yaml erstellen:

bash
nano compose.yaml

Sie konfiguriert einen Container für n8n und einen für den Reverse Proxy Traefik. Folgenden Inhalt einfügen:

yaml
services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.n8n.tls=true
      - traefik.http.routers.n8n.entrypoints=web,websecure
      - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n.headers.STSPreload=true
      - traefik.http.routers.n8n.middlewares=n8n@docker
    environment:
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_RUNNERS_ENABLED=true
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:

Starte nun n8n:

bash
docker compose up -d

Zum Stoppen:

bash
docker compose stop

Die Firewall sollte eingehenden Traffic auf Port 22 (SSH), 80 (HTTP) und 443 (HTTPS) erlauben.

n8n ist nun im Browser erreichbar unter https://your-subdomain.your-domain, z. B. https://my-seed.mycloudvps.de wenn der Hostname des Seeds verwendet wurde. Dort kann der erste Admin-Account angelegt werden!

  1. E-Mail-Adresse, Vor- und Nachnamen eingeben und ein sicheres Passwort wählen.
  2. Gewünschte Anpassungen für den Account auswählen.
  3. Beim ersten Öffnen des Dashboards erscheint ein Popup. Die E-Mail-Adresse eingeben, um die kostenlosen bezahlten Features freizuschalten. Ein Aktivierungsschlüssel wird per E-Mail zugeschickt, zusammen mit einer Anleitung, wie er in den Einstellungen hinzugefügt werden kann.
n8n Set up owner account

Jetzt kann der erste Workflow erstellt werden!

Zunächst sollte verstanden werden, was ein Workflow beinhaltet und welche Komponenten er hat.

Ein Workflow ist eine definierte Abfolge von Schritten, die durch bestimmte Events ausgelöst werden.

Es gibt verschiedene Arten von Nodes, unter anderem:

  • Ein Trigger-Node: Er aktiviert den Workflow. Er wird durch ein Event ausgelöst und startet die definierte Abfolge von Aktionen.
  • Regular-Node / Integration-Node: Kann integrierte Integrationen von Apps und Services sein, um Aktionen über eine API auszuführen. Kann auch HTTP-Requests sein, mit denen eine Verbindung zu jeder API hergestellt werden kann, die nicht auf der vordefinierten Liste steht.
  • Logic-Nodes: Sie steuern den Datenfluss, z. B. durch If-else-Bedingungen oder Filter.
  • AI-Agent-Nodes: Verbinden sich mit einem LLM, fügen Memory hinzu und erlauben es, Tools anzuhängen (basierend auf der Eingabe und dessen Reasoning).

In den folgenden Workflows wird n8n Version 2.1.5 verwendet. Außerdem wird immer ein Personal Access Token verwendet, um sich mit der dataforest API zu verbinden. Dieser kann im Dashboard erstellt und dann als Bearer Auth Credential im n8n-Dashboard hinzugefügt werden.

Dieser Workflow prüft regelmäßig, ob für die VM Aktualisierungen verfügbar sind. Wenn Updates gefunden werden, wird zunächst ein Snapshot als Sicherheitsmaßnahme erstellt und anschließend das System-Upgrade durchgeführt.

  1. Trigger-Node: Läuft nach einem Zeitplan (z. B. einmal täglich), um den Workflow automatisch zu starten.
  2. VM auf Upgrades prüfen: Verwendet einen SSH-Node, um sich mit der VM zu verbinden und zu prüfen, ob Upgrades verfügbar sind.
  3. Bedingte Prüfung: Wenn keine Updates verfügbar sind, stoppt der Workflow. Wenn Updates existieren, wird er fortgesetzt.
  4. Snapshot erstellen: Sendet einen POST-Request, um vor dem Upgrade einen Snapshot zu erstellen:
http
POST https://api.dataforest.net/api/v1/public/seeds/{seedID}/actions
Authorization: Bearer <your-personal-access-token>
Content-Type: application/json

{
  "type": "seed.snapshot",
  "name": "pre-upgrade-snapshot"
}
  1. Warten und Snapshot in einer Schleife überwachen: Prüft kontinuierlich den Snapshot-Status anhand der actionID aus der vorherigen Antwort. Wenn der Snapshot fehlschlägt, wird eine Benachrichtigung gesendet und der Workflow stoppt.
http
GET https://api.dataforest.net/api/v1/public/seeds/{seedID}/actions/{actionID}
Authorization: Bearer <your-personal-access-token>
  1. VM upgraden: Führt das System-Upgrade auf der VM über einen SSH-Node aus.
  2. Benachrichtigung: Sendet eine E-Mail, sobald das Upgrade abgeschlossen ist, optional inklusive Exit-Status und Ausgabe des Upgrade-Prozesses. Dieser Node benötigt SMTP-Zugangsdaten, zum Beispiel ein Gmail-Konto mit einem App-Passwort ist eine einfache Option. Die genaue Konfiguration hängt vom jeweiligen E-Mail-Anbieter ab.
n8n Automatisierter Seed-Upgrades Workflow

Optional kann ein „Human in the Loop"-Schritt vor der Snapshot-Erstellung hinzugefügt werden. Dadurch lässt sich manuell bestätigen, ob das Upgrade zu diesem Zeitpunkt durchgeführt werden soll. Der Workflow kann pausieren und per E-Mail, Messaging oder einer anderen Benachrichtigungsmethode auf Freigabe warten.

Eine weitere nützliche Erweiterung ist eine Schleife, die prüft, ob die Snapshot-Erstellung aktuell erlaubt ist, und entsprechend handelt. Dies kann durch einen GET-Request an /seeds/{seedID}/actions erreicht werden, um zu verifizieren, dass die Snapshot-Erstellung verfügbar ist. Da die Anzahl der Snapshots pro VM begrenzt ist, muss gegebenenfalls ein bestehender Snapshot gelöscht werden, bevor ein neuer erstellt werden kann. Ohne diese Prüfung kann die Snapshot-Erstellung fehlschlagen.

Außerdem empfiehlt es sich, eine Fehlerbenachrichtigung einzubauen, falls die Snapshot-Erstellung nicht erfolgreich ist.

Schließlich kann nach dem Upgrade eine zusätzliche Prüfung hinzugefügt werden, um festzustellen, ob ein System-Neustart erforderlich ist.

Dieser Workflow sendet automatisch Kostenberichte für alle aktuell laufenden Seeds.

  1. Trigger-Node: Läuft nach einem Zeitplan, um den Workflow automatisch zu starten.
  2. Alle Seeds abrufen: Verwendet einen HTTP-Request-Node, um alle Seeds abzurufen:
http
GET https://api.dataforest.net/api/v1/public/seeds
Authorization: Bearer <your-personal-access-token>
  1. Daten aufteilen: Die API gibt im 2. Schritt Metadaten und ein Array aller Seeds zurück. Damit jeder Seed einzeln weiterverarbeitet werden kann, wird der Split-Node verwendet, um die Liste in einzelne Elemente aufzuteilen. In der Option „Fields To Split Out" wird der Wert auf seeds gesetzt.
  2. Jeden Seed verarbeiten: Ein HTTP-Request-Node ruft die Details für jeden einzelnen Seed ab. Das id-Feld aus dem vorherigen Schritt wird in die URL gezogen, sodass n8n jeden Eintrag automatisch verarbeitet – ohne zusätzliche Schleifen.
http
GET https://api.dataforest.net/api/v1/public/seeds/{seedID}
Authorization: Bearer <your-personal-access-token>
  1. Ausgabedaten für E-Mail formatieren: Dieser Code-Node führt JavaScript aus, um eine zusammenfassende E-Mail für alle Seeds auf einmal zu erstellen. Ein mögliches Format:
javascript
const items = $input.all();

return [
  {
    json: {
      report: items.map(item => {
        return `• ${item.json.name}
        - MTD Today: ${item.json.gross_mtd_costs} €
        - Month Forecast: ${item.json.gross_estimated_costs} €`;
      }).join('\n\n')
    }
  }
];
  1. Kostenbericht senden: Verwendet den Send-Email-Node, um den formatierten Kostenbericht an eine eigene E-Mail-Adresse zu senden. Dieser Node benötigt SMTP-Zugangsdaten, zum Beispiel ein Gmail-Konto mit einem App-Passwort ist eine einfache Option. Die genaue Konfiguration hängt vom jeweiligen E-Mail-Anbieter ab.
n8n Ausgeführter Workflow Kostenberichte

Dieser Workflow hilft dabei, die Ausgaben im Blick zu behalten, indem automatisch klare Kostenzusammenfassungen für jeden Seed generiert und versendet werden.

n8n macht Workflow-Automatisierung zugänglich, flexibel und vollständig self-hostbar. Von routinemäßigen Systemprüfungen und Kostenabrechnungen bis hin zu komplexen, KI-gestützten Entscheidungsprozessen können Workflows Zeit sparen, Fehler reduzieren und Prozesse konsistent halten. Insbesondere durch die Integration von KI-Agent-Nodes lassen sich Reasoning, Memory und natürliches Sprachverständnis in Workflows einbinden, für intelligente Automatisierung, die sich an den Kontext anpasst und Aufgaben übernimmt, die bisher Menschen vorbehalten waren. n8n auf dem eigenen Seed zu betreiben gibt volle Kontrolle über Automatisierungs-Pipelines und hält Zugangsdaten sowie Daten privat. Es ist eine praktische und kosteneffiziente Alternative zu gehosteten Automatisierungsdiensten.

Bereit loszulegen?

Erstelle deinen ersten Seed und starte in wenigen Minuten.

Noch Fragen?

Dann stehen Ihnen unsere Experten gerne zur Verfügung. Sie werden überrascht sein, wie schnell wir sind.

Hintergrundbild