目录

n8n 备份、恢复与版本更新

需要备份什么

项目位置重要性
数据库(工作流、凭据、执行记录)PostgreSQL,或 n8n_data 中的 SQLite 文件必要
加密密钥N8N_ENCRYPTION_KEY,或 n8n_data 中的 config 文件必要,丢失后凭据将无法解密
n8n_data 数据目录Docker Volume建议
compose.yaml、.env主机上的部署文件夹建议

方法一:使用 CLI 导出工作流

n8n 内置导出命令,可以将工作流导出为 JSON 文件(适合放入 Git 进行版本控制):

docker compose exec n8n n8n export:workflow --all --separate --output=/home/node/.n8n/backup/workflows/
docker compose exec n8n n8n export:credentials --all --separate --output=/home/node/.n8n/backup/credentials/
  • --separate:每个工作流一个文件
  • 导出的凭据默认仍处于加密状态,必须搭配相同的加密密钥才能使用

将文件从容器中复制出来:

docker compose cp n8n:/home/node/.n8n/backup ./n8n-backup-$(date +%F)

恢复:

docker compose exec n8n n8n import:workflow --separate --input=/home/node/.n8n/backup/workflows/
docker compose exec n8n n8n import:credentials --separate --input=/home/node/.n8n/backup/credentials/

方法二:备份数据库

PostgreSQL

docker compose exec -T postgres pg_dump -U n8n n8n | gzip > n8n-db-$(date +%F).sql.gz

恢复(在全新的数据库上):

gunzip -c n8n-db-2026-10-12.sql.gz | docker compose exec -T postgres psql -U n8n -d n8n

SQLite

SQLite 数据库位于 n8n_data Volume 中(database.sqlite)。备份前先停止 n8n,避免复制到只写入了一半的文件:

docker compose stop n8n
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/n8n-data-$(date +%F).tar.gz -C /data .
docker compose start n8n

(Volume 名称为“项目名称_n8n_data”,可以使用 docker volume ls 确认。)

自动备份

使用 cron 每天备份,并将备份文件同步到其他位置(另一台主机、云存储):

# /etc/cron.daily/n8n-backup
#!/bin/sh
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > /backup/n8n-$(date +%F).sql.gz
find /backup -name 'n8n-*.sql.gz' -mtime +30 -delete

定期测试恢复备份,确认备份确实可用。

迁移到新主机

  1. 在旧主机上备份数据库与 .env(包含 N8N_ENCRYPTION_KEY)。
  2. 在新主机上使用相同的 compose.yaml 与 .env 启动 PostgreSQL。
  3. 恢复数据库。
  4. 启动 n8n,确认工作流与凭据都正常。
  5. 更新 DNS,使其指向新主机。

更新 n8n

n8n 大约每周都会发布新版本。建议按以下流程操作:

  1. 阅读版本说明(Release notes),特别留意是否有破坏性变更(breaking changes)。

  2. 备份。

  3. 修改 compose.yaml 中的镜像版本,例如 n8nio/n8n:2.42.7 → 新版本。

  4. 更新:

    docker compose pull n8n
    docker compose up -d n8n
    docker compose logs -f n8n
  5. 确认重要的工作流运行正常。

n8n 启动时会自动执行数据库迁移,可以在日志中查看迁移进度。

版本标签

n8n 2.x 的镜像标签:

标签说明
stable当前稳定版(取代旧的 latest)
beta测试版,可能不稳定(取代旧的 next)
2.42.7 等固定版本,建议用于生产环境

从 n8n 1.x 升级到 2.x

2.0 有多项破坏性变更,升级前请阅读官方的 2.0 breaking changes 说明。重点包括:

  • Activate 开关改为 Publish / Unpublish:保存不会立即生效,需要发布。
  • 任务运行器(task runners)默认启用,Code 节点在独立的程序中运行。
  • Code 节点默认无法读取环境变量,旧工作流中使用 $env 的地方需要调整。
  • Python Code 节点改为原生 Python,需要外部任务运行器,语法与旧版不同。
  • 执行系统命令(Execute Command)与本地文件触发器默认禁用。
  • 文件读写节点默认只能访问特定文件夹。
  • 不再支持 MySQL / MariaDB 作为 n8n 数据库,需要先迁移到 PostgreSQL 或 SQLite。
  • 子工作流返回给父工作流的数据,改为子工作流最后一个节点的输出。
  • 移除了 Start 节点,请改用 Manual Trigger。

建议先在测试环境中使用备份数据试运行 2.x,确认重要的工作流都正常后,再升级生产环境。

更新于 2026年10月12日