Guide d'Installation de n8n sur VPS Debian

Introduction

n8n est une plateforme d'automatisation de workflow open-source qui vous permet de connecter différents services et applications. Ce guide vous accompagne dans l'installation complète de n8n sur un VPS Debian avec une configuration sécurisée et professionnelle.

Prérequis

Avant de commencer l'installation, assurez-vous que votre VPS dispose de :

  • Debian 11 (Bullseye) ou Debian 12 (Bookworm)
  • Au moins 2 Go de RAM (4 Go recommandés)
  • 20 Go d'espace disque disponible
  • Accès root ou sudo
  • Un nom de domaine pointant vers votre VPS (recommandé pour HTTPS)
  • Connexion Internet stable

Étape 1 : Mise à Jour du Système

Connectez-vous à votre VPS via SSH et mettez à jour le système :

sudo apt update && sudo apt upgrade -y

Redémarrez le serveur si nécessaire :

sudo reboot

Étape 2 : Installation de Node.js

n8n nécessite Node.js version 18.x ou supérieure.

Installation via NodeSource

  1. Installez les dépendances nécessaires :
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release
  1. Ajoutez le dépôt NodeSource pour Node.js 20.x :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
  1. Installez Node.js :
sudo apt install -y nodejs
  1. Vérifiez l'installation :
node --version
npm --version

Vous devriez voir Node.js v20.x et npm 10.x ou supérieur.

Étape 3 : Installation de n8n avec npm

Installation globale

Installez n8n globalement avec npm :

sudo npm install -g n8n

Vérification de l'installation

Vérifiez que n8n est installé correctement :

n8n --version

Étape 4 : Configuration de l'Utilisateur Système

Pour des raisons de sécurité, créez un utilisateur dédié pour n8n :

sudo useradd -m -s /bin/bash n8n

Créez les répertoires nécessaires :

sudo mkdir -p /home/n8n/.n8n
sudo chown -R n8n:n8n /home/n8n

Étape 5 : Configuration de n8n

Créez un fichier de configuration d'environnement :

sudo nano /home/n8n/.n8n/config

Ajoutez les variables d'environnement suivantes :

# Configuration de base
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=VotreMotDePasseSecurise

# Configuration du domaine
N8N_HOST=votre-domaine.com
N8N_PORT=5678
N8N_PROTOCOL=https

# Configuration de l'éditeur
N8N_EDITOR_BASE_URL=https://votre-domaine.com/

# Configuration Webhook
WEBHOOK_URL=https://votre-domaine.com/

# Fuseau horaire
GENERIC_TIMEZONE=Europe/Paris

# Chemin des données
N8N_USER_FOLDER=/home/n8n/.n8n

Ajustez les valeurs selon vos besoins. Pour un environnement de test local, vous pouvez utiliser :

N8N_HOST=0.0.0.0
N8N_PORT=5678
N8N_PROTOCOL=http

Étape 6 : Création du Service Systemd

Créez un service systemd pour gérer n8n automatiquement :

sudo nano /etc/systemd/system/n8n.service

Ajoutez le contenu suivant :

[Unit]
Description=n8n - Workflow Automation
After=network.target

[Service]
Type=simple
User=n8n
EnvironmentFile=/home/n8n/.n8n/config
ExecStart=/usr/bin/n8n start
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Rechargez systemd et activez le service :

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n

Vérifiez que le service fonctionne :

sudo systemctl status n8n

Étape 7 : Installation et Configuration de Nginx

Nginx servira de reverse proxy pour n8n.

Installation de Nginx

sudo apt install -y nginx

Configuration du Virtual Host

Créez un fichier de configuration pour n8n :

sudo nano /etc/nginx/sites-available/n8n

Ajoutez la configuration suivante :

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Headers de sécurité
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Timeouts pour les webhooks
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
    }
}

Activez le site :

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/

Testez la configuration :

sudo nginx -t

Rechargez Nginx :

sudo systemctl reload nginx

Étape 8 : Installation de Certbot pour HTTPS

