« Catégorie:N8N » : différence entre les versions

De Support SOFAKOM
Ligne 170 : Ligne 170 :
Il faut faire l'installation du module dans le conteneur docker après avoir reboot le dit conteneur en tant que "user: root" (voir docker-compose.yml). Après installation il faut restart en mode normal (l'user par defaut est 'n8n').
Il faut faire l'installation du module dans le conteneur docker après avoir reboot le dit conteneur en tant que "user: root" (voir docker-compose.yml). Après installation il faut restart en mode normal (l'user par defaut est 'n8n').


Exemple pour le module web_push afin qu'il soit exploitable dans un noeud "Code" de n8n :  
L'ajout d'un module node exploitable necessite l'usage du script fournis afin de faire tout les ajouts :
  docker exec -it nom_de_votre_conteneur_n8n /bin/sh -c "npm install -g web-push"
ajout_module_node_dans_conteneur_n8n.sh
 
#!/bin/bash
# Script pour installer web-push après mise à jour de n8n
# Installer web-push globalement
npm install -g $1
# Installer web-push dans le répertoire du Task Runner
npm install $1 --prefix /usr/local/lib/node_modules/n8n/node_modules/@n8n/task-runner
# Créer un lien symbolique du module vers le répertoire racine des modules
ln -sf /usr/local/lib/node_modules/$1 /usr/local/lib/node_modules/n8n/node_modules/$1
# Donner les bonnes permissions
chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/@n8n/task-runner/node_modules
chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/$1
 
