n8n: Installationswege für ioBroker, Home Assistant und Docker

n8n ist mittlerweile extrem weit verbreitet. Aber wie startet man eigentlich? Die Frage stellen sich bestimmt viele von Euch. Die gute Nachricht zuerst: Solltest Du schon Home Assistant oder ioBroker nutzen, ist der Einstieg extrem einfach, da man n8n mit wenigen Klicks installieren kann. Also perfekt, um die beliebte Lösung einmal auszuprobieren und in das Thema einzusteigen.

Video

Home-Assistant-Master-Kurs

n8n Cloud

Der einfachste Weg ist die offizielle Cloud. Aber Achtung: Da fallen schnell Kosten an. Aber in einem kostenlosen Testzeitraum kann man schon viel ausprobieren. Generell bieten auch viele andere Provider n8n Hosting in der Cloud an. Einer dieser Anbieter finanziert gefühlt jedes zweite YouTube-Video zu dem Thema.

Wenn Du eh schon ioBroker oder Home Assistant hast, probiere es lieber dort aus.

ioBroker

Im ioBroker ist der n8n-Adapter aktuell nur im Beta-Repository zu finden. Wie immer gilt: Über npm bzw. die offizielle Adapterliste installieren. Nicht über GitHub!

Dabei bringt der ioBroker eine vollständige n8n-Installation mit. Man kan also mit nur einem Klick direkt starten und die beliebte Software einfach mal testen. Natürlich kann n8n auch mit dem ioBroker interagieren und beispielsweise Datenpunkte als Auslöser nutzen und diese auch schreiben.

Der Nachteil ist eigentlich nur, dass man bei der Version immer etwas hinterher hängt und diese auch nicht aktualisieren kann. Man muss also auf Updates des Adapters warten. Die aktuelle Version 0.3.0 ist leider auch schon wieder vom September 2025. Also über drei Monate gab es kein Update.

Home Assistant

Bei Home Assistant bzw. unter Home Assistant OS kann man Add-Ons nutzen um n8n zu installieren. Intern sind das ja auch wieder nur Docker-Container. Diese müssen aber für Home Assistant gebaut werden und haben nichts mit den offiziellen n8n-Docker-Images zu tun! Das heißt, der Maintainer des Add-Ons muss jedes Mal bei einer neuen Version auch ein neues Image erstellen und dieses veröffentlichen. Nur so kommt man an Updates.

Proxmox

Alternativ kannst Du auch die Proxmox Helper Scripts nutzen um einen LXC Container in Proxmox mit n8n zu erstellen. Da Du dann aber weder weißt wie der Prozess aussieht, oder wie man das System aktuell hält, würde ich die anderen Wege bevorzugen!

Docker

Unter Docker könnte man jetzt viel mit docker compose usw. machen. Um auf die Schnelle (lokal) einen Docker-Container zum Laufen zu bringen, reicht aber schon ein neues Volume (um die Daten persistent zu halten) und dann ein neuer Container. Im Standard wird automatisch eine SQLite-Datenbank verwendet.

Als Erstes installieren wir Docker unter Debian. Das habe ich hier schon einmal erklärt.

docker volume create n8n_data
docker run -d 
    --name n8n 
    --restart=always 
    -p 5678:5678 
    -e GENERIC_TIMEZONE="Europe/Berlin" 
    -e TZ="Europe/Berlin" 
    -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true 
    -e N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true 
    -e N8N_DEFAULT_BINARY_DATA_MODE=filesystem 
    -e N8N_RUNNERS_ENABLED=true 
    -e N8N_SECURE_COOKIE=false 
    -v n8n_data:/home/node/.n8n 
    docker.n8n.io/n8nio/n8n:2.0.1

Bonus: Mit Traefik und Docker Compose

Ich habe mich am Ende dazu entschieden, meine n8n-Instanz zwar selbst zu hosten, aber diese im Internet bereitzustellen. Dazu nutze ich:

  • DynDNS auf einer eigenen Domain
  • VLANs / DMZ und UniFi Zone Based Firewall
  • Traefik als Reverse Proxy
  • Letsencrypt als SSL Zertifikat
  • CrowdSec als Webhook-Filter
  • 2-Factor-Authentication in n8n
