Masquer les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
![]() |
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 | |||
![]() |
2.1 | 9 | n8n est sur trois réseaux : ##proxy## (SWAG), ##n8n_net## (sa base, isolée) et ##docker-api## (docker-socket-proxy). |
![]() |
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 | ||
![]() |
2.1 | 58 | - docker-api |
![]() |
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 | ||
![]() |
2.1 | 86 | docker-api: |
| 87 | external: true | ||
![]() |
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 | |||
![]() |
2.1 | 105 | * n8n sur le réseau ##docker-api##, partagé avec [[docker-socket-proxy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.DockerSocketProxy.WebHome]] ; |
![]() |
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]]. |
