Änderungen von Dokument N8n Workflow Engine
Zuletzt geändert von Daniel Herrmann am 2026/02/22 21:17
Von Version
14.1
bearbeitet von Daniel Herrmann
am 2026/02/22 19:52
am 2026/02/22 19:52
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version
2.1
bearbeitet von Daniel Herrmann
am 2025/08/31 19:24
am 2025/08/31 19:24
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -1,129 +1,108 @@ 1 1 n8n ist ein **Open-Source-Tool zur Workflow-Automatisierung**, das man selbst hosten kann. Über eine **visuelle Oberfläche** baut man Workflows per Drag-and-drop aus sogenannten „Nodes“, die verschiedene Dienste und Aktionen miteinander verbinden. Es gibt Hunderte vorgefertigte Integrationen, z. B. für Slack, Mail oder MQTT. Ebenfalls gibt es eine große Auswahl an für uns relevante Community Nodes (Vikunja, Listmonk, und so weiter) sowie die Möglichkeit, eigene Nodes zu schreiben (beispielsweise Paperless oder NATS). 2 2 3 -= Inhaltsverzeichnis =3 += {{id name="N8nWorkflowEngine-WorkflowÜbersicht"/}}Workflow Übersicht = 4 4 5 - {{toc/}}5 +asd 6 6 7 -= Workflow Übersicht =7 += {{id name="N8nWorkflowEngine-CommunityNodes"/}}Community Nodes = 8 8 9 - Workflows bestehen grundsätzlichauseinem oder mehreren **Triggern** und einer oder mehreren **Aktionen**. Im Folgenden werden nur die für die Mitgliederverwaltung relevanten Workflows beschrieben, N8n kann aber natürlich auch für andere Automatisierung verwendet werden.9 +asd 10 10 11 -= =Workflowsfür Dokumente ==11 += {{id name="N8nWorkflowEngine-TechnischesSetup"/}}Technisches Setup = 12 12 13 -== =DocumentConsumedWorkflow ===13 +== {{id name="N8nWorkflowEngine-Lizenz"/}}Lizenz == 14 14 15 - DieserWorkflow wird durchdas [[PaperlessPost-ConsumeScript>>doc:PROJ.DigitaleMitgliederverwaltung.PaperlessNGX.WebHome]] ausgelöst,immer dann, wennein**QR Codemitdem korrektenInhalt **erkanntwird. DieIdeehierist,dass **ausgedruckteund handschriftlicheDokumente**automatischverarbeitetwerdenkönnen.15 +N8n hat eine so genannte "Sustainable Use License". Für den internen Gerbauch frei verwendbar, solange man keine Produkte damit verkauft. Auszug aus der FAQ: 16 16 17 - Im PrinzipersetztdieserWorkflowdenDocusealWebhook, derautomatisch demBackendbescheidgibt, wennalleParteienunterschriebenhaben.Bei ausgedrucktenDokumentenpassiertdiesstattdessenhierüber.17 +>Our license restricts use to "internal business purposes". In practice this means all use is allowed unless you are selling a product, service, or module in which the value derives entirely or substantially from n8n functionality. 18 18 19 - [[image:1771785973968-394.png||height="150"]]19 +Wir verwenden im Makerspace die kostenlose [[Community License>>url:https://docs.n8n.io/hosting/community-edition-features/||shape="rect"]], den Lizenzkey erhält man online durch Ausfüllen eines Formulars. 20 20 21 - DerWorkflow:21 +== {{id name="N8nWorkflowEngine-HostingundKubernetes"/}}Hosting und Kubernetes == 22 22 23 -* wird über ein Webhook vom Post Consume Script ausgelesen. Als Inhalt wird der Inhalt des dekodierten QR Codes übergeben 24 -* nur handschriftlich unterschriebene Dokumente werden verarbeitet 25 -* dem Backend wird signalisiert, dass das Dokument erfolgreich verarbeitet wurde 23 +N8n soll hauptsächlich mit unserer Paperless Instanz interagieren und läuft aus diesem Grund ebenfalls im Makerspace auf unserem Kubernetes Cluster. Für die Installation kommt das [[Helm Chart von 8gears>>url:https://artifacthub.io/packages/helm/open-8gears/n8n||shape="rect"]] zum Einsatz. 26 26 27 - AlsKonsequenzkanndasBackend weitereautomatische Aktionenausführen, beispielsweisevorläufigeoderdauerhafteBerechtigungeneintragen.25 +Der Code für die ArgoCD App ist in Gitlab gespeichert und wird automatisch über ArgoCD synchronisiert: [[https:~~/~~/git.makerspace-darmstadt.de/makerspace-it-infrastructure/gitops/main-apps/n8n/-/tree/main?ref_type=heads>>url:https://git.makerspace-darmstadt.de/makerspace-it-infrastructure/gitops/main-apps/n8n/-/tree/main?ref_type=heads||shape="rect"]] 28 28 29 - === Paperless Papierkorb===27 +[[image:attach:image-2025-8-31_19-10-32.png||height="250"]] 30 30 31 - **In Paperlesskann nur der Owner Dokumenteinden Papierkorbverschieben**. Dies lässt sich leidernicht anderskonfigurieren,sodass wirunshiermit einem Workaroundbehelfen: dieMitgliederverwaltung und/oder der Vorstand können dem Dokument **ein Tag zuweisen**. **Dieses Tag löst einen Workflow in Paperless aus:**29 +Die Komponenten beschränken sich hierbei auf: 32 32 33 -[[image:1771786279823-587.png||height="250"]] 31 +* Die N8n Applikation selbst, das sind die Ressourcen aus dem Helm Chart 32 +* Eine Datenbank-Instanz (PostgeSQL, auf dem zentralen DB Server) 33 +* Secrets, die aus Hashicorp Vault synchronisiert werden 34 34 35 - DieserWorkflowlöst zwei Dinge aus (leideristDokumentlöschen keineverfügbareAktion):35 +== {{id name="N8nWorkflowEngine-HelmChartParameter"/}}Helm Chart Parameter == 36 36 37 -* er entfernt das Tag wieder, um Rekursion zu vermeiden 38 -* und löst ein N8n Webhook aus 37 +Das Helm Chart akzepziert einige Parameter, mit denen das Deployment genauer konfiguriert werden kann. In unserem Fall kurz erklärt: 39 39 40 - **Der N8n Workflow löscht dann das Dokument.**39 +\\ 41 41 42 -[[image:1771786234093-932.png||height="150"]] 41 +{{code}} 42 +{ 43 + values(ns, version, url, db_name, sc, size, db_hostname='pgsql-postgresql.mksp-services.svc.cluster.local'):: 44 + { 45 + image: { 46 + tag: version, 47 + }, 48 + main: { 49 + config: { 50 + db: { 51 + type: 'postgresdb', 52 + postgresdb: { 53 + database: ns + '-' + db_name, 54 + host: db_hostname, 55 + user: ns + '-' + db_name, 56 + }, 57 + }, 58 + }, 59 + extraEnv: { 60 + DB_POSTGRESDB_PASSWORD: { 61 + valueFrom: { 62 + secretKeyRef: { 63 + name: 'db-' + db_name + '-creds', 64 + key: 'POSTGRES_PASSWORD', 65 + }, 66 + }, 67 + }, 68 + }, 69 + persistence: 70 + { 71 + enabled: true, 72 + type: 'dynamic', 73 + storageClass: sc, 74 + accessModes: ['ReadWriteOnce'], 75 + size: size, 76 + }, 77 + }, 78 + ingress: 79 + { 80 + enabled: true, 81 + annotations: { 82 + 'cert-manager.io/cluster-issuer': 'letsencrypt', 83 + }, 84 + className: 'nginx', 85 + hosts: [ 86 + { 87 + host: url, 88 + paths: ['/'], 89 + }, 90 + ], 91 + tls: [ 92 + { secretName: 'n8n-tls', hosts: [url] }, 93 + ], 94 + }, 95 + }, 96 +} 43 43 44 -== Cron Jobs - Sync von Daten == 45 45 46 -=== Sync Tags für Einweisungen === 47 - 48 -ToDo 49 - 50 -=== Sync Document Types === 51 - 52 -ToDo 53 - 54 -== Backend Event Workflows == 55 - 56 -Bestimmte Events aus dem Backend werden über NATS als Event gepublished. Details dazu sind auf der [[Seite zu NATS>>doc:PROJ.Digitale Mitgliederverwaltung.Technische Dokumentation.NATS Setup.WebHome]] beschrieben. Hier werden die Events beschrieben, die Paperless betreffen: 57 - 58 -=== mksp.docuseal.signature.completed === 59 - 60 -Dieses Event wird ausgelöst, wenn im Backend ein Signatur-Prozess abgeschlossen ist (d.h. alle Parteien haben unterschrieben und die Unterschrift wurde im Backend erfasst). Dies kann auf zwei Arten passieren: 61 - 62 -* Bei **rein digitalen Signaturen** durch einen über **Docuseal ausgelösten Webhook** 63 -* Bei **handschriftlich** unterschrieben Zetteln durch **Einscannen** und den oben beschrieben **"Document Consumed" N8n Workflow** 64 - 65 -[[image:1771785764191-239.png||height="150"]] 66 - 67 -**Der Workflow löst nur bei digitalen Dokumenten eine Aktion aus**. Bei handschriftlich unterschriebenen Dokumenten ist das Dokument bereits eingescannt. Für digital unterschriebene Signaturen: 68 - 69 -* wird der Status der Submission aus Docuseal ausgelesen 70 -* wird das PDF mit den Unterschriften aller Parteien runtergeladen... 71 -* und anschließend in Docuseal hochgeladen und dort verarbeitet. 72 - 73 -=== mksp.backend.user.created === 74 - 75 -Dieser Workflow wird immer dann getriggert, wenn im Backend ein **neuer User** angelegt wird. Die Informationen aus der NATS Nachricht werden dann verwendet, um den **Korrespondenten in Paperless anzulegen**. 76 - 77 -[[image:1771784637258-114.png||height="200"]] 78 - 79 -Die folgenden Aktionen werden ausgeführt: 80 - 81 -1. Parallel werden **alle Gruppen und Benutzer **aus Paperless ausgelesen 82 -1. Es wird auf die relevanten Gruppen und Benutzer gefiltert. Ziel ist es, **die ID der entsprechenden Gruppen und Benutzer auszulesen**. Wir sind **interessiert an den Gruppen für die Mitgliederverwaltung und die IT Admins** sowie dem statischen **MV Owner**. 83 -1. Zuletzt wird der Subflow "Create Paperless Correspondent" angelegt. Dieser bekommt als Info: 84 -11. **firstname** - aus NATS Trigger 85 -11. **lastname** - aus NATS Trigger 86 -11. **isGuest** - true wenn membership_number in NATS Trigger = null, false otherwise 87 -11. **membership_number** - aus NATS Trigger 88 -11. **user_id** - aus NATS Trigger 89 -11. **owner_id** - ID des MV Data Owner Benutzers 90 -11. **permissions** - siehe unten 91 -11. **backend_url** - URL des Makerspace Backends 92 - 93 -Der Subflow erzeugt dann den Display-Namen des Korrespondenten und **speichert die Paperless-ID über die Backend-API zurück ins Backend.** Der **Display-Name **setzt sich wie folgt zusammen: 94 - 95 -|=Nutzer-Typ|=Format|=Beispiel 96 -|Mitglied|Vorname Nachname (#Mitgliedsnummer)|Daniel Herrmann (#250) 97 -|Gast|Vorname Nachname (Gast #Nutzer-ID)|Daniel Herrmann (Gast #1) 98 - 99 -Die **Berechtigungen** werden dabei wie folgt gesetzt: 100 - 101 -{{code language="none"}} 102 -{"view":{"users":[],"groups":[{{ $('Static Data').item.json.mv_group_id }}]},"change":{"users":[],"groups":[{{ $('Static Data').item.json.it_admin_group_id }}]}} 103 103 {{/code}} 104 104 105 - D.h. Owner(und damit alle Rechte) hat derstatische MV Owner Nutzer. Alle Mitglieder der Gruppe"Mitgliederverwaltung"können den Korrespondentensehen (notwendig für Zuweisung und Filterung),IT-Adminskönnen diese verändern.101 +Hervorzuheben sind hier insbesondere: 106 106 107 -=== mksp.backend.user.converted_to_guest === 103 +* Das **Image **- Hier wird die Version von N8n konfiguriert. Eine Versions-Änderung des Helm Charts hat nicht zwangsweise auch eine Versions-Änderung der Applikation selbst (N8n) zur Folge, sodass dieses separat übergeben wird 104 +* **DB Config + Extra Env** - Hier werden die Zugangsdaten für die Datenbank übergeben. Host, Benutzername und Datenbankname werden an Hand des App-Namens erzeugt, das Passwort wird beim Anlegen der Datenbank dynamisch erzeugt und von einem Kubernetes Secret gemounted 105 +* **Persistence **- Hier wird angegeben, wie die Daten persistent gespeichert werden - im Prinzip eine Art Festplatte für ein Kubernetes Pod. Im Makerspace gibt es dafür zwei Storage Classes, die werden im Artikel über unseren [[confluencePage:page:IN.Kubernetes Cluster]] genauer beschrieben 106 +* **Ingress **- Hier wird angegeben, unter welcher Domain N8n erreichbar sein soll und wie das Zertifkat erzeugt wird. 108 108 109 -Dieser Workflow wird dann ausgelöst, wenn ein Mitglied den Verein verlässt und daher zum Gast wird. 110 - 111 -[[image:1771785245954-780.png||height="150"]] 112 - 113 -Alle notwendigen Daten (inklusive der Paperless Korrespondent-ID) sind im NATS Event vorhanden. Es wird also lediglich ein neuer Display-Name erzeugt (Format: siehe Tabelle oben) und der Korrespondent wird aktualisiert. 114 - 115 -=== mksp.backend.user.converted_to_member === 116 - 117 -Dieser Workflow wird dann ausgelöst, wenn ein neues Mitglied dem Verein beitritt. 118 - 119 -[[image:1771785309574-242.png||height="150"]] 120 - 121 -Alle notwendigen Daten (inklusive der Paperless Korrespondent-ID) sind im NATS Event vorhanden. Es wird also lediglich ein neuer Display-Name erzeugt (Format: siehe Tabelle oben) und der Korrespondent wird aktualisiert. 122 - 123 -== Subflows == 124 - 125 -ToDo 126 - 127 -= Community Nodes = 128 - 129 -asd 108 +\\
- 1771784637258-114.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -201.1 KB - Inhalt
- 1771785245954-780.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -63.2 KB - Inhalt
- 1771785309574-242.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -63.0 KB - Inhalt
- 1771785764191-239.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -92.9 KB - Inhalt
- 1771785973968-394.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -83.1 KB - Inhalt
- 1771786234093-932.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -56.7 KB - Inhalt
- 1771786279823-587.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.dherrman - Größe
-
... ... @@ -1,1 +1,0 @@ 1 -173.8 KB - Inhalt