Migration de n8n : SQLite vers PostgreSQL (Procédure Sécurisée)

Ce guide détaille la procédure pour migrer une instance n8n auto-hébergée avec Docker de sa base de données par défaut (SQLite) vers une base de données plus robuste (PostgreSQL).

Cette migration concerne les instances n8n qui montent en charge et passent en production.

Objectif : Assurer une transition sécurisée des workflows et des credentials.

Point important : Cette méthode officielle ne migre pas l’historique des exécutions passées.


Étape 1 : Sauvegarde Complète de l’Instance Actuelle

Avant toute modification, une sauvegarde est impérative.

Arrêtez l’instance n8n pour garantir que les fichiers ne sont pas en cours d’utilisation.Bash

// File: command.sh // Purpose: Stop the current n8n stack. docker-compose down

Copiez l’intégralité du répertoire de données de n8n. Le nom de ce répertoire dépend de votre configuration docker-compose.yml (souvent n8n_data).

Bash// File: command.sh // Purpose: Create a timestamped backup of the n8n data directory. cp -R ./n8n_data/ ./n8n_data_backup_$(date +%F)


Étape 2 : Exportation des Données (Workflows & Credentials)

Cette étape extrait les données de votre instance SQLite.

Redémarrez l’instance SQLite temporairement. Les commandes d’exportation nécessitent que le service n8n soit actif.

Bash// File: command.sh // Purpose: Start the old n8n instance to perform exports. docker-compose up -d

Récupérez la clé de chiffrement (N8N_ENCRYPTION_KEY). Elle est indispensable pour que vos credentials restent valides.

Bash// File: command.sh // Purpose: Display the n8n config file to retrieve the encryption key. docker-compose exec n8n cat /home/node/.n8n/config

Copiez la valeur de encryptionKey depuis la sortie JSON. Vous en aurez besoin juste après.

Exportez les workflows et les credentials dans des fichiers JSON. Ces commandes les sauvegardent à l’intérieur du volume Docker.

Bash// File: command.sh // Purpose: Export all workflows to a JSON file. docker-compose exec -u node n8n export:workflow --all --output=/home/node/.n8n/workflows.json // File: command.sh // Purpose: Export all credentials to a JSON file. docker-compose exec -u node n8n export:credentials --all --output=/home/node/.n8n/credentials.json

Arrêtez définitivement l’ancienne instance.Bash// File: command.sh // Purpose: Stop and remove the old n8n container. docker-compose down


Étape 3 : Configuration du Nouvel Environnement PostgreSQL

Nous allons maintenant préparer docker-compose pour utiliser PostgreSQL.

Créez un fichier .env pour stocker vos secrets. Placez-y la clé de chiffrement récupérée.

Extrait de code

// File: .env // Purpose: Environment variables for the new PostgreSQL-based n8n instance. # Mandatory: The encryption key from your old instance N8N_ENCRYPTION_KEY=collez_votre_cle_recuperee_ici # PostgreSQL Credentials POSTGRES_DB=n8n POSTGRES_USER=n8n POSTGRES_PASSWORD=votre_mot_de_passe_solide_pour_postgres # Other n8n variables DOMAIN_NAME=votre-domaine.com SUBDOMAIN=n8n GENERIC_TIMEZONE=Europe/Paris

Mettez à jour le fichier docker-compose.yml pour inclure le service PostgreSQL et reconfigurer n8n.

YAML// File: docker-compose.yml // Purpose: Docker Compose configuration for n8n with a PostgreSQL database. version: '3' services: db: image: postgres:14 container_name: postgres_n8n restart: always environment: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 5s timeout: 5s retries: 10 n8n: image: n8nio/n8n container_name: n8n restart: always ports: - "5678:5678" environment: # --- Mandatory Encryption Key --- - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # --- PostgreSQL Connection --- - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=db - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_DATABASE=${POSTGRES_DB} - DB_POSTGRESDB_USER=${POSTGRES_USER} - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} - DB_POSTGRESDB_SCHEMA=public # --- Other n8n variables --- - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} volumes: - n8n_data:/home/node/.n8n depends_on: db: condition: service_healthy volumes: postgres_data: n8n_data:


Étape 4 : Déploiement et Importation des Données

Démarrez la nouvelle infrastructure. Docker va créer la base de données PostgreSQL et lancer n8n avec une base de données vide.

Bash// File: command.sh // Purpose: Start the new n8n and PostgreSQL services. docker-compose up -d

Importez les workflows et credentials dans la nouvelle base de données.

Bash// File: command.sh // Purpose: Import workflows from the previously exported JSON file. docker-compose exec -u node n8n import:workflow --input=/home/node/.n8n/workflows.json // File: command.sh // Purpose: Import credentials from the previously exported JSON file. docker-compose exec -u node n8n import:credentials --input=/home/node/.n8n/credentials.json

Redémarrez les services pour une prise en compte finale.Bash// File: command.sh // Purpose: Restart services for a clean state after import. docker-compose restart


Étape 5 : Validation Finale

Connectez-vous à votre interface n8n. Vérifiez que tous vos workflows sont présents et que vos credentials sont correctement configurés et fonctionnels.

Une fois que vous avez validé le bon fonctionnement sur plusieurs jours, vous pouvez supprimer le dossier de sauvegarde et les fichiers workflows.json, credentials.json et database.sqlite de votre volume n8n_data.

Publications similaires