Deployn

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