Aller au contenu

Configuration et Backup de votre conteneur n8n.io

cover-youtube

Dans ce court billet de blog, je souhaiterais revenir sur l’installation de n8n.io que j’ai déjà mentionné ici. L’idée est ce monter une instance d’n8n.io et de la backup en local.

Je vais installer mon instance n8n.io sur sur mon serveur Portainer pour mes tests :

Ici, je vais créer une stack simple n8n-postgres avec docker-compose :

  • Un conteneur n8n
  • Un conteneur Postgres 12

upload in progress, 0

Voici ma configuration :

Fenêtre de terminal
version: '3.8'
services:
n8n:
image: n8nio/n8n
volumes:
- backup-n8n:/backup
ports:
- "5678:5678"
environment:
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_SECURE_COOKIE=false
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=MonSuperMotPasse
depends_on:
- db
restart: unless-stopped
db:
image: postgres:12
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=MonSuperMotPasse
- POSTGRES_DB=n8n
restart: unless-stopped
volumes:
db-data:
backup-n8n:

Par rapport à une configuration classique, j’ai ajouté cette ligne :

Fenêtre de terminal
- N8N_SECURE_COOKIE=false

Ceci permet de pouvoir configurer n8n en local sans https pour le moment. Nous reviendrons sur cette plus tard quand nous aurons terminé la configuration de notre serveur (dans cet exemple avec Nginx).

Une fois la stack lancé rendez-vous sur l’url de votre instance Portainer puis http://monip:5678/setup puis créer votre compte.

upload in progress, 0

Sur la version actuelle de mon instance d’n8n il est proposé d’obtenir gratuitement une clé de licence qui donne accès à des fonctionnalités payantes :

upload in progress, 0

Vous pouvez en effet le faire, cela sera utile.

Import & export des Workflow/credentials depuis un container docker

Section intitulée « Import & export des Workflow/credentials depuis un container docker »

Si vous avez utilisé le docker-compose de cet article vous voyez que l’on a créé un volume pour les backups :

Fenêtre de terminal
volumes:
- backup-n8n:/backup

Pour éviter les erreurs liées a des permissions sur le fichier de configuration, comme celle ci-dessous, j’ai rajouté une ligne dans le docker-compose que l’on retira par la suite

upload in progress, 0

Fenêtre de terminal
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

Vous pouvez exporter vos credentials avec cette commande.

Fenêtre de terminal
docker exec n8n-postgres-n8n-1 n8n export:credentials --backup --output=/home/node/backups/latest/

ou de façon décrypté avec cette commande :

Fenêtre de terminal
docker exec n8n-postgres-n8n-1 n8n export:credentials --all --decrypted --output=/home/node/backup/decrypt.json

Vous pouvez importer vos credentials avec cette commande :

Fenêtre de terminal
docker exec n8n-postgres-n8n-1 n8n import:workflow --input=/home/node/backup/decrypt.json

Vous pouvez exporter vos Worflow comme ceci :

Fenêtre de terminal
docker exec n8n-postgres-n8n-1 n8n export:workflow --backup --output=/home/node/backup/$now/workflows/

Dans ce volumes, vous pouvez placer votre dossier contenant les Workflow à importer si vous en avez, utiliser ensuite la commande suivante :

Fenêtre de terminal
docker exec -it -u node n8n-postgres-n8n-1 n8n import:workflow --separate --input /backup/votre_dossier_backup

Du coup voici mon script de backup :

#!/bin/bash
now=$(date +'%Y-%m-%d_%H-%M')
echo "Making backup folder for $now in n8n"
mkdir "/mnt/user/DATA/Backup/n8n/$now/"
mkdir "/mnt/user/DATA/Backup/n8n/$now/workflows"
mkdir "/mnt/user/DATA/Backup/n8n/$now/credentials"
echo "Exporting Workflow in folder"
docker exec n8n-postgres-n8n-1 n8n export:workflow --backup --output=/home/node/backup/$now/workflows/
echo "Exporting Credentials in folder"
docker exec n8n-postgres-n8n-1 n8n export:credentials --all --decrypted --output=/home/node/backup/$now/credentials/decrypt.json

Nous avons vu ici comment gérer les backup d’une instance local de n8n, mais également comment importer des workflows et des credentials dans une autre instance.