Sécurisez votre installation avec un certificat SSL gratuit de Let's Encrypt.

Installation de Certbot

sudo apt install -y certbot python3-certbot-nginx

Obtention du Certificat SSL

sudo certbot --nginx -d votre-domaine.com

Suivez les instructions à l'écran. Certbot configurera automatiquement Nginx pour utiliser HTTPS.

Renouvellement Automatique

Testez le renouvellement automatique :

sudo certbot renew --dry-run

Le renouvellement automatique est configuré par défaut via un timer systemd.

Étape 9 : Configuration du Pare-feu

Si vous utilisez UFW (Uncomplicated Firewall) :

sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Vérifiez le statut :

sudo ufw status

Étape 10 : Accès à n8n

Vous pouvez maintenant accéder à n8n via votre navigateur :

https://votre-domaine.com

Connectez-vous avec les identifiants configurés dans le fichier de configuration (N8N_BASIC_AUTH_USER et N8N_BASIC_AUTH_PASSWORD).

Étape 11 : Configuration Avancée

Utilisation de PostgreSQL (Recommandé pour Production)

Par défaut, n8n utilise SQLite. Pour une meilleure performance en production, utilisez PostgreSQL.

  1. Installez PostgreSQL :
sudo apt install -y postgresql postgresql-contrib
  1. Créez une base de données et un utilisateur :
sudo -u postgres psql

Dans le shell PostgreSQL :

CREATE DATABASE n8n;
CREATE USER n8n_user WITH PASSWORD 'mot_de_passe_securise';
GRANT ALL PRIVILEGES ON DATABASE n8n TO n8n_user;
\q
  1. Ajoutez la configuration de la base de données dans /home/n8n/.n8n/config :
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=mot_de_passe_securise
  1. Redémarrez n8n :
sudo systemctl restart n8n

Configuration de l'Encryption

Pour sécuriser les credentials stockés, définissez une clé d'encryption :

N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
echo "N8N_ENCRYPTION_KEY=$N8N_ENCRYPTION_KEY" | sudo tee -a /home/n8n/.n8n/config

Configuration des Emails (SMTP)

Pour recevoir des notifications par email, ajoutez dans /home/n8n/.n8n/config :

N8N_EMAIL_MODE=smtp
N8N_SMTP_HOST=smtp.gmail.com
N8N_SMTP_PORT=587
[email protected]
N8N_SMTP_PASS=votre-mot-de-passe-app
[email protected]
N8N_SMTP_SSL=false

Étape 12 : Sauvegarde et Restauration

Sauvegarde Automatique

Créez un script de sauvegarde :

sudo nano /usr/local/bin/backup-n8n.sh

Ajoutez le contenu suivant :

#!/bin/bash

BACKUP_DIR="/backup/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
N8N_DIR="/home/n8n/.n8n"

mkdir -p $BACKUP_DIR

# Sauvegarde des données n8n
tar -czf $BACKUP_DIR/n8n_backup_$DATE.tar.gz $N8N_DIR

# Si PostgreSQL est utilisé
if [ -n "$DB_POSTGRESDB_DATABASE" ]; then
    sudo -u postgres pg_dump n8n > $BACKUP_DIR/n8n_db_$DATE.sql
    gzip $BACKUP_DIR/n8n_db_$DATE.sql
fi

# Garder seulement les 7 dernières sauvegardes
find $BACKUP_DIR -name "n8n_backup_*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "n8n_db_*.sql.gz" -mtime +7 -delete

echo "Sauvegarde terminée: $DATE"

Rendez le script exécutable :

sudo chmod +x /usr/local/bin/backup-n8n.sh

Ajoutez une tâche cron pour une sauvegarde quotidienne :

sudo crontab -e

Ajoutez la ligne suivante (sauvegarde quotidienne à 2h du matin) :

0 2 * * * /usr/local/bin/backup-n8n.sh

Restauration

Pour restaurer une sauvegarde :

