n8n 2.43.7 运维手册:备份、升级、日志与监控
Ubuntu 22.04 上 n8n 2.43.7 生产运维:systemd 托管模板、逻辑/物理备份与恢复演练、升级回滚与迁移日志、JSON 行日志与审计事件、Prometheus 监控、安全基线与故障排查速查,实测回显齐全。
n8n 2.43.7 运维手册:备份、升级、日志与监控
> 目标:面向 Ubuntu 22.04 服务器上的 n8n 2.43.7 自托管实例,给出系统服务托管、备份恢复、升级回滚、日志监控与故障排查的完整操作手册。备份类命令与日志/指标输出均为实测回显;系统服务单元为标准 systemd 模板(语法经 systemd-analyze verify 校验)。
一、生产拓扑与账户规划
用户/客户端 → Nginx/Caddy(TLS) → 127.0.0.1:5678 (n8n systemd 服务) → ~/.n8n/ (SQLite)
→ 可选 PostgreSQL
- 独立系统账户运行(
useradd -r -m -d /var/lib/n8n n8n),数据根目录用N8N_USER_FOLDER=/var/lib/n8n/.n8n显式指定(实测该变量决定 CLI 与服务的共同数据目录); - 运行要求 Node.js >= 24(npm engines 实测);安装:
sudo npm install -g n8n,升级后可执行文件位于/usr/bin/n8n; - 换 PostgreSQL 见《n8n 2.43.7 配置参数详解(环境变量实测)》第五节(实测建表 157 张)。
二、systemd 托管
/etc/systemd/system/n8n.service:
[Unit]
Description=n8n workflow automation
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=n8n
Group=n8n
EnvironmentFile=/etc/n8n/n8n.env
ExecStart=/usr/bin/n8n start
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
/etc/n8n/n8n.env(权限 600,属主 n8n)集中放环境变量:
N8N_USER_FOLDER=/var/lib/n8n/.n8n
N8N_PORT=5678
GENERIC_TIMEZONE=Asia/Shanghai
N8N_SECURE_COOKIE=true
N8N_RUNNERS_ENABLED=true
# N8N_METRICS=true
sudo systemctl daemon-reload && sudo systemctl enable --now n8n
systemd-analyze verify /etc/systemd/system/n8n.service # 语法校验,无输出即通过
curl -s http://127.0.0.1:5678/healthz # → {"status":"ok"}
三、备份与恢复
3.1 必备清单(缺一不可)
| 对象 | 位置 | 说明 |
|---|---|---|
| 加密密钥 | ~/.n8n/config | 丢了所有凭证作废,单独加密保存 |
| 主库 | ~/.n8n/database.sqlite(含 -wal/-shm) | 工作流、执行、用户全在里面 |
| 内置事件日志 | ~/.n8n/n8nEventLog*.log | 审计流水,自动轮转(实测存在 -1/-2 后缀文件) |
| 逻辑导出 | CLI 导出 JSON | 跨版本、跨库恢复的首选 |
3.2 逻辑备份(✅ 实测)
$ n8n export:workflow --backup --output=/var/backups/n8n/wf/
Successfully exported 2 workflows. # 每个工作流一个 <id>.json
$ n8n export:credentials --backup --output=/var/backups/n8n/cred/ # AES 密文,安全可归档
# ⚠️ 除非迁移加密密钥,绝不使用 --decrypted(帮助原文:ALL SENSITIVE INFORMATION WILL BE VISIBLE)
$ n8n export:entities --outputDir=/var/backups/n8n/entities/ # 全库实体级备份
3.3 物理备份与瘦身
SQLite 带 WAL,直接 cp 主文件可能丢最后几笔提交。安全做法:
sqlite3 ~/.n8n/database.sqlite ".backup '/var/backups/n8n/db-$(date +%F).sqlite'"
维护窗口可顺手瘦身(实测 VACUUM:2,396,160 → 2,351,104 字节):
sqlite3 ~/.n8n/database.sqlite 'VACUUM;'
3.4 恢复演练
systemctl stop n8n
n8n import:workflow --separate --input=/var/backups/n8n/wf/
n8n import:credentials --input=/var/backups/n8n/cred/xxx.json
# 全库级恢复:import:entities --inputDir=... (--truncateTables 先清目标表)
systemctl start n8n
💡 密钥与数据必须成对恢复:
config里的encryptionKey和导出时的实例一致,凭证才能解开。
四、升级与回滚
# 1) 升级前全量备份(3.2 + 3.3)
# 2) 升级
sudo npm install -g n8n@latest # 2.43.7 为当时 latest(dist-tags 实测)
# 3) 重启,观察迁移日志
journalctl -u n8n -f
# Starting migration AddErrorColumnsToTestRuns1737715421462
# Finished migration AddErrorColumnsToTestRuns1737715421462 ...
要点(实测行为):
- 升级首次启动自动跑增量迁移,迁移期间不要 kill 进程;
- 迁移失败可用
n8n db:revert回退最后一次迁移(危险操作,先备份); - 回滚版本 =
sudo npm install -g n8n@<旧版本号>,但注意新迁移可能不可逆,升级前备份是唯一可靠回滚手段; - CLI 改动激活状态后提示
Please restart n8n for changes to take effect,服务化环境记得重启生效。
五、日志
| 层 | 位置/开启方式 | 格式 |
|---|---|---|
| 服务日志 | journalctl -u n8n | console 格式:2026-10-17T12:59:42.296Z | debug | 消息 {元数据} |
| 应用日志 | N8N_LOG_OUTPUT=file + N8N_LOG_FILE_LOCATION=<完整文件路径> | JSON 行:{"level","message","metadata":{...}}(实测样例) |
| 审计事件 | ~/.n8n/n8nEventLog*.log | 事件流(实例加入、登录、工作流变更等),自动按大小轮转 |
实测 JSON 行样例:
{"level":"info","message":"Initializing n8n process","metadata":{"file":"start.js","function":"init","timestamp":"2026-10-17T13:01:10.369Z"}}
排障时临时 N8N_LOG_LEVEL=debug,能看到节点加载明细(n8n-nodes-base {"nodes":500,...})。注意 N8N_LOG_FILE_LOCATION 必须是文件路径,传目录会生成同名文件并报 Not a directory(实测坑)。
六、监控
curl -s http://127.0.0.1:5678/healthz # {"status":"ok"},适合拨测
Prometheus 指标:环境变量 N8N_METRICS=true 后 GET /metrics 实测输出:
# HELP n8n_expression_evaluation_duration_seconds Duration of VM-based expression evaluation in seconds.
# TYPE n8n_expression_evaluation_duration_seconds histogram
Prometheus 抓取片段:
scrape_configs:
- job_name: n8n
static_configs:
- targets: ['n8n.internal:5678']
建议告警项:healthz 连续失败、执行积压(/metrics 队列指标)、磁盘水位(执行数据是膨胀主因)。周期体检加一条 cron:每周 n8n audit(实测输出五类风险报告 JSON)+ 备份脚本。
七、安全基线
- 保持
N8N_SECURE_COOKIE=true,TLS 交给反代(Cookie 实测默认HttpOnly; Secure; SameSite=Lax); - API Key 定期轮换:编辑器 Settings → n8n API 删除重建(Key 为 JWT,可审计签发时间);
n8n user-management:reset无确认直接清空用户库(实测),放到只有运维能执行的路径与权限下;- 工作流内敏感操作优先用 Credential,不要把密钥写进节点参数(执行历史会存明文)。
八、故障排查速查
| 症状 | 原因/定位 | 处置 |
|---|---|---|
CLI 执行报 n8n Task Broker's port 5679 is already in use. | 常驻服务已占 Broker 端口(实测原文) | 维护窗口停服务跑批量任务,或为该次执行错开 Broker 端口 |
日志报 Failed to start Python task runner ... Python 3 is missing | 系统无 Python3(实测原文) | 安装 python3 或忽略(JS 节点不受影响) |
| Webhook 调用 404 带 hint | 工作流未激活/路径不符(实测原文见 API 篇) | 激活工作流,生产地址为 /webhook/<path> |
| 反代后登录态丢失 | Secure Cookie 仅 HTTPS 回传(实测对比) | 反代上 TLS;内网临时 HTTP 才设 N8N_SECURE_COOKIE=false |
| 服务起不来、日志卡在迁移 | 迁移中被打断 | n8n db:revert 后重启;仍失败用备份恢复 |
| 凭证全部报解密失败 | config 密钥与数据不配对 | 找回原 config;无备份则凭证需重建 |
九、维护节奏建议
| 周期 | 动作 |
|---|---|
| 每日 | healthz 拨测 + 逻辑备份(export:workflow --backup) |
| 每周 | n8n audit + 凭证/全库导出轮换 + 日志体积检查 |
| 每月 | VACUUM 瘦身、执行数据保留策略复核、恢复演练一次 |
| 升级窗口 | 备份 → npm i -g n8n@latest → 迁移日志确认 → 冒烟(healthz + 一次手动执行) |
系列文章:《n8n 2.43.7 介绍与选型指南》《Ubuntu 22.04 上用 Docker Compose 部署 n8n 2.43.7》《n8n 2.43.7 配置参数详解(环境变量实测)》《n8n 2.43.7 CLI 命令详解与实测》《n8n 2.43.7 Public API 使用指南(实测)》。