0 Votes

Code source wiki de n8n

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

Masquer les derniers auteurs
john 1.1 1 Plateforme d'automatisation. Elle sert notamment à envoyer une notification Telegram quand un conteneur est mis à jour.
2
3 == Architecture ==
4
5 |=Conteneur|=Rôle
6 |n8n|Application
7 |n8n-postgres|Base PostgreSQL 15
8
john 2.1 9 n8n est sur trois réseaux : ##proxy## (SWAG), ##n8n_net## (sa base, isolée) et ##docker-api## (docker-socket-proxy).
john 1.1 10
11 == Variables d'environnement ==
12
13 |=Variable|=Rôle
14 |##N8N_HOST##|Nom de domaine d'accès
15 |##N8N_EDITOR_BASE_URL##, ##WEBHOOK_URL##|URL publique complète, en https
16 |##N8N_ENCRYPTION_KEY##|Clé de chiffrement des identifiants enregistrés
17 |##POSTGRES_USER##, ##POSTGRES_PASSWORD##, ##POSTGRES_DB##|Accès à la base
18 |##GENERIC_TIMEZONE##|Fuseau horaire des déclencheurs planifiés
19
20 {{warning}}
21 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.
22 {{/warning}}
23
24 == Stack ==
25
26 {{code language="yaml"}}
27 services:
28 n8n:
29 image: n8nio/n8n:latest
30 container_name: n8n
31 restart: unless-stopped
32 depends_on:
33 - postgres
34 environment:
35 N8N_HOST: ${N8N_HOST}
36 N8N_PROTOCOL: https
37 N8N_PORT: 5678
38 N8N_EDITOR_BASE_URL: ${N8N_EDITOR_BASE_URL}
39 WEBHOOK_URL: ${WEBHOOK_URL}
40 N8N_EXPRESS_TRUST_PROXY: "true"
41 N8N_CORS_ALLOW_ORIGIN: <URL_N8N>
42 N8N_PROXY_HOPS: 1
43 N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
44 N8N_SECURE_COOKIE: "true"
45 N8N_DIAGNOSTICS_ENABLED: "false"
46 DB_TYPE: postgresdb
47 DB_POSTGRESDB_HOST: postgres
48 DB_POSTGRESDB_PORT: 5432
49 DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
50 DB_POSTGRESDB_USER: ${POSTGRES_USER}
51 DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
52 GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
53 volumes:
54 - <APPDATA>/n8n:/home/node/.n8n
55 networks:
56 - proxy
57 - n8n_net
john 2.1 58 - docker-api
john 1.1 59 healthcheck:
60 test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5678/ > /dev/null || exit 1"]
61 interval: 30s
62 timeout: 5s
63 retries: 10
64 start_period: 20s
65
66 postgres:
67 image: postgres:15-alpine
68 container_name: n8n-postgres
69 restart: unless-stopped
70 environment:
71 POSTGRES_USER: ${POSTGRES_USER}
72 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
73 POSTGRES_DB: ${POSTGRES_DB}
74 PGDATA: /var/lib/postgresql/data/pgdata
75 volumes:
76 - <APPDATA>/n8n-db:/var/lib/postgresql/data
77 networks:
78 - n8n_net
79
80 networks:
81 proxy:
82 external: true
83 name: proxy
84 n8n_net:
85 driver: bridge
john 2.1 86 docker-api:
87 external: true
john 1.1 88 {{/code}}
89
90 * ##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.
91 * ##N8N_EXPRESS_TRUST_PROXY## et ##N8N_SECURE_COOKIE## sont nécessaires derrière SWAG en https.
92
93 == Workflow : notification des mises à jour Docker ==
94
95 Toutes les 10 minutes, le workflow :
96
97 * lit la liste des conteneurs, arrêtés compris, via l'API de docker-socket-proxy (##http:~/~/dockersocket:2375/containers/json?all=1##) ;
98 * 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 ;
99 * envoie un message Telegram listant les conteneurs mis à jour, recréés ou nouveaux.
100
101 Au premier lancement, il enregistre l'état sans rien envoyer. Un déclencheur manuel permet de réinitialiser cet état.
102
103 Prérequis :
104
john 2.1 105 * n8n sur le réseau ##docker-api##, partagé avec [[docker-socket-proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.DockerSocketProxy.WebHome]] ;
john 1.1 106 * le jeton du bot Telegram enregistré comme identifiant dans n8n, jamais écrit en clair dans une URL de nœud.
107
108 == Sauvegarde ==
109
110 Dump SQL de ##n8n-postgres## et dossier ##<APPDATA>/n8n## par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]].