n8n — Abläufe automatisieren auf dem eigenen Server
Ein Formular nimmt Kundenanfragen an, eine KI ordnet sie ein und entwirft eine Antwort, ein Mensch gibt frei. Alles auf Deinem eigenen Server, mit einem Update-Weg, dem Du vertrauen kannst.
▶ Das ganze Video
Am Stück, oder unten Stufe für Stufe mit Text daneben.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Worum geht's?
Jede Firma hat Abläufe, die immer gleich beginnen: Eine Anfrage kommt herein, jemand liest sie, sortiert sie und schreibt eine Antwort. n8n verbindet solche Schritte zu einem Workflow, der auf Deinem eigenen Server läuft.
In dieser Schulung baust Du einen Ablauf für die fiktive Nordwerk GmbH. Eine KI ordnet Anfragen ein und entwirft Antworten, aber abgeschickt wird nichts, bevor ein Mensch freigegeben hat. Zwei Stellen, an denen es beim Aufbau wirklich gehakt hat, stehen drin: der Fehler 404 beim Anschluss des Modells (Stufe 7) und ein Formular, das der Kundin die Freigabe gezeigt hätte (Stufe 10).
Den Abschluss bildet Stufe 11: sichern, aktualisieren, prüfen und der Rückweg. n8n erscheint fast jede Woche neu, und genau dort passieren die meisten Unfälle.
Selbstlern-Kurs zum Durchklicken. Dein Fortschritt wird lokal gespeichert.
? Für wen ist das interessant?
↗ Was Du vorher brauchst
- Einen VPS mit SSH-Zugang: Self-Hosting & VPS, SSH.
- Docker mit Compose auf diesem Server: Docker.
- Einen Zugang zu einem Sprachmodell: hier ein AuxData-API-Schlüssel. Ein lokales Ollama aus Lokale KI geht auch.
📚 Die zwölf Stufen
ℹ Stand der Dinge
Aufgenommen am 23. September 2026 mit n8n 2.39.10 und dem Update auf 2.40.5 (damals stable), Docker 29.6 mit Compose 5.3 auf einem VPS mit Ubuntu 24.04 LTS. Das Sprachmodell ist GLM 5.3 (mistral/zai-glm-5-3) über das AuxData-Gateway.
n8n erscheint fast wöchentlich neu, Beschriftungen und Knotenversionen ändern sich. Was sich selten ändert, sind die Begriffe: Trigger, Node, Item, Expression, Credential, Execution, Publish. Danach suchen, nicht nach dem genauen Wortlaut im Video. Im Oktober 2026 folgt n8n 3.0.
Was n8n ist
Knoten, Auslöser, Ausführungen und das Ziel dieser Schulung.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
n8n ist ein Werkzeug für Abläufe. Man setzt Knoten auf eine Fläche und verbindet sie. Jeder Knoten erledigt einen Schritt, und die Daten wandern von links nach rechts.
Das hier ist der erste der beiden Abläufe, die wir bauen. Links kommt eine Anfrage über ein Formular herein. Ein Sprachmodell ordnet sie ein, ein zweites schreibt einen Entwurf, und am Ende landet alles in einer Tabelle.
Der zweite Ablauf ist das Freigabeformular. Nur wer bei n8n angemeldet ist, kann es öffnen, den Entwurf prüfen, ändern und freigeben.
Und hier sieht man das Ergebnis: jede Anfrage mit Kategorie, Entwurf und Status. Alles läuft auf einem eigenen Server. Die KI kommt über das AuxData-Gateway mit einem Modell in Europa.
1 Die Begriffe, die Du brauchst
2 Was wir bauen
Die fiktive Nordwerk GmbH baut Werkstattmöbel und bekommt jeden Tag Anfragen. Am Ende dieser Schulung laufen zwei Workflows:
- Kundenanfragen vorsortieren. Ein Formular nimmt die Anfrage an. Ein Sprachmodell ordnet sie ein (Angebot, Support, Beschwerde, Sonstiges), ein zweiter Aufruf schreibt einen Antwortentwurf. Alles landet mit Status
offenin einer Tabelle. - Antworten freigeben. Ein zweites Formular, das nur angemeldete n8n-Nutzer öffnen können. Dort prüft ein Mensch den Entwurf, ergänzt ihn und gibt ihn frei. Solange Platzhalter in eckigen Klammern stehen, lehnt der Ablauf die Freigabe ab.
3 Was n8n ist und was nicht
n8n ist ein Werkzeug für Abläufe mit über tausend fertigen Knoten. Du betreibst es selbst, mit Docker auf einem eigenen Server. Die Lizenz heißt Sustainable Use License: Für Deine eigenen Abläufe darfst Du n8n frei nutzen, als Dienst an andere weiterverkaufen darfst Du es nicht.
n8n rechnet keine KI selbst. Es ruft ein Sprachmodell über eine Schnittstelle auf. In dieser Schulung ist das GLM 5.3 über das AuxData-Gateway, das Modell wird über Mistral in Europa betrieben. Ein lokales Ollama aus der Schulung Lokale KI geht genauso.
✓ Kurz geprüft
Voraussetzungen und Sicherheitsregeln
Was vor dem ersten Befehl stehen muss.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Erstens einen eigenen Server, also einen VPS, auf den Du Dich per SSH anmelden kannst. Wie das geht, zeigen die Schulungen zu Self-Hosting und SSH.
Zweitens Docker mit Compose auf diesem Server. Die Grundlagen stehen in der Docker-Schulung, hier setze ich sie voraus.
Drittens einen Zugang zu einem Sprachmodell. Ich nehme das AuxData-Gateway. Jeder Dienst, der wie OpenAI spricht, geht genauso, auch ein lokales Ollama.
Und viertens eine Regel für die ganze Schulung: Wir üben auf einer eigenen Instanz. Nicht auf dem n8n, in dem schon echte Abläufe Deiner Firma laufen.
1 Deine Ausgangslage
- Ein VPS mit SSH-Zugang. Ein gemieteter Linux-Server, auf den Du Dich per Schlüssel anmeldest. Wie das geht: Self-Hosting & VPS und SSH. Für diese Übung reichen 2 GB RAM, n8n braucht im Leerlauf etwa 300 MB.
- Docker und Docker Compose auf dem Server. Prüfen mit
docker compose version. Wenn Container neu für Dich sind: erst die Docker-Schulung. - Ein Zugang zu einem Sprachmodell. Hier: ein persönlicher API-Schlüssel aus AuxData (Profil → API-Schlüssel). Jeder Dienst mit OpenAI-kompatibler Schnittstelle geht genauso.
- Die Übungsdateien aus dem Abschnitt Befehle zum Kopieren: Compose-Datei,
.env, Systemanweisung und der Freigabe-Workflow zum Einfügen.
2 Drei Regeln, bevor Du anfängst
127.0.0.1. Du erreichst es über einen SSH-Tunnel. Wer zuerst die Einrichtungsseite aufruft, wird Eigentümer der Instanz. Deshalb darf sie nie offen im Netz stehen.docker compose down -v im Ordner /opt/n8n löscht die Übungsinstanz samt Daten. Danach kannst Du bei Stufe 3 neu anfangen.✓ Kurz geprüft
Installieren
Eine Compose-Datei, eine feste Version, ein Schlüssel. Auf dem VPS, im Terminal.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Wir sind per SSH auf dem Server angemeldet. Zuerst die Kontrolle, ob Docker und Compose da sind. Beide antworten mit ihrer Versionsnummer, also kann es losgehen.
n8n bekommt einen eigenen Ordner unter /opt. Darin liegt die Compose-Datei. Das Wichtigste steht in der Zeile mit dem Image: Dort steht keine feste Zahl, sondern eine Variable für die Version. Und der Port ist nur an 127.0.0.1 gebunden, also von außen nicht erreichbar.
Die Einstellungen stehen in der Datei .env. Die Version ist hier fest auf 2.39.10 gesetzt, mit Absicht eine ältere, damit wir später ein echtes Update machen können. Dazu kommt ein zufälliger Schlüssel, mit dem n8n alle gespeicherten Zugangsdaten verschlüsselt. Den zeige ich nicht, und die Datei darf nur root lesen.
Compose prüft die Datei, dann startet ein einziger Befehl alles. Docker lädt beim ersten Mal das Image, legt ein Netzwerk und ein Volume für die Daten an und startet den Container.
Der Container läuft. Die Warnungen in den Logs sind an dieser Stelle harmlos. Entscheidend ist die letzte Zeile: Der Gesundheitscheck antwortet mit Status ok.
Von außen ist Port 5678 zu. Auf Deinem eigenen Rechner öffnest Du deshalb einen SSH-Tunnel. Solange er läuft, ist n8n im Browser unter localhost:5678 erreichbar, und nur für Dich.
1 Ordner und Compose-Datei
docker compose version antwortet./opt/n8n anlegen, hineinwechseln, compose.yml mit dem Inhalt unten anlegen (z. B. mit nano compose.yml).ls zeigt die Datei compose.yml.docker compose config zeigt den Fehler mit Zeilennummer.services:
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
container_name: n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
env_file: .env
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
.env. Und der Port hängt nur an 127.0.0.1. Von außen ist n8n damit nicht erreichbar.2 Einstellungen und Schlüssel
N8N_VERSION=2.39.10 GENERIC_TIMEZONE=Europe/Berlin TZ=Europe/Berlin WEBHOOK_URL=http://localhost:5678/ N8N_DIAGNOSTICS_ENABLED=false
N8N_VERSION ist bewusst eine feste Nummer, nicht latest. So entscheidest Du, wann sich etwas ändert. Wir starten absichtlich mit einer älteren Version, damit Stufe 11 ein echtes Update zeigen kann.echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" >> .env chmod 600 .env
.env in jede Sicherung (Stufe 11) und nie in ein Git-Repository.3 Starten und prüfen
docker compose config --quiet && echo 'Konfiguration ok' docker compose up -d docker compose ps curl -s http://127.0.0.1:5678/healthz
/opt/n8n.docker compose ps zeigt den Container n8n als Up, curl antwortet {"status":"ok"}.docker compose logs n8n lesen. Häufigste Ursache: ein Tippfehler in der .env.4 Der Tunnel von Deinem Rechner
ssh -N -L 5678:127.0.0.1:5678 root@DEIN-SERVER
http://localhost:5678, und nur Du. DEIN-SERVER ist ein Platzhalter für Adresse oder SSH-Alias.✓ Kurz geprüft
Der erste Zugang
Wer sich zuerst anmeldet, gehört die Instanz.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Beim ersten Aufruf fragt n8n nach einem Konto. Wer das hier ausfüllt, wird Eigentümer der ganzen Instanz. Deshalb der Tunnel: Niemand anderes kommt vor Dir an diese Seite.
Danach bietet n8n einen eingebauten KI-Assistenten an. Den brauchen wir nicht, er würde zusätzliche Dienste einschalten. Ich lege ihn für später zurück.
Die Startseite ist noch leer. Links oben geht es zu neuen Workflows, unten liegen Hilfe und Einstellungen. Unter Hilfe steht der Punkt About n8n.
Hier steht die Version, 2.39.10, und die Lizenz. n8n ist Fair Code: Du darfst es für Deine eigenen Abläufe frei betreiben, aber nicht als Dienst an andere weiterverkaufen.
1 Das Eigentümerkonto
http://localhost:5678 öffnen, E-Mail, Vor- und Nachname und ein Passwort mit mindestens 8 Zeichen eintragen, Next.docker exec n8n n8n user-management:reset setzt die Konten zurück.2 Die Oberfläche in einem Satz je Bereich
- Links oben: neuer Workflow, Suche, Seitenleiste.
- Übersicht (Haus): Workflows, Zugänge (Credentials), Ausführungen (Executions), Variablen und Datentabellen (Data tables). Solange noch nichts da ist, fehlen die Reiter.
- Links unten: Hilfe mit About n8n (Version, Lizenz) und die Einstellungen.
Die Oberfläche von n8n ist englisch. Diese Schulung nennt die englischen Beschriftungen so, wie sie auf dem Bildschirm stehen, und erklärt sie auf Deutsch.
✓ Kurz geprüft
Der erste Workflow
Auslöser, Felder und ein Ausdruck: die drei Handgriffe, die in jedem Ablauf vorkommen.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Ein neuer Workflow bekommt zuerst einen Namen. Dann braucht er einen Auslöser, denn ohne Auslöser läuft nichts. Für den Anfang nehme ich den einfachsten: Er startet, wenn ich auf einen Knopf drücke.
Dahinter kommt Edit Fields. Dieser Knoten setzt Felder mit Namen und Wert. Das erste Feld heißt gruss und hat einen festen Text.
Das zweite Feld bekommt keinen festen Text, sondern einen Ausdruck. Dafür schalte ich von Fixed auf Expression. Alles zwischen den doppelten geschweiften Klammern rechnet n8n aus, hier die aktuelle Uhrzeit. Darunter steht schon die Vorschau.
Ein Klick auf Execute step, und rechts erscheint das Ergebnis. Das ist ein Item: ein Datensatz mit zwei Feldern. Alles in n8n sind solche Items. Jeder Knoten bekommt welche und gibt welche weiter.
1 Selbst nachbauen
gruss, Wert Hallo Nordwerk.gruss.2 Fixed oder Expression
Jedes Feld hat zwei Zustände. Fixed heißt: Der Text wird genau so übernommen. Expression heißt: Alles zwischen {{ }} rechnet n8n aus, bevor der Knoten läuft.
{{ $now.toFormat('HH:mm') }}
$now ist die aktuelle Zeit, $json sind die Daten des Items, das gerade im Knoten ankommt. Beides begegnet Dir in jeder weiteren Stufe.{{ $now… }}. Erst auf Expression umschalten.✓ Kurz geprüft
Das Anfrageformular
Ein Formular, das n8n selbst ausliefert, mit Test-Adresse und festgepinnten Daten.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Jetzt der echte Ablauf. Er beginnt mit einem Formular, das n8n selbst ausliefert. Titel und Beschreibung sind das, was Kundinnen und Kunden später oben lesen.
Drei Felder: Name, E-Mail und das Anliegen als großes Textfeld. Alle drei sind Pflicht. Die Beschriftung ist gleichzeitig der Name, unter dem der Wert später im Ablauf steht.
Execute step öffnet das Formular unter seiner Test-Adresse. Ich fülle es aus wie eine Kundin, die nach einem Preis fragt, und schicke es ab.
Zurück in n8n sind die Daten angekommen, als ein Item mit Name, E-Mail und Anliegen. Ich pinne sie fest. Dann muss ich beim Weiterbauen nicht jedes Mal das Formular neu ausfüllen.
Das lila Symbol am Knoten zeigt: Hier liegen festgepinnte Testdaten. Beim echten Betrieb werden sie nicht benutzt.
1 Das Formular
$json.Anliegen.2 Testen und festpinnen
Execute step öffnet das Formular unter seiner Test-URL in einem neuen Tab. Nur solange n8n auf diesen einen Test wartet, nimmt die Adresse etwas an. Nach dem Absenden stehen die Daten rechts im Knoten.
Nimm als Testanfrage eine Preisfrage, zum Beispiel: „Guten Tag, was kostet die Werkbank WB-180 mit Buchenplatte, und wie lange ist die Lieferzeit nach Augsburg? Wir bräuchten drei Stück.“ Weitere Beispiele stehen in beispielanfragen.md.
Dann das Pin-Symbol im Output drücken. Festgepinnte Daten benutzt n8n bei jedem Test, ohne dass Du das Formular erneut ausfüllen musst. Im echten Betrieb werden sie ignoriert.
✓ Kurz geprüft
KI anschließen
Text Classifier, der Zugang zum AuxData-Gateway und ein Fehler, den man kennen sollte.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Hinter das Formular kommt ein Text Classifier. Welcher Text eingeordnet werden soll, ziehe ich einfach aus der linken Spalte ins Feld. So entsteht der Ausdruck von selbst, und die Vorschau zeigt gleich den echten Text.
Drei Kategorien: Angebot, Support und Beschwerde, jede mit einer kurzen Beschreibung. Das Modell liest die Beschreibungen mit. Und alles, was nicht klar passt, soll nicht verschwinden, sondern in einen eigenen Zweig namens Other.
Jetzt das Modell. Ich nehme den Knoten OpenAI Chat Model, weil das AuxData-Gateway dieselbe Sprache spricht. Im Zugang stehen zwei Dinge: der persönliche Schlüssel aus AuxData und die Adresse des Gateways statt der von OpenAI.
Die Modellliste kommt schon vom Gateway, das ist der Beweis, dass der Zugang stimmt. Ich suche nach GLM und nehme GLM 5.3, über Mistral in Europa betrieben.
Der erste Test geht schief, und zwar mit Absicht. Fehler 404. Der Grund steht nicht in der Meldung: Der Knoten benutzt von sich aus die neuere Responses-Schnittstelle von OpenAI, und die kennt das Gateway nicht.
Also im Modell den Schalter Use Responses API ausschalten und noch einmal. Jetzt kommt die Antwort, gut eine Sekunde später, und die Anfrage landet im Zweig Angebot.
Auf der Fläche sieht man die vier Ausgänge. Jeder Zweig ist ein eigener Weg, den die Daten nehmen können.
1 Der Klassifizierer
{{ $json.Anliegen }} und darunter den echten Text. Der Knoten hat vier Ausgänge: Angebot, Support, Beschwerde, Other.| Kategorie | Beschreibung (liest das Modell mit) |
|---|---|
| Angebot | Fragt nach Preis, Angebot, Kauf, Lieferzeit oder Verfügbarkeit. |
| Support | Meldet ein Problem mit einem Produkt oder braucht Hilfe bei der Nutzung. |
| Beschwerde | Äußert Ärger oder Unzufriedenheit, reklamiert oder fordert Ersatz. |
2 Der Zugang zum Modell
https://auxdata.ai/v1, Name z. B. AuxData-Gateway. Speichern.glm, wähle mistral/zai-glm-5-3./v1.404 page not found, ohne Schalter Antwort in unter einer Sekunde.http://host.docker.internal:11434, nicht localhost. Ein Programm, das nur die Responses API spricht, lässt sich über einen Übersetzer wie die FL-Pro-Bridge anbinden. Für n8n braucht es den nicht.✓ Kurz geprüft
Der Antwortentwurf
Vier Zweige zusammenführen und der KI klare Regeln geben.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Hinter den Zweig Angebot kommt ein Edit-Fields-Knoten namens Kategorie festhalten. Er merkt sich, über welchen Ausgang die Anfrage kam. Das steht in einem kurzen Ausdruck: eine Liste der vier Namen, und die Nummer des Ausgangs sucht den richtigen heraus. Die Vorschau zeigt noch undefined, weil sie den Zweig nicht kennt. Beim Ausführen steht dort der richtige Name.
Include Other Input Fields behält Name, E-Mail und Anliegen. Dann ziehe ich die anderen drei Ausgänge in denselben Knoten. Egal wie die Anfrage eingeordnet wurde, ab hier geht es gemeinsam weiter.
Den Entwurf schreibt eine Basic LLM Chain. Die Nachricht an das Modell enthält die Kategorie und das Anliegen. Dazu kommt eine Systemanweisung mit Regeln, die ich von der Schulungsseite einfüge. Die wichtigste Regel: keine Preise, Termine oder Zusagen erfinden, sondern Platzhalter in eckigen Klammern setzen.
Die Kette bekommt ihr eigenes Modell, wieder GLM über das Gateway, wieder ohne Responses API. Und das Ergebnis: ein höflicher Entwurf, bei dem Preis und Lieferzeit als Platzhalter offen bleiben. Genau so soll es sein. Die KI erfindet nichts, der Mensch ergänzt.
Auf der Fläche steht jetzt der Ablauf bis zum Entwurf.
1 Die Kategorie festhalten
Hinter jedem Zweig muss später dasselbe passieren. Statt vier gleicher Ketten kommt ein einziger Knoten, in den alle Zweige münden. Er schreibt dazu, über welchen Ausgang die Anfrage kam.
{{ ['Angebot', 'Support', 'Beschwerde', 'Sonstiges'][$prevNode.outputIndex] }}
$prevNode.outputIndex ist die Nummer des Ausgangs, über den das Item kam, gezählt ab 0. Die Vorschau zeigt undefined, weil sie keinen Zweig kennt. Beim Ausführen steht dort der richtige Name. Include Other Input Fields einschalten, sonst gehen Name, E-Mail und Anliegen verloren.2 Die Kette mit Regeln
text mit dem Entwurf.Kategorie: {{ $json.kategorie }}
Anliegen: {{ $json.Anliegen }}
Du schreibst Antwortentwürfe für die Nordwerk GmbH, einen kleinen Hersteller von Werkstattmöbeln. Schreibe höflich, knapp (höchstens 120 Wörter), per Sie, auf Deutsch. Regeln: - Erfinde keine Preise, Termine, Lieferzeiten oder Zusagen. Wo eine solche Angabe nötig ist, schreibe einen Platzhalter in eckigen Klammern, z. B. [Preis ergänzen]. - Bei Beschwerden: entschuldige dich für den Ärger, versprich nichts, kündige einen persönlichen Rückruf an. - Gib nur den Text der Antwort aus, ohne Betreffzeile und ohne Erklärungen.
[Preis ergänzen], [Lieferzeit ergänzen] und [Kontaktdaten ergänzen]. Die vier Testanfragen aus beispielanfragen.md wurden alle richtig eingeordnet. Das ist eine Stichprobe, keine Garantie. Deshalb gibt es die Freigabe.✓ Kurz geprüft
Ablegen
Eine Datentabelle als Arbeitsliste, ohne eigene Datenbank.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Die Entwürfe brauchen einen Ort. n8n hat dafür eigene Datentabellen, ohne zusätzliche Datenbank. Ich lege die Tabelle anfragen an, mit sieben Spalten für Name, E-Mail, Anliegen, Kategorie, Entwurf, Status und die freigegebene Antwort.
Zurück im Workflow kommt hinter den Entwurf der Knoten Data table mit der Aktion Insert row. Er bekommt den Namen Zur Freigabe ablegen.
Die Felder ziehe ich wieder aus der linken Spalte in die Spalten der Tabelle. Beim Status steht fester Text: offen.
Tidy up räumt die Fläche auf. Dann der ganze Ablauf auf einmal, mit den festgepinnten Testdaten.
Alle Knoten sind grün, und in der Tabelle steht die erste Zeile: Jana Berger, Kategorie Angebot, ein Entwurf, Status offen.
1 Die Tabelle anlegen
anfragen, From scratch. Über Add Column sieben Textspalten: name, email, anliegen, kategorie, entwurf, status, antwort_final.id, createdAt und updatedAt Deine sieben Spalten.2 Der Knoten, der ablegt
entwurf. Bei status fest offen eintippen.offen.status ist leer? Beim Eintippen lag die Vorschau des vorigen Feldes über dem Eingabefeld. Einmal daneben klicken, dann tippen. Genau das ist beim Dreh passiert.✓ Kurz geprüft
Freigabe und Veröffentlichen
Ein Mensch entscheidet, und erst mit Publish gelten die echten Adressen.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Die Freigabe ist ein eigener, zweiter Workflow. Ich kopiere ihn fertig von der Schulungsseite und füge ihn ein. Der erste Knoten ist wieder ein Formular, aber mit einem Unterschied: Authentication steht auf n8n User Auth. Nur wer bei n8n angemeldet ist, kommt hinein.
Warum zwei Workflows? Beim Aufbau habe ich es zuerst in einem versucht. Dann landete die Kundin nach dem Absenden direkt im Freigabeformular und hätte ihre eigene Antwort freigeben können. Getrennt kann das nicht passieren. Jetzt veröffentliche ich beide. Erst damit gelten die echten Adressen.
Die Kundensicht: das Formular unter seiner echten Adresse. Ein Kunde fragt nach einem Rollcontainer. Nach dem Absenden sieht er nur eine kurze Bestätigung. Sonst nichts.
In n8n taucht die Ausführung unter Executions auf. Ein paar Sekunden später steht die Anfrage in der Tabelle, eingeordnet, mit Entwurf und Status offen.
Jetzt die Freigabe. Beim ersten Mal fragt n8n, ob das Formular mit meiner Anmeldung laufen darf. Ich gebe die Nummer der Anfrage ein und sehe den Entwurf. Ich klicke Freigeben, ohne etwas zu ändern. Und der Ablauf sagt nein: Da stehen noch Platzhalter in eckigen Klammern.
Zweiter Anlauf. Preis und Lieferzeit trage ich ein, dann speichern. Jetzt ist die Anfrage freigegeben.
In der Tabelle steht der neue Status und die Antwort, die ein Mensch geprüft hat. Verschicken könnte sie ab hier ein weiterer Knoten, zum Beispiel per E-Mail.
1 Warum zwei Workflows
Naheliegend wäre, im selben Ablauf mit einem Wait-Knoten auf eine Freigabe zu warten. Das haben wir beim Aufbau ausprobiert. Das Ergebnis: Die Kundin landete nach dem Absenden direkt im Freigabeformular und hätte ihre eigene Antwort freigeben können. n8n verkettet ein Formular mit jedem weiteren Formularschritt derselben Ausführung, auch hinter einer Dankesseite.
Deshalb ist die Freigabe ein eigener Workflow mit eigenem Formular, und dieses ist mit n8n User Auth geschützt. Nur angemeldete Nutzer Deiner Instanz kommen hinein, beim ersten Aufruf fragt n8n einmal um Zustimmung.
2 Einfügen, veröffentlichen, durchspielen
anfragen gibt es, Workflow 1 legt Zeilen an.Und dann das Ganze aus beiden Sichten:
- Kundensicht: Formular unter der Production URL öffnen, eine Preisanfrage schicken. Zu sehen ist nur eine kurze Bestätigung („Your response has been recorded“, den Text kannst Du im Formular-Knoten unter Options ändern).
- In n8n: Unter Executions erscheint der Durchlauf, wenige Sekunden später steht die Zeile in der Tabelle.
- Freigabe: Das Formular von Antworten freigeben öffnen, einmal Allow access, die Nummer (Spalte
id) eingeben. Entwurf lesen, Freigeben wählen und ohne Änderung speichern: „Noch nicht freigegeben“, weil Platzhalter übrig sind. - Zweiter Anlauf: Platzhalter ersetzen, speichern: „Anfrage … ist jetzt: freigegeben“. In der Tabelle stehen Status und geprüfte Antwort.
✓ Kurz geprüft
Sichern und Updaten
n8n erscheint fast wöchentlich neu. So spielst Du Updates ein, ohne etwas zu riskieren.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
n8n erscheint fast jede Woche in einer neuen Version. Zuerst also: Was läuft gerade, und was ist neu? Bei uns läuft 2.39.10, die aktuelle stabile ist 2.40.5. Vor jedem Update lohnt ein Blick in die Release-Notes.
Dann sichern, und zwar vollständig. Die Workflows und die Zugänge werden exportiert. Danach halte ich n8n kurz an und packe das ganze Datenvolume in ein Archiv. Und die Datei .env kommt mit, denn ohne den Schlüssel darin sind die gesicherten Zugänge wertlos.
Das eigentliche Update ist klein. In der .env steht jetzt die neue Nummer, nicht latest. So entscheide ich, wann sich etwas ändert, und nicht der nächste Neustart. Pull lädt das Image, up startet den Container neu.
Und dann prüfen. n8n schreibt beim Start selbst, von welcher Version es kommt. Die Versionsnummer stimmt, der Gesundheitscheck sagt ok. In den Startmeldungen stehen übrigens Hinweise auf Einstellungen, die sich mit der nächsten großen Version ändern. Die sollte man lesen.
Und falls doch etwas nicht stimmt: Nur die alte Nummer zurückzusetzen reicht nicht. n8n baut beim Start seine Datenbank auf die neue Version um. Zurück geht es deshalb nur mit der alten Nummer und der Sicherung zusammen. Das habe ich beim Aufbau einmal durchgespielt, es funktioniert.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Im Browser die Gegenprobe. About n8n zeigt jetzt 2.40.5.
Beide Workflows sind noch da und weiterhin veröffentlicht. Die Anmeldung, die Zugänge und die Tabelle haben das Update überstanden.
1 Wie oft, und welche Version
- Feste Nummer statt
latest. Mitlateständert sich n8n beim nächsten Neustart des Servers, ohne dass Du es beschlossen hast. Mit fester Nummer entscheidest Du den Zeitpunkt. - Stable, nicht beta. Am 23. September 2026 zeigten
latestundstableauf 2.40.5,betaauf 2.41.0. Übernimm die Nummer vonstable. - Rhythmus: etwa einmal im Monat, Sicherheitsupdates sofort. Vorher die Release-Notes lesen, besonders bei einer neuen Hauptversion.
2 Sichern: vier Dinge
mkdir -p backups/vor-2.40.5 docker exec n8n n8n export:workflow --backup --output=/home/node/.n8n/sicherung/workflows/ docker exec n8n n8n export:credentials --backup --output=/home/node/.n8n/sicherung/zugaenge/ docker cp n8n:/home/node/.n8n/sicherung backups/vor-2.40.5/ docker compose stop docker run --rm -v n8n_n8n_data:/daten:ro -v $PWD/backups/vor-2.40.5:/ziel alpine tar czf /ziel/n8n_data.tar.gz -C /daten . cp .env backups/vor-2.40.5/env.sicherung && chmod 600 backups/vor-2.40.5/env.sicherung
.env: Die exportierten Zugänge sind mit dem Schlüssel darin verschlüsselt und ohne ihn wertlos. Für die Volume-Sicherung wird n8n kurz angehalten.3 Aktualisieren und prüfen
sed -i 's/^N8N_VERSION=.*/N8N_VERSION=2.40.5/' .env docker compose pull docker compose up -d
docker compose logs n8n | grep -E 'version change|Version:' docker exec n8n n8n --version curl -s http://127.0.0.1:5678/healthz
Recorded version change: 2.39.10 -> 2.40.5. Danach im Browser: About n8n, beide Workflows veröffentlicht, ein Testformular abschicken.4 Der Rückweg
n8n baut beim Start seine Datenbank auf die neue Version um. Nur die alte Nummer zurückzusetzen, reicht deshalb nicht. Zurück geht es mit der alten Nummer und der Sicherung. Beim Aufbau dieser Schulung ausprobiert: danach wieder 2.39.10, alle 36 Probe-Workflows da.
docker compose down docker run --rm -v n8n_n8n_data:/daten -v $PWD/backups/vor-2.40.5:/quelle:ro alpine \ sh -c "rm -rf /daten/* /daten/.[!.]* 2>/dev/null; tar xzf /quelle/n8n_data.tar.gz -C /daten" sed -i 's/^N8N_VERSION=.*/N8N_VERSION=2.39.10/' .env docker compose up -d
Für später liegt alles zusammen in n8n-update.sh: sichern, Nummer umstellen, laden, starten, prüfen. Aufruf: ./n8n-update.sh 2.40.5.
✓ Kurz geprüft
Betrieb und Grenzen
Was im Alltag zählt, und wo diese Übung aufhört.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Im Alltag reichen ein paar Blicke. Docker stats zeigt, wie viel Speicher n8n gerade braucht. Auf einem kleinen Server ist das die Zahl, auf die man achten muss.
Die Logs zeigen, was sich ankündigt. Hier die Einstellungen, deren Standardwerte sich in einer kommenden Version ändern.
Und die Sicherungen liegen auf demselben Server wie n8n. Das ist bequem, schützt aber nicht vor dem Ausfall des Servers. Deshalb gehört eine Kopie regelmäßig auf einen anderen Rechner.
Sprecherstimme synthetisch erzeugt (Text-to-Speech).
Was im Video gesagt wird
Erstens: n8n nicht offen ins Internet stellen, solange es nicht nötig ist. Wenn doch, dann nur hinter einem Reverse Proxy mit HTTPS. Das zeigt die Self-Hosting-Schulung.
Zweitens: eine feste Version und ein fester Rhythmus. Etwa einmal im Monat updaten, Sicherheitsupdates sofort, und immer mit Sicherung.
Drittens: Im Oktober kommt n8n drei. Ab dann gibt es n8n nur noch als Docker-Image, und einige Standardwerte ändern sich. Wer die Warnungen jetzt liest, ist vorbereitet.
Und viertens: Die KI entwirft, der Mensch entscheidet. Dieser Ablauf verschickt nichts von allein, und das ist Absicht.
1 Drei Blicke im Alltag
docker stats --no-stream n8n # Speicher und CPU docker compose logs --since 24h n8n | grep -i error du -sh backups/* # wie groß sind die Sicherungen?
scp -r root@DEIN-SERVER:/opt/n8n/backups ./n8n-sicherungen
2 Grenzen dieser Übung
- Erreichbarkeit. Über den Tunnel erreichst nur Du das Formular. Für echte Kundinnen braucht n8n eine Domain, HTTPS und einen Reverse Proxy (Self-Hosting). Dann
WEBHOOK_URLauf die öffentliche Adresse setzen. - Datenbank. Standardmäßig benutzt n8n SQLite im Volume. Für viele Ausführungen oder mehrere Instanzen ist PostgreSQL die bessere Wahl.
- n8n 3.0 im Oktober 2026. Ab dann gibt es n8n nur noch als Docker-Image,
npm install n8nentfällt. Wer die Hinweise in den Startmeldungen jetzt liest, ist vorbereitet. - Die KI bleibt ein Entwurf. Die Einordnung war in unseren Tests richtig, der Entwurf vorsichtig. Beides kann danebenliegen. Die Freigabe durch einen Menschen ist deshalb Teil des Ablaufs.
✓ Kurz geprüft
Befehle zum Kopieren
Alles aus den zwölf Stufen an einer Stelle, in der Reihenfolge, in der man es braucht.
1 Installation
services:
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
container_name: n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
env_file: .env
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
N8N_VERSION=2.39.10 GENERIC_TIMEZONE=Europe/Berlin TZ=Europe/Berlin WEBHOOK_URL=http://localhost:5678/ N8N_DIAGNOSTICS_ENABLED=false
echo "N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)" >> .env && chmod 600 .env docker compose up -d && docker compose ps curl -s http://127.0.0.1:5678/healthz
ssh -N -L 5678:127.0.0.1:5678 root@DEIN-SERVER
2 In den Workflows
{{ ['Angebot', 'Support', 'Beschwerde', 'Sonstiges'][$prevNode.outputIndex] }}
Kategorie: {{ $json.kategorie }}
Anliegen: {{ $json.Anliegen }}
Du schreibst Antwortentwürfe für die Nordwerk GmbH, einen kleinen Hersteller von Werkstattmöbeln. Schreibe höflich, knapp (höchstens 120 Wörter), per Sie, auf Deutsch. Regeln: - Erfinde keine Preise, Termine, Lieferzeiten oder Zusagen. Wo eine solche Angabe nötig ist, schreibe einen Platzhalter in eckigen Klammern, z. B. [Preis ergänzen]. - Bei Beschwerden: entschuldige dich für den Ärger, versprich nichts, kündige einen persönlichen Rückruf an. - Gib nur den Text der Antwort aus, ohne Betreffzeile und ohne Erklärungen.
Der Freigabe-Workflow zum Einfügen liegt in freigabe-workflow.json: Datei öffnen, alles markieren und kopieren, in n8n auf einer leeren Fläche Strg+V. Er findet die Tabelle über ihren Namen anfragen, IDs oder Zugänge braucht er nicht.
3 Sichern und Updaten
chmod +x n8n-update.sh ./n8n-update.sh 2.40.5 # sichert, stellt um, lädt, startet, prüft
docker exec n8n n8n user-management:reset
cd /opt/n8n && docker compose down -v
backups/ bleiben liegen.4 Weiterlesen
- n8n-Dokumentation: Knoten, Ausdrücke, Betrieb
- Release-Notes: vor jedem Update lesen
- Docker · Self-Hosting & VPS · SSH
- Lokale KI: dieselben Abläufe mit einem Modell auf dem eigenen Rechner
Quiz
7 Fragen quer durch die Stufen. Ab 6 richtigen Antworten schaltest du dein Zertifikat frei.
Dein Zertifikat
Glückwunsch! Trage deinen Namen ein und drucke das Zertifikat (oder speichere als PDF).