sudo systemctl stop n8n
sudo tar -xzf /backup/n8n/n8n_backup_YYYYMMDD_HHMMSS.tar.gz -C /
sudo chown -R n8n:n8n /home/n8n/.n8n

# Si PostgreSQL
gunzip /backup/n8n/n8n_db_YYYYMMDD_HHMMSS.sql.gz
sudo -u postgres psql n8n < /backup/n8n/n8n_db_YYYYMMDD_HHMMSS.sql

sudo systemctl start n8n

Étape 13 : Mise à Jour de n8n

Pour mettre à jour n8n vers la dernière version :

sudo systemctl stop n8n
sudo npm update -g n8n
sudo systemctl start n8n

Vérifiez la nouvelle version :

n8n --version

Étape 14 : Surveillance et Logs

Visualiser les logs en temps réel

sudo journalctl -u n8n -f

Voir les logs récents

sudo journalctl -u n8n -n 100 --no-pager

Logs spécifiques par date

sudo journalctl -u n8n --since "2024-01-01" --until "2024-01-02"

Dépannage

n8n ne démarre pas

Vérifiez les logs :

sudo journalctl -u n8n -n 50

Vérifiez que le port n'est pas déjà utilisé :

sudo netstat -tulpn | grep 5678

Problèmes de connexion

Vérifiez que Nginx fonctionne :

sudo systemctl status nginx

Testez la configuration Nginx :

sudo nginx -t

Erreurs de permissions

Vérifiez les permissions du répertoire n8n :

sudo chown -R n8n:n8n /home/n8n/.n8n

Problèmes de mémoire

Si n8n manque de mémoire, ajoutez cette ligne dans /etc/systemd/system/n8n.service :

Environment="NODE_OPTIONS=--max-old-space-size=2048"

Puis rechargez :

sudo systemctl daemon-reload
sudo systemctl restart n8n

Commandes Utiles

Gérer le service n8n

# Démarrer n8n
sudo systemctl start n8n

# Arrêter n8n
sudo systemctl stop n8n

# Redémarrer n8n
sudo systemctl restart n8n

# Voir le statut
sudo systemctl status n8n

# Activer au démarrage
sudo systemctl enable n8n

# Désactiver au démarrage
sudo systemctl disable n8n

Gérer Nginx

# Redémarrer Nginx
sudo systemctl restart nginx

# Recharger la configuration
sudo systemctl reload nginx

# Tester la configuration
sudo nginx -t

Sécurité Supplémentaire

Fail2ban pour n8n

Installez Fail2ban pour protéger contre les tentatives de connexion :

sudo apt install -y fail2ban

Créez un filtre pour n8n :

sudo nano /etc/fail2ban/filter.d/n8n.conf

Ajoutez :

[Definition]
failregex = ^<HOST> .* "POST .*" 401
ignoreregex =

Créez une jail :

sudo nano /etc/fail2ban/jail.d/n8n.conf

Ajoutez :

[n8n]
enabled = true
port = http,https
filter = n8n
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600

Redémarrez Fail2ban :

sudo systemctl restart fail2ban

Limitation des connexions avec Nginx

Ajoutez dans votre configuration Nginx :

limit_req_zone $binary_remote_addr zone=n8n_limit:10m rate=10r/s;

server {
    # ... configuration existante ...
    
    location / {
        limit_req zone=n8n_limit burst=20;
        # ... reste de la configuration ...
    }
}

Optimisation des Performances

Augmenter les limites de fichiers

Ajoutez dans /etc/systemd/system/n8n.service :

LimitNOFILE=65536

Configuration Node.js optimisée

Ajoutez dans /home/n8n/.n8n/config :

N8N_CONCURRENCY_PRODUCTION_LIMIT=10
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168

Ressources Supplémentaires

Conclusion

Votre instance n8n est maintenant installée et configurée de manière sécurisée sur votre VPS Debian. N'oubliez pas de :

  • Faire des sauvegardes régulières
  • Maintenir le système à jour
  • Surveiller les logs
  • Adapter les paramètres selon vos besoins

Bon automatisation !