Guide d'Installation de n8n sur Debian

Guide complet d'installation de n8n sur VPS Debian. Ce tutoriel détaillé couvre l'installation de Node.js, la configuration de n8n avec systemd, la mise en place d'un reverse proxy Nginx, la sécurisation avec SSL/TLS via Let's Encrypt, et l'utilisation de PostgreSQL pour la production. Inclut également la configuration de sauvegardes automatiques, l'optimisation des performances, la surveillance avec journalctl, et des mesures de sécurité avancées comme Fail2ban.
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
- Installez les dépendances nécessaires :
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release
- Ajoutez le dépôt NodeSource pour Node.js 20.x :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
- Installez Node.js :
sudo apt install -y nodejs
- 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.
- Installez PostgreSQL :
sudo apt install -y postgresql postgresql-contrib
- 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
- 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
- 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
- Documentation officielle n8n : https://docs.n8n.io/
- Forum communautaire : https://community.n8n.io/
- GitHub n8n : https://github.com/n8n-io/n8n
- Templates de workflows : https://n8n.io/workflows/
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 !


















