0 Votes

n8n

Modifié par john le 2026/09/18 23:48

Plateforme d'automatisation. Elle sert notamment à envoyer une notification Telegram quand un conteneur est mis à jour.

Architecture

ConteneurRôle
n8nApplication
n8n-postgresBase PostgreSQL 15

n8n est sur trois réseaux : proxy (SWAG), n8n_net (sa base, isolée) et docker-api (docker-socket-proxy).

Variables d'environnement

VariableRôle
N8N_HOSTNom de domaine d'accès
N8N_EDITOR_BASE_URL, WEBHOOK_URLURL publique complète, en https
N8N_ENCRYPTION_KEYClé de chiffrement des identifiants enregistrés
POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DBAccès à la base
GENERIC_TIMEZONEFuseau horaire des déclencheurs planifiés
Warning

Sans la valeur exacte de N8N_ENCRYPTION_KEY, les identifiants enregistrés dans n8n (Telegram, API…) sont illisibles après une restauration. La conserver dans le gestionnaire de mots de passe.

Stack

services:
 n8n:
   image: n8nio/n8n:latest
   container_name: n8n
   restart: unless-stopped
   depends_on:
      - postgres
   environment:
     N8N_HOST: ${N8N_HOST}
     N8N_PROTOCOL: https
     N8N_PORT: 5678
     N8N_EDITOR_BASE_URL: ${N8N_EDITOR_BASE_URL}
     WEBHOOK_URL: ${WEBHOOK_URL}
     N8N_EXPRESS_TRUST_PROXY: "true"
     N8N_CORS_ALLOW_ORIGIN: <URL_N8N>
     N8N_PROXY_HOPS: 1
     N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
     N8N_SECURE_COOKIE: "true"
     N8N_DIAGNOSTICS_ENABLED: "false"
     DB_TYPE: postgresdb
     DB_POSTGRESDB_HOST: postgres
     DB_POSTGRESDB_PORT: 5432
     DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
     DB_POSTGRESDB_USER: ${POSTGRES_USER}
     DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
     GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
   volumes:
      - <APPDATA>/n8n:/home/node/.n8n
   networks:
      - proxy
      - n8n_net
      - docker-api
   healthcheck:
     test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5678/ > /dev/null || exit 1"]
     interval: 30s
     timeout: 5s
     retries: 10
     start_period: 20s

 postgres:
   image: postgres:15-alpine
   container_name: n8n-postgres
   restart: unless-stopped
   environment:
     POSTGRES_USER: ${POSTGRES_USER}
     POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
     POSTGRES_DB: ${POSTGRES_DB}
     PGDATA: /var/lib/postgresql/data/pgdata
   volumes:
      - <APPDATA>/n8n-db:/var/lib/postgresql/data
   networks:
      - n8n_net

networks:
 proxy:
   external: true
   name: proxy
 n8n_net:
   driver: bridge
 docker-api:
   external: true
  • N8N_PROXY_HOPS: 1 : seul SWAG est un intermédiaire. Authelia ne compte pas, il valide les requêtes sans les relayer. Passer à 2 si un proxy Cloudflare est ajouté devant.
  • N8N_EXPRESS_TRUST_PROXY et N8N_SECURE_COOKIE sont nécessaires derrière SWAG en https.

Workflow : notification des mises à jour Docker

Toutes les 10 minutes, le workflow :

  • lit la liste des conteneurs, arrêtés compris, via l'API de docker-socket-proxy (http://dockersocket:2375/containers/json?all=1) ;
  • compare l'image et la date de création de chaque conteneur avec l'état relevé au passage précédent, conservé dans les données statiques du workflow ;
  • envoie un message Telegram listant les conteneurs mis à jour, recréés ou nouveaux.

Au premier lancement, il enregistre l'état sans rien envoyer. Un déclencheur manuel permet de réinitialiser cet état.

Prérequis :

  • n8n sur le réseau docker-api, partagé avec docker-socket-proxy ;
  • le jeton du bot Telegram enregistré comme identifiant dans n8n, jamais écrit en clair dans une URL de nœud.

Sauvegarde

Dump SQL de n8n-postgres et dossier <APPDATA>/n8n par le script de Sauvegarde.