Par exemple comme ceci (depuis l'hote) :  
 
  docker exec -u root -i n8n /bin/sh < ajout_module_node_dans_conteneur_n8n.sh web-push
 
Regarder les logs qui doivent indiquer que task-runner est lancer (l'erreur de task rennuer apparait lors de la déclaration du nouveau module dans NODE_FUNCTION_ALLOW_EXTERNAL alors qu'il n'est pas installé) :
 
docker logs -f n8n
 
Ne pas oublier de relancer le conteneur n8n en commentant l' "user: root" .


Dans le noeud "Code" il suffit de le déclarer ensuite pour pouvoir l'utiliser :
Dans le noeud "Code" il suffit de le déclarer ensuite pour pouvoir l'utiliser :
Ligne 179 : Ligne 205 :
Par exemple pour les modules web-push,axios,lodash et moment :
Par exemple pour les modules web-push,axios,lodash et moment :
  - NODE_FUNCTION_ALLOW_EXTERNAL=web-push,axios,lodash,moment
  - NODE_FUNCTION_ALLOW_EXTERNAL=web-push,axios,lodash,moment
Ce qui donne par exemple pour le service n8n dans le docker compose yml :
services:
  n8n:
    image: n8nio/n8n
    user: root  # Utiliser root pour les opérations d'installation
    volumes:
      - /opt/projects/data/n8n_config:/home/node/.n8n
      - /opt/projects/data/n8n_node_modules:/usr/local/lib/node_modules
    environment:
      - NODE_FUNCTION_ALLOW_EXTERNAL=web-push,axios,lodash,moment
    # ... autres configurations


= Ressources =
= Ressources =

Version du 7 mai 2025 à 11:34

Installation

Sur serveur Ubuntu

NODE

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
nvm install 22
nvm current

n8n

export N8N_SECURE_COOKIE="false"
npx n8n

En tant que service

Premier lancement comme root

sudo nano /etc/systemd/system/n8n.service
[Unit]
Description=n8n
After=network.target

[Service]
ExecStart=/home/aeyos/.nvm/versions/node/v22.13.1/bin/n8n
#WorkingDirectory=/home/aeyos
Restart=always
User=root
Environment=PATH=/usr/bin:/usr/local/bin:/home/aeyos/.nvm/versions/node/v22.13.1/bin
Environment=NODE_ENV=production
Environment=N8N_SECURE_COOKIE=false # permet un access en http, utile pour tester au debut avant la mise en place de letsencrypt
# Environment=N8N_PORT=6254 # 5678 par defaut
Environment=N8N_PAYLOAD_SIZE_MAX=200 #16Mo par defaut , voir https://docs.n8n.io/hosting/configuration/environment-variables/endpoints/

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable n8n.service
sudo systemctl restart n8n.service
sudo systemctl status n8n.service

Autre lancement comme aeyos

sudo nano /etc/systemd/system/n8n.service
User=aeyos
sudo systemctl daemon-reload
sudo systemctl restart n8n.service
sudo systemctl status n8n.service

Dans un conteneur docker

Exemple de fichier docker-compose.yml

version: "3.8"

services:
 # ===================== N8N =====================
 mysql:
   image: mysql:8
   container_name: mysql_n8n
   restart: unless-stopped
   environment:
     MYSQL_ROOT_PASSWORD: Sx6mFRTqr8YVIcdbQoOs
     MYSQL_DATABASE: n8n
     MYSQL_USER: n8n
     MYSQL_PASSWORD: EkwvN6ocDOAUqZxHfz2f
   volumes:
     - /opt/projects/data/n8n_mysql_data:/var/lib/mysql
     - /opt/projects/mysql-conf/my.cnf:/etc/mysql/conf.d/my_custom.cnf
   networks:
     - n8n
   ports:
     - "3306:3306"

 n8n:
   image: n8nio/n8n
#    user: root  # Utiliser root pour les opérations d'installation : ATTENTION en utilisant root n8n ne fonctionnera pas , il faudra restart apres install du module en commantant cette ligne
   container_name: n8n
   environment:
     DB_TYPE: mysqldb
     DB_MYSQLDB_HOST: mysql
     DB_MYSQLDB_PORT: 3306
     DB_MYSQLDB_DATABASE: n8n
     DB_MYSQLDB_USER: n8n
     DB_MYSQLDB_PASSWORD: EkwvN6ocDOAUqZxHfz2f
     N8N_BASIC_AUTH_ACTIVE: "true"
     N8N_BASIC_AUTH_USER: admin
     N8N_BASIC_AUTH_PASSWORD: dmoBqFlhnH46lRJ2V1qn
     N8N_HOST: webiciel.pyrostech.net
     WEBHOOK_URL: https://webiciel.pyrostech.net/
     GENERIC_TIMEZONE: Europe/Paris
     N8N_DEFAULT_LOCALE: fr
     N8N_RUNNERS_ENABLED: "true"
     N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "false"
     NODE_PATH: "/usr/local/lib/node_modules:/home/node/.npm-global/lib/node_modules"
     PATH: "/home/node/.npm-global/bin:${PATH}"
     NODE_FUNCTION_ALLOW_EXTERNAL: "web-push"
     NPM_CONFIG_PREFIX: "/home/node/.npm-global"
   restart: unless-stopped
   volumes:
     - /opt/projects/data/n8n_config:/home/node/.n8n
     - /opt/projects/data/n8n_node_modules:/home/node/.npm-global
     - /opt/projects/data/n8n_taskrunner_node_modules:/usr/local/lib/node_modules/n8n/node_modules/@n8n/task-runner/node_modules
   networks:
     - n8n
   depends_on:
     - mysql
   labels:
     - "traefik.enable=true"
     - "traefik.http.routers.n8n.rule=Host(`webiciel.pyrostech.net`)"
     - "traefik.http.routers.n8n.entrypoints=websecure"
     - "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
     - "traefik.http.services.n8n.loadbalancer.server.port=5678"

 # ===================== Traefik =====================
 traefik:
   image: traefik:v2.10
   restart: unless-stopped
   container_name: traefik
   command:
     - "--providers.docker=true"
     - "--entrypoints.web.address=:80"
     - "--entrypoints.websecure.address=:443"
     - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
     - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
     - "--certificatesresolvers.letsencrypt.acme.email=ghyslain.daubeze@sofakom.fr"
     - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
     - "--api.dashboard=true"
   ports:
     - "80:80"
     - "443:443"
     - "8080:8080"  # interface Traefik
   volumes:
     - "/var/run/docker.sock:/var/run/docker.sock:ro"
     - "/opt/projects/data/:/letsencrypt"
   networks:
     - n8n
   restart: always
   labels:
     - "traefik.enable=true"
     - "traefik.http.routers.traefik.rule=Host(`traefik.webiciel.pyrostech.net`)"
     - "traefik.http.routers.traefik.entrypoints=websecure"
     - "traefik.http.routers.traefik.service=api@internal"
     - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
     - "traefik.http.routers.traefik.middlewares=authtraefik"
     - "traefik.http.middlewares.authtraefik.basicauth.users=admin:$$apr1$$HU35emVn$$dD/PEQV0wqrF.hMJni9/F/"

networks:
 n8n:

Il conviendra de créer les dossiers locaux correspondant au montage, ici :

/opt/projects/data/n8n_config
/opt/projects/data/n8n_node_modules

Exécutez les commandes suivantes sur votre système hôte pour attribuer les bonnes permissions au dossier destiné aux modules :

# Créer le dossier s'il n'existe pas
sudo mkdir -p /opt/projects/data/n8n_node_modules

# Définir la propriété au même UID/GID que l'utilisateur node dans le conteneur (généralement 1000:1000)
sudo chown -R 1000:1000 /opt/projects/data/n8n_node_modules

# Définir les permissions correctes
sudo chmod -R 775 /opt/projects/data/n8n_node_modules

L'utilisateur node dans le conteneur n8n a généralement l'UID 1000 et le GID 1000. Si vous avez besoin de vérifier cela, vous pouvez exécuter :

docker exec -it nom_de_votre_conteneur_n8n id node

Ajout de module node

Il faut faire l'installation du module dans le conteneur docker après avoir reboot le dit conteneur en tant que "user: root" (voir docker-compose.yml). Après installation il faut restart en mode normal (l'user par defaut est 'n8n').

L'ajout d'un module node exploitable necessite l'usage du script fournis afin de faire tout les ajouts :

ajout_module_node_dans_conteneur_n8n.sh
#!/bin/bash
# Script pour installer web-push après mise à jour de n8n

# Installer web-push globalement
npm install -g $1

# Installer web-push dans le répertoire du Task Runner
npm install $1 --prefix /usr/local/lib/node_modules/n8n/node_modules/@n8n/task-runner

# Créer un lien symbolique du module vers le répertoire racine des modules
ln -sf /usr/local/lib/node_modules/$1 /usr/local/lib/node_modules/n8n/node_modules/$1

# Donner les bonnes permissions
chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/@n8n/task-runner/node_modules
chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/$1

Par exemple comme ceci (depuis l'hote) :

docker exec -u root -i n8n /bin/sh < ajout_module_node_dans_conteneur_n8n.sh web-push

Regarder les logs qui doivent indiquer que task-runner est lancer (l'erreur de task rennuer apparait lors de la déclaration du nouveau module dans NODE_FUNCTION_ALLOW_EXTERNAL alors qu'il n'est pas installé) :

docker logs -f n8n

Ne pas oublier de relancer le conteneur n8n en commentant l' "user: root" .

Dans le noeud "Code" il suffit de le déclarer ensuite pour pouvoir l'utiliser :

const webpush = require('web-push');

Il faudra également définir les variable d'environnement autorisant les modules ajoutés. Par exemple pour les modules web-push,axios,lodash et moment :

- NODE_FUNCTION_ALLOW_EXTERNAL=web-push,axios,lodash,moment

Ressources

Pages dans la catégorie « N8N »

Cette catégorie comprend 5 pages, dont les 5 ci-dessous.