# 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 : ```bash sudo apt update && sudo apt upgrade -y ``` Redémarrez le serveur si nécessaire : ```bash 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 : ```bash sudo apt install -y curl wget gnupg2 ca-certificates lsb-release ``` 2. Ajoutez le dépôt NodeSource pour Node.js 20.x : ```bash curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - ``` 3. Installez Node.js : ```bash sudo apt install -y nodejs ``` 4. Vérifiez l'installation : ```bash 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 : ```bash sudo npm install -g n8n ``` ### Vérification de l'installation Vérifiez que n8n est installé correctement : ```bash n8n --version ``` ## Étape 4 : Configuration de l'Utilisateur Système Pour des raisons de sécurité, créez un utilisateur dédié pour n8n : ```bash sudo useradd -m -s /bin/bash n8n ``` Créez les répertoires nécessaires : ```bash 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 : ```bash sudo nano /home/n8n/.n8n/config ``` Ajoutez les variables d'environnement suivantes : ```bash # 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 : ```bash 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 : ```bash sudo nano /etc/systemd/system/n8n.service ``` Ajoutez le contenu suivant : ```ini [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 : ```bash sudo systemctl daemon-reload sudo systemctl enable n8n sudo systemctl start n8n ``` Vérifiez que le service fonctionne : ```bash sudo systemctl status n8n ``` ## Étape 7 : Installation et Configuration de Nginx Nginx servira de reverse proxy pour n8n. ### Installation de Nginx ```bash sudo apt install -y nginx ``` ### Configuration du Virtual Host Créez un fichier de configuration pour n8n : ```bash sudo nano /etc/nginx/sites-available/n8n ``` Ajoutez la configuration suivante : ```nginx 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 : ```bash sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/ ``` Testez la configuration : ```bash sudo nginx -t ``` Rechargez Nginx : ```bash 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 ```bash sudo apt install -y certbot python3-certbot-nginx ``` ### Obtention du Certificat SSL ```bash 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 : ```bash 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) : ```bash 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 : ```bash 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 : ```bash sudo apt install -y postgresql postgresql-contrib ``` 2. Créez une base de données et un utilisateur : ```bash sudo -u postgres psql ``` Dans le shell PostgreSQL : ```sql CREATE DATABASE n8n; CREATE USER n8n_user WITH PASSWORD 'mot_de_passe_securise'; GRANT ALL PRIVILEGES ON DATABASE n8n TO n8n_user; \q ``` 3. Ajoutez la configuration de la base de données dans `/home/n8n/.n8n/config` : ```bash 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 ``` 4. Redémarrez n8n : ```bash sudo systemctl restart n8n ``` ### Configuration de l'Encryption Pour sécuriser les credentials stockés, définissez une clé d'encryption : ```bash 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` : ```bash 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 : ```bash sudo nano /usr/local/bin/backup-n8n.sh ``` Ajoutez le contenu suivant : ```bash #!/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 : ```bash sudo chmod +x /usr/local/bin/backup-n8n.sh ``` Ajoutez une tâche cron pour une sauvegarde quotidienne : ```bash 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 : ```bash 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 : ```bash sudo systemctl stop n8n sudo npm update -g n8n sudo systemctl start n8n ``` Vérifiez la nouvelle version : ```bash n8n --version ``` ## Étape 14 : Surveillance et Logs ### Visualiser les logs en temps réel ```bash sudo journalctl -u n8n -f ``` ### Voir les logs récents ```bash sudo journalctl -u n8n -n 100 --no-pager ``` ### Logs spécifiques par date ```bash sudo journalctl -u n8n --since "2024-01-01" --until "2024-01-02" ``` ## Dépannage ### n8n ne démarre pas Vérifiez les logs : ```bash sudo journalctl -u n8n -n 50 ``` Vérifiez que le port n'est pas déjà utilisé : ```bash sudo netstat -tulpn | grep 5678 ``` ### Problèmes de connexion Vérifiez que Nginx fonctionne : ```bash sudo systemctl status nginx ``` Testez la configuration Nginx : ```bash sudo nginx -t ``` ### Erreurs de permissions Vérifiez les permissions du répertoire n8n : ```bash 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` : ```ini Environment="NODE_OPTIONS=--max-old-space-size=2048" ``` Puis rechargez : ```bash sudo systemctl daemon-reload sudo systemctl restart n8n ``` ## Commandes Utiles ### Gérer le service n8n ```bash # 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 ```bash # 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 : ```bash sudo apt install -y fail2ban ``` Créez un filtre pour n8n : ```bash sudo nano /etc/fail2ban/filter.d/n8n.conf ``` Ajoutez : ```ini [Definition] failregex = ^ .* "POST .*" 401 ignoreregex = ``` Créez une jail : ```bash sudo nano /etc/fail2ban/jail.d/n8n.conf ``` Ajoutez : ```ini [n8n] enabled = true port = http,https filter = n8n logpath = /var/log/nginx/access.log maxretry = 5 bantime = 3600 ``` Redémarrez Fail2ban : ```bash sudo systemctl restart fail2ban ``` ### Limitation des connexions avec Nginx Ajoutez dans votre configuration Nginx : ```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` : ```ini LimitNOFILE=65536 ``` ### Configuration Node.js optimisée Ajoutez dans `/home/n8n/.n8n/config` : ```bash 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 !