n8n Automatisation mit Docker hinter Traefik einrichten
Workflow-Automatisierung mit n8n. Diese Anleitung beschreibt, wie man sie mit Docker und Traefik als Reverse-Proxy einrichten kann.
Inhaltsverzeichnis
Dieses Mal möchte ich Workflows zur Automatisation erstellen. Möglich ist das beispielsweise mit n8n.
n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model.
Dazu benötigen wir einen Server mit Docker und in diesem Fall Traefik als Reverse-Proxy, wie hier beschrieben. Die Einrichtung ist in wenigen Schritten durchgeführt.
Installation n8n
Wir verbinden uns mit dem Server und erweitern die Umgebungskonfiguration.
cd ~/docker
echo "N8N_POSTGRES_PASSWORD=$(openssl rand -hex 16)" >> .env
echo "N8N_USER=benutzername" >> .env
echo "N8N_PASSWORD=sicherespassword" >> .env
Jetzt brauchen wir neue Ordner, in denen die Daten gespeichert werden.
mkdir appdata/n8n
mkdir appdata/n8n/data
mkdir appdata/n8n/db
Und eine neue Docker-Compose Datei.
cd ~/docker
nano docker-compose-n8n.yml
version: "3.7"
### NETWORKS ###
networks:
web:
external:
name: web
n8n-internal:
external: false
default:
driver: bridge
### SERVICEs ###
services:
n8n:
container_name: n8n
image: n8nio/n8n
restart: unless-stopped
networks:
- n8n-internal
- web
security_opt:
- no-new-privileges:true
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_HOST=n8n-db
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${N8N_POSTGRES_PASSWORD}
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
- N8N_HOST=n8n.${DOMAINNAME}
- WEBHOOK_TUNNEL_URL=https://n8n.${DOMAINNAME}
- GENERIC_TIMEZONE=${TZ}
- TZ=${TZ}
volumes:
- $DOCKERDIR/appdata/n8n/data:/home/node/
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n-rtr.entrypoints=https"
- "traefik.http.routers.n8n-rtr.rule=Host(`n8n.$DOMAINNAME`)"
- "traefik.http.routers.n8n-rtr.tls=true"
- "traefik.http.routers.n8n-rtr.service=n8n-svc"
- "traefik.http.services.n8n-svc.loadbalancer.server.port=5678"
- "traefik.http.routers.n8n-rtr.middlewares=chain-oauth@file"
depends_on:
- n8n-db
n8n-db:
container_name: n8n-db
image: postgres
restart: unless-stopped
networks:
- n8n-internal
security_opt:
- no-new-privileges:true
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${N8N_POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
- POSTGRES_NON_ROOT_USER=n8n
- POSTGRES_NON_ROOT_PASSWORD=${N8N_POSTGRES_PASSWORD}
volumes:
- $DOCKERDIR/appdata/n8n/db/:/var/lib/postgresql/data
labels:
- "traefik.enable=false"
Beim Aufruf der Seite n8n.dieeigenedomain.de erscheint eine Abfrage des Benutzernamens und des Passwords, die sich in der .env-Datei befinden.
Nun können Workflows erstellt werden.
Beispiel Workflow
Nun möchte ich ein Beispiel Workflow erstellen. Dieses soll am Ende täglich eine E-Mail senden mit dem verbrauchten Speicherplatz in Prozent. An das Startfeld packe ich dazu einen neuen “Execute Command” Node.
Als Kommando füge ich df -k / | tail -1 | awk '{print $5}'
ein und drücke auf “Execute Node”.
Ich sehe, dass 4 % des Speicherplatzes belegt sind.
Als Nächstes füge ich einen neuen “Send Email” Node ein. Hier müssen die SMTP Daten eingetragen werden.
Beim Text drücke ich auf das Zahnrad neben dem Textfeld und wähle “Add Expression”.
Der Speicherplatz des Servers ist zu {{$json["stdout"]}} belegt.
Nun kann man auch hier über “Execute Node” testen, ob eine Mail versendet wird.
Damit man aber nicht immer manuell den Workflow ausführen muss, füge ich noch einen Cron Trigger hinzu. Hier kann man einstellen, wie oft alles ausgeführt werden soll.
Diesen Trigger verbinde ich mit dem Node und drücke auf Play.
Jetzt muss ich nur noch oben rechts den Workflow speichern und ihn auf aktiv setzen.
Sollte dürfte ich jede Woche eine Mail bekommen mit dem belegten Speicherplatz.