Savoir installer et mettre à jour n8n c’est très bien, mais pour l’utiliser en production mieux vaut savoir mettre en place des sauvegardes efficaces, au risque de perdre tous vous workflows !

Installation du script de sauvegarde

Récupération de la configuration

Nous allons récupérer quelques fichiers depuis Github pour faciliter la configuration de notre sauvegarde.

Pour cela, voici la commande permettant de cloner ce que j'ai chez moi :

git clone https://github.com/tim-tiret/n8n-backup.git

Rendons nous ensuite dans le dossier créé.

cd n8n-backup

Personnalisation du script

Nous allons modifier le script pour notre configuration, pour cela, il est nécessaire d’ouvrir le fichier.

nano backup_n8n.sh

Cela se passe dans la section configuration au début du fichier.

# Configuration
BACKUP_DIR="/root/n8n-backup/backups"
DATA_FOLDER="/root/n8n-docker-caddy"  # Le même que dans votre .env
RETENTION_DAYS=30
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ℹ️
Vous avez la possibilité de changer le nombre de jours pendant lequel vous souhaitez conserver vos sauvegarde (j’ai mis 30 jours perso) et si votre configuration diffère de la mienne, vous aurez certainement une autre dossier de backup ou de data.

Lancer le script

⚠️
Avant d’exécuter un script inconnu, assurez-vous de bien comprendre ce qu’il fait.

C’est parti !

./backup_n8n.sh

Bravo, vous avez fait votre première sauvegarde ! 🎉

Tenter une restauration

Les sauvegardes ne sont pas très utiles si l’on ne peut pas les restaurer, on va donc utiliser le deuxième script (restore_n8n.sh) pour restaurer la dernière sauvegarde.

ℹ️
Pour vérifier que cela fonctionne bien je vous recommande de faire une modification dans votre N8N après l’avoir sauvegardé pour voir si la modification a bien été retirée après restauration.

Personnalisation du script

De la même manière qu'avant, on ouvre et on configure le fichier.

nano restore_n8n.sh

Chez moi, cela donne ça :

# Configuration
BACKUP_DIR="/root/n8n-backup/backups"
DATA_FOLDER="/root/n8n-docker-caddy"

Lancement du script

Espérons que ça fonctionne...

./restore_n8n.sh

On me demande si je veux bien restaurer les dernières sauvegardes trouvées, je dis oui avec y.

Ça fonctionne ! ✅

Sauvegarde distante via SFTP/SSH

Bien qu’une sauvegarde interne puisse être utile, le mieux est d’avoir également un serveur distant pour éviter tous risques de pertes. L’on va donc effectuer une copie de nos fichiers de sauvegarde sur un serveur distant, en l’occurence un hébergement mutualisé C-Panel.

Installation de LFTP

Nous allons utiliser LFTP, un client FTP qui permet de faire un miroir sur un dossier distant facilement.

Voici la commande d’installation :

sudo apt update
sudo apt install lftp

Pour vérifier la bonne installation, on peut exécuter cette commande :

lftp --version

Configuration de la sauvegarde distante

Pour configurer la sauvegarde distante, il faut modifier les variables au début du script pour correspondre à notre besoin, par exemple :

nano backup_n8n.sh
# Configuration SFTP
SFTP_USER="admin" # le nom d'utilisateur sftp
SFTP_HOST="93.93.93.93" # l'ip de votre serveur de sauvegarde
SFTP_PORT="22" # le port pour le sftp de votre serveur de sauvegarde
SSH_KEY="/root/n8n-backup/key" # le chemin vers votre clé ssh (on la crée juste après)
REMOTE_DIR="sauvegardes" # le dossier distant

Ensuite, on décommente les lignes concernées en enlevant le hashtag devant (vers la fin du script).

# Envoi des sauvegardes via SFTP
log_message "Envoi des sauvegardes vers le serveur distant..."

lftp <<EOF
open -u $SFTP_USER, sftp://$SFTP_HOST:$SFTP_PORT
set sftp:connect-program "ssh -o StrictHostKeyChecking=accept-new -a -x -i $SSH_KEY"
mirror -R $BACKUP_DIR/ $REMOTE_DIR/
quit
EOF

Création et enregistrement d’une clé SSH

Nous allons maintenant générer une nouvelle clé SSH dans C-Panel, il n’est pas nécessaire de définir un mot de passe.

SSH Access icon - Cpanel
Manage SSH Keys Button - Cpanel
Generate a new SSH Key Button -  Cpanel
Generate Key - Cpanel SSH

Il faut maintenant autoriser la clé, l’afficher et la copier.

Manage Public Key - Cpanel SSH
Authorize SSH Key - Cpanel
View - Download Private Key - Cpanel SSH
Copy SSH Access Key - Cpanel

On va maintenant la créer dans notre dossier n8n-backup sur le serveur (il suffit de coller ce qu'on a copié) :

nano key

Une fois fermé et enregistré, je modifie les droits sur la clé pour les réduire au maximum.

chmod 600 key

Avant de lancer le script pour la première fois, il sera peut-être également nécessaire d'ajouter votre hébergeur à vos "known_hosts", pour ce faire, vous pouvez lancer cette commande :

ssh -o StrictHostKeyChecking=ask -i $SSH_KEY $SFTP_USER@$SFTP_HOST -p $SFTP_PORT

Peut-être qu'il sera nécessaire d'exécuter une autre commande pour valider l'ajout qui sera normalement affichée à l'écran.

Lancement du script !

Tout semble prêt, je peux à présent lancer le script :

./backup_n8n.sh

Tout est copié sur le serveur distant ! 🎉

Automatiser la sauvegarde via Crontab

Une tâche CRON est programmée à l’avance et s’exécute à interval régulier.

Pour créer une tâche CRON, on utilise la Crontab de Linux, un espace où l’on peut définir des tâches pour qu’elles s’exécutent régulièrement.

Voici la commande pour y accéder :

crontab -e

La première fois qu’on essaie d’y accéder on nous demande quel éditeur l’on souhaite choisir, le plus simple est nano :

no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]: 1

Ensuite, on écrit une ligne où l’on définit la fréquence à laquelle l’on veut éxecuter notre script, pour moi ce sera tous les jours à 18h30.

30 18 * * * /root/n8n-backup/backup_n8n.sh >> /var/log/n8n_backup.log 2>&1

Pour vérifier je vous conseille de faire le test avec une heure proche de la votre et de changer à nouveau après, par exemple s’il est bientôt 10h32 :

32 10 * * * /root/n8n-backup/backup_n8n.sh >> /var/log/n8n_backup.log 2>&1
⚠️
Attention à bien mettre un horaire dans le futur, sinon vous devrez attendre 24h ou modifier la crontab pour voir le résultat de votre test. De plus, le fuseau horaire de votre serveur peut être différent du vôtre, souvent l’heure locale du serveur est affichée lors de la connexion, pensez bien à vérifier.

🎉 Félicitations, cela devrais fonctionner !

Merci pour votre lecture.

Sauvegarder automatiquement N8N sur un serveur distant