Catégorie:N8N

De Support SOFAKOM

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

Ajout de programmes au shell

docker ps
docker exec -it -u root CONTAINER_NAME_OR_ID sh
apk update
apk add imagemagick

Mise à jour du conteneur

docker-compose down
docker rmi n8nio/n8n
cd /opt/projects
docker-compose up -d

Si la version des modules installé n'est plus fonctionnelle avec les versions de modules n8n du conteneur, il suffira de les réinstaller.

Pour cela vider les dossiers :

  • /opt/projects/data/n8n_taskrunner_node_modules
  • /home/node/.npm-global

Puis refaire les install :

  • cd /opt/projects
  • down + up -d du conteneur n8n avec "user: root" dans le docker-compose.yml
  • docker exec -u root -i n8n /bin/sh < ajout_module_node_dans_conteneur_n8n.sh NOM_DU_MODULE
  • down + up -d du conteneur n8n en commentant "user: root" dans le docker-compose.yml

Ressources

Pages dans la catégorie « N8N »

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