目录
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
定期测试恢复备份,确认备份确实可用。
迁移到新主机
- 在旧主机上备份数据库与
.env(包含N8N_ENCRYPTION_KEY)。 - 在新主机上使用相同的 compose.yaml 与
.env启动 PostgreSQL。 - 恢复数据库。
- 启动 n8n,确认工作流与凭据都正常。
- 更新 DNS,使其指向新主机。
更新 n8n
n8n 大约每周都会发布新版本。建议按以下流程操作:
-
阅读版本说明(Release notes),特别留意是否有破坏性变更(breaking changes)。
-
备份。
-
修改 compose.yaml 中的镜像版本,例如
n8nio/n8n:2.42.7→ 新版本。 -
更新:
docker compose pull n8n docker compose up -d n8n docker compose logs -f n8n -
确认重要的工作流运行正常。
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日