O n8n tem se consolidado como uma das ferramentas mais poderosas para automação de fluxos de trabalho no ecossistema self-hosted. No entanto, assim como qualquer sistema crítico, a perda de dados pode ser catastrófica. Workflows complexos, credenciais armazenadas e conexões com APIs representam meses de configuração técnica. Este tutorial detalha o processo completo de backup e restauração do n8n em ambiente Docker, focando na integridade dos dados estruturados e nas variáveis de ambiente.
Compreendendo a Arquitetura de Dados do n8n
Antes de executar qualquer comando de cópia, é fundamental entender onde os dados residem. Uma instalação padrão do n8n via Docker Compose geralmente utiliza dois contêineres principais: o próprio n8n e um banco de dados postgresql. O Redis pode ser utilizado como fila de trabalho ou cache, dependendo da configuração.
O Banco de Dados (PostgreSQL): É aqui que a maioria dos seus workflows, nós executados, credenciais e configurações do usuário são armazenados. Sem um backup consistente deste banco, você perderá toda a lógica de automação criada.
As Credenciais: Embora as chaves de API sejam salvas no banco de dados, é recomendável manter uma cópia externa das variáveis de ambiente críticas ou arquivos de configuração se você planeja migrar para outra instância em hardware diferente.
Etapa 1: Preparação do Ambiente
O primeiro passo garante que não haja escritas ativas no banco de dados durante a cópia, evitando corrupção de dados. Se você estiver em produção, considere colocar o n8n em modo de manutenção ou pausar workflows ativos.
- Acesse o servidor host: Conecte-se via SSH ao seu servidor onde o Docker está rodando.
- Navegue até o diretório do projeto: Geralmente, os arquivos
docker-compose.ymlficam em um diretório dedicado, como/opt/n8nou/home/admin/n8n. - Verifique os serviços ativos: Execute o comando abaixo para confirmar que todos os contêineres estão rodando.
docker ps
Você deve ver pelo menos dois contêineres: um rotulado como n8n e outro como postgresql. Anote os nomes exatos dos contêineres, pois eles serão necessários para os comandos subsequentes.
Etapa 2: Backup do Banco de Dados PostgreSQL
O método mais seguro para backup de bancos de dados relacionais é utilizar a ferramenta pg_dump. Este comando exporta o banco de dados em um formato SQL ou customizado que pode ser facilmente restaurado.
- Crie um diretório de backups: Organize seus backups por data para facilitar a recuperação e o versionamento.
mkdir -p /opt/n8n/backups/$(date +%Y%m%d)
- Execute o dump do banco de dados: Utilize o comando
docker execpara rodar opg_dumpdentro do contêiner do PostgreSQL. Assumindo que seu contêiner se chaman8n-postgres-1(verifique comdocker ps):
docker exec n8n-postgres-1 pg_dump -U postgres n8n > /opt/n8n/backups/$(date +%Y%m%d)/n8n_db_backup.sql
Explicação técnica:
docker exec: Executa um comando em um contêiner em execução.-U postgres: Especifica o usuário do banco de dados (geralmentepostgres).n8n: É o nome do banco de dados dentro do contêiner. Verifique sua variávelPOSTGRES_DBnodocker-compose.yml.> ...: Redireciona a saída para um arquivo .sql.
Dica de Pro: Para bancos de dados grandes, use o formato customizado do PostgreSQL para compressão e restauração mais rápida:
docker exec n8n-postgres-1 pg_dump -U postgres -Fc n8n > /opt/n8n/backups/$(date +%Y%m%d)/n8n_db_backup.dump
Etapa 3: Backup de Configurações e Arquivos do Host
Além do banco de dados, o n8n armazena algumas configurações específicas no sistema de arquivos do contêiner ou variáveis de ambiente. Se você utiliza volumes mapeados para persistir dados além do banco (como n8n_data), faça um backup desses diretórios.
- Identifique os volumes: Verifique seu
docker-compose.ymlpara ver onde o volume/home/node/.n8nestá mapeado no host. - Copie os arquivos de configuração: Execute o seguinte comando para compactar e salvar as configurações locais:
docker cp n8n:/home/node/.n8n /opt/n8n/backups/$(date +%Y%m%d)/n8n_config
Este passo é crucial se você precisa restaurar credenciais que podem não ter sido sincronizadas perfeitamente ou para manter a identidade da instalação (como o instanceId, embora isso possa ser redefinido em migrações).
Etapa 4: Backup do Redis (Se Aplicável)
Se sua instância do n8n utiliza Redis para filas de trabalho ou cache, é recomendável fazer um snapshot da memória. O Redis salva o banco de dados periodicamente no disco (RDB) ou registra alterações (AOF).
- Forçar um salvamento imediato: Envie o sinal
BGSAVEao contêiner do Redis.
docker exec n8n-redis-1 redis-cli BGSAVE
- Copie o arquivo RDB: Após alguns segundos, copie o arquivo de snapshot (geralmente
dump.rdb) do volume mapeado.
cp /caminho/do/volume/redis/dump.rdb /opt/n8n/backups/$(date +%Y%m%d)/redis_dump.rdb
Etapa 5: Verificação da Integridade do Backup
Um backup não verificado é apenas uma esperança. Antes de prosseguir ou descartar backups antigos, valide o arquivo SQL.
- Verifique o tamanho do arquivo: Certifique-se de que o arquivo .sql não está vazio (0 bytes).
ls -lh /opt/n8n/backups/$(date +%Y%m%d)/
- Visualize as primeiras linhas: Confirme que o conteúdo é legível.
head -n 10 /opt/n8n/backups/$(date +%Y%m%d)/n8n_db_backup.sql
O arquivo deve começar com comentários padrão do pg_dump, indicando a versão e o comando de início da transação.
Etapa 6: Restauração do n8n
A restauração é o processo inverso. Ela deve ser realizada em uma nova instalação limpa ou quando se precisa reverter para um ponto anterior no tempo.
- Prepare o ambiente de destino: Instale o Docker e o Docker Compose, e suba os contêineres do n8n e PostgreSQL conforme sua configuração padrão. Não execute workflows ou adicione novos dados antes da restauração.
- Conecte-se ao banco de dados: Acesse o shell do contêiner PostgreSQL no novo ambiente.
docker exec -it n8n-postgres-1 bash
- Crie o banco de dados (se necessário): Se a restauração for para um banco vazio, certifique-se de que o banco
n8nexiste.
psql -U postgres -c "CREATE DATABASE n8n;"
- Restaure o banco de dados: Saia do bash e execute o restore a partir do host. Para arquivos .sql:
cat /opt/n8n/backups/20231027/n8n_db_backup.sql | docker exec -i n8n-postgres-1 psql -U postgres n8n
Para arquivos no formato customizado (.dump), use o comando pg_restore:
docker exec -i n8n-postgres-1 pg_restore -U postgres -d n8n /opt/n8n/backups/20231027/n8n_db_backup.dump
- Restaure o Redis (se aplicável): Substitua o arquivo
dump.rdbdo contêiner Redis pelo backup e reinicie o contêiner.
docker restart n8n-redis-1
- Reinicie o n8n: Para garantir que todas as conexões sejam restabelecidas corretamente, reinicie o contêiner principal.
docker restart n8n
Etapa 7: Troubleshooting Comum
Ainda que o processo seja direto, erros podem ocorrer. Abaixo estão os cenários mais frequentes e suas soluções.
Erro de Permissão (Permission Denied)
Se você receber erros ao tentar escrever no diretório de backup ou ler arquivos restaurados, verifique as permissões do usuário que está executando o Docker. Use chown para ajustar a propriedade dos arquivos de backup.
Incompatibilidade de Versão do PostgreSQL
O n8n é sensível à versão do banco de dados. Se você tentar restaurar um dump de uma versão mais recente do PostgreSQL em uma versão mais antiga, o processo falhará. Certifique-se de que a versão do contêiner PostgreSQL no destino seja igual ou superior à da origem.
Credenciais Corrompidas
Em alguns casos, credenciais salvas podem não carregar corretamente após uma migração entre versões muito distantes do n8n. Se workflows específicos falharem apenas na autenticação, tente reautenticar esses nós manualmente no novo ambiente.
Problemas com o Redis
Se o n8n iniciar mas workflows em fila não processarem, verifique se o arquivo dump.rdb do Redis está íntegro. Você pode testar a integridade do dump usando:
redis-check-rdb /opt/n8n/backups/20231027/redis_dump.rdb
Automação do Processo de Backup
Não dependa da memória manual. Automatize o backup usando scripts shell e cron jobs. Crie um arquivo backup_n8n.sh:
#!/bin/bash
BACKUP_DIR="/opt/n8n/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Backup do Banco de Dados
docker exec n8n-postgres-1 pg_dump -U postgres n8n | gzip > "$BACKUP_DIR/n8n_db_backup.sql.gz"
# Backup do Redis (Snapshot)
docker exec n8n-redis-1 redis-cli BGSAVE
sleep 5
cp /var/lib/redis/dump.rdb "$BACKUP_DIR/redis_dump.rdb"
# Limpeza: Manter apenas os últimos 7 dias
find /opt/n8n/backups -type d -mtime +7 -exec rm -rf {} \;
Adicione este script ao crontab para rodar diariamente:
0 2 * * * /opt/n8n/backup_n8n.sh
Conclusão
A automação com n8n traz eficiência operacional significativa, mas exige responsabilidade na gestão de dados. Ao seguir este protocolo de backup que abrange o PostgreSQL, Redis e configurações locais, você garante a continuidade do negócio e a integridade dos seus fluxos de trabalho. Lembre-se: teste a restauração periodicamente em um ambiente isolado. Um backup só é válido se sua recuperação for comprovada.
Para profissionais de DevOps, integrar esses scripts a sistemas de versionamento como Git ou ferramentas de monitoramento como Prometheus pode adicionar uma camada extra de segurança e visibilidade sobre a saúde da sua infraestrutura de automação.