0 Votes

Code source wiki de n8n

Version 1.1 par john le 2026/09/18 22:08

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
9 n8n est sur deux réseaux : ##proxy## (SWAG et docker-socket-proxy) et ##n8n_net## (sa base, isolée).
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
58 healthcheck:
59 test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5678/ > /dev/null || exit 1"]
60 interval: 30s
61 timeout: 5s
62 retries: 10
63 start_period: 20s
64
65 postgres:
66 image: postgres:15-alpine
67 container_name: n8n-postgres
68 restart: unless-stopped
69 environment:
70 POSTGRES_USER: ${POSTGRES_USER}
71 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
72 POSTGRES_DB: ${POSTGRES_DB}
73 PGDATA: /var/lib/postgresql/data/pgdata
74 volumes:
75 - <APPDATA>/n8n-db:/var/lib/postgresql/data
76 networks:
77 - n8n_net
78
79 networks:
80 proxy:
81 external: true
82 name: proxy
83 n8n_net:
84 driver: bridge
85 {{/code}}
86
87 * ##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.
88 * ##N8N_EXPRESS_TRUST_PROXY## et ##N8N_SECURE_COOKIE## sont nécessaires derrière SWAG en https.
89
90 == Workflow : notification des mises à jour Docker ==
91
92 Toutes les 10 minutes, le workflow :
93
94 * lit la liste des conteneurs, arrêtés compris, via l'API de docker-socket-proxy (##http:~/~/dockersocket:2375/containers/json?all=1##) ;
95 * 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 ;
96 * envoie un message Telegram listant les conteneurs mis à jour, recréés ou nouveaux.
97
98 Au premier lancement, il enregistre l'état sans rien envoyer. Un déclencheur manuel permet de réinitialiser cet état.
99
100 Prérequis :
101
102 * docker-socket-proxy sur le réseau ##proxy##, avec la lecture des conteneurs autorisée (##CONTAINERS=1##) ;
103 * le jeton du bot Telegram enregistré comme identifiant dans n8n, jamais écrit en clair dans une URL de nœud.
104
105 == Sauvegarde ==
106
107 Dump SQL de ##n8n-postgres## et dossier ##<APPDATA>/n8n## par le script de [[Sauvegarde>>Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]].