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.

n8n Automatisation mit Docker hinter Traefik einrichten-heroimage

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.

n8n Dashboard

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”.

Execute Command

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.

Edit Expression

Nun kann man auch hier über “Execute Node” testen, ob eine Mail versendet wird.

Erfolgreicher Workflow

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.

Cron

Diesen Trigger verbinde ich mit dem Node und drücke auf Play.

Cron Workflow

Jetzt muss ich nur noch oben rechts den Workflow speichern und ihn auf aktiv setzen.

Aktiver Workflow

Sollte dürfte ich jede Woche eine Mail bekommen mit dem belegten Speicherplatz.


Diese Website verwendet Cookies. Diese sind notwendig, um die Funktionalität der Website zu gewährleisten. Weitere Informationen finden Sie in der Datenschutzerklärung