Wichtig: Generell würde ich immer vermeiden, die n8n Instanz von außen zugänglich zu machen! Ich habe mich dennoch dazu entschieden, um alle Nodes einfacher nutzen zu können (OAuth Callbacks, Webhooks, …) und um mehr zu testen. Wenn es nur um Smart Home geht, ist es in der Regel nicht notwendig, seine Instanz aus dem Internet erreichen zu können!
sudo mkdir -p /opt/docker/letsencrypt/
sudo mkdir -p /opt/docker/crowdsec/{db,config} && sudo chown -R 1000:1000 /opt/docker/crowdsec/
cd /opt/docker/
sudo nano .env
DOMAIN_NAME=deinedomain.de
SUBDOMAIN=n8n
ACME_EMAIL=deine-mail@example.com
TIMEZONE=Europe/Berlin
CROWDSEC_BOUNCER_API_KEY=
sudo nano crowdsec/acquis.yaml
filenames:
  - /var/log/traefik/access.log
labels:
  type: traefik
sudo nano docker-compose.yml
services:
  traefik:
    image: traefik:v3.6
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - "80:80"
      - "443:443"
    environment:
      - TZ=${TIMEZONE}
      - DOCKER_API_VERSION=1.52 # ggf. anpassen: docker version --format ''
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
      - traefik_logs:/var/log/traefik
    command:
      - "--api.dashboard=false"
      - "--log.level=INFO"
      - "--accesslog=true"
      - "--accesslog.filepath=/var/log/traefik/access.log"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
      # https://github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin
      - "--experimental.plugins.bouncer.modulename=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin"
      - "--experimental.plugins.bouncer.version=v1.4.6"
    networks:
      - traefik_net

  crowdsec:
    image: crowdsecurity/crowdsec
    container_name: crowdsec
    restart: unless-stopped
    environment:
      - GID=1000
      - COLLECTIONS=crowdsecurity/traefik crowdsecurity/http-cve
    volumes:
      - ./crowdsec/db:/var/lib/crowdsec/data
      - ./crowdsec/config:/etc/crowdsec
      - ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - traefik_logs:/var/log/traefik:ro
    networks:
      - traefik_net

  n8n:
    image: docker.n8n.io/n8nio/n8n:2.0.1
    container_name: n8n
    restart: unless-stopped
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
      - N8N_DEFAULT_BINARY_DATA_MODE=filesystem
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${TIMEZONE}
      - BOUNCER_KEY_TRAEFIK=${CROWDSEC_BOUNCER_API_KEY}
    volumes:
      - n8n_storage:/home/node/.n8n
    networks:
      - traefik_net
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"
      - "traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)"
      - "traefik.http.routers.n8n.entrypoints=websecure"
      - "traefik.http.routers.n8n.tls.certresolver=myresolver"
      - "traefik.http.middlewares.my-crowdsec.plugin.bouncer.enabled=true"
      - "traefik.http.middlewares.my-crowdsec.plugin.bouncer.crowdseclapikey=${CROWDSEC_BOUNCER_API_KEY}"
      - "traefik.http.middlewares.my-crowdsec.plugin.bouncer.crowdseclapischeme=http"
      - "traefik.http.middlewares.my-crowdsec.plugin.bouncer.crowdseclapihost=crowdsec:8080"
      - "traefik.http.middlewares.my-crowdsec.plugin.bouncer.crowdsecupdateregularity=10s"
      - "traefik.http.middlewares.sec-headers.headers.sslredirect=true"
      - "traefik.http.middlewares.sec-headers.headers.stsseconds=31536000"
      - "traefik.http.middlewares.sec-headers.headers.browserxssfilter=true"
      - "traefik.http.middlewares.sec-headers.headers.contentTypeNosniff=true"
      - "traefik.http.routers.n8n.middlewares=my-crowdsec,sec-headers"

volumes:
  traefik_logs:
  n8n_storage:

networks:
  traefik_net:
    driver: bridge

Jetzt noch den Key generieren und in die .env Datei eintragen:

docker exec -t crowdsec cscli bouncers add traefik-plugin
docker exec -t crowdsec cscli decisions list

Links

Weitere Inhalte

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert