这个教程解决什么问题

读完这篇你能做到:用 Docker 在自己的机器上部署一个持久化的 n8n,完成初始化设置,搭出第一个”定时触发 → 调用 API → 结果入库”的工作流,并且知道升级时怎么不丢数据。

为什么自托管:云版按执行次数收费且数据在别人手里;自托管免费、数据在自己服务器,代价是自己管升级和备份——对个人和小团队,前者通常更划算。本教程默认你有 Docker 环境;没有的话先装 Docker Desktop,十分钟的事。

它能自动化什么

先给三个具体感强的例子:每天 9 点抓取热榜生成选题摘要发到邮箱;监控 GitHub 仓库新 issue 自动打标分类;表单提交后 AI 审核再写入数据库。共同结构都是”触发 → 处理 → 落地”——这就是工作流工具的思维范式。找不到灵感的话,n8n 官方模板库有上千个现成工作流,装完就能导入改。

环境与版本

# 待补你的实际环境
服务器:【待补:配置】
n8n:【待补:镜像 tag】
Docker:【待补:版本】

第一步:Docker 启动(带数据持久化)

官方镜像一条命令拉起,关键是挂载 volume,否则容器一重建所有工作流全丢:

docker volume create n8n_data
docker run -d --name n8n \
  -p 5678:5678 \
  -e GENERIC_TIMEZONE=Asia/Shanghai \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

浏览器打开 http://服务器IP:5678,看到初始化界面即成功。国内拉镜像慢就配镜像加速或走代理。启动后用 docker ps 确认容器状态是 Up,有问题先 docker logs n8n 看日志再排查。

打算长期跑的,用 compose 管理更省心:

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    ports:
      - "5678:5678"
    environment:
      - GENERIC_TIMEZONE=Asia/Shanghai
      - WEBHOOK_URL=https://你的域名/
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped
volumes:
  n8n_data:

两种方式二选一。注意 compose 里镜像 tag 固定到具体版本号而不是 latest,升级才有后悔药。常用命令:docker compose up -d 启动、docker compose logs -f n8n 看日志、docker compose down 停止(不删 volume,数据无恙)。

第二步:初始化账号

首次访问会让你创建 owner 账号,邮箱密码自己设——这是本地实例的管理员,和 n8n 云服务无关。

第三步:搭第一个工作流

用最经典的组合跑通概念:

  1. Schedule Trigger:定时触发,设为每小时;
  2. HTTP Request 节点:GET 一个公开 API(比如天气接口);
  3. Edit Fields:只保留需要的字段;
  4. Execute Workflow 手动跑一次,看每个节点的输入输出。

n8n 的学习重点是”看数据流”:每个节点右上角都能展开上一节点传来的 JSON,报错时先看这里的结构对不对。四个节点各练一个概念:Trigger 管节奏、HTTP Request 管取数、Edit Fields 管裁剪,再加一个 IF 节点管分支——掌握这四类,80% 的自动化都能拼出来。

验证完记得两步收尾:右上角 Save 保存,再打开 Active 开关——手动 Execute 只验证逻辑,开了 Active 它才会按计划自动跑,新手最容易漏的就是这一步。

还有一个概念提前打预防针:节点里的账号密码存在 Credentials(凭据)里,导出的工作流 JSON 不包含凭据。所以”导入了别人的工作流怎么还要重配”不是 bug,是设计——凭据永远不进文件。

需要什么配置

规模建议
个人试水1 核 2G 的轻量云或本机 Docker
日常跑任务2 核 4G,稳定够用
重度多工作流4G 内存起步 + 数据库外置

n8n 本身不重,重的是节点里跑的数据量;处理大文件、大批量行时内存占用才明显上升。

常见坑与解法

坑 1:容器重启后工作流消失

没挂 volume。按第一步的写法挂 n8n_data,已丢的数据找不回来。验证是否挂载成功:docker volume inspect n8n_data 能看到挂载点即正常。

坑 2:定时任务触发时间不对

容器默认时区是 UTC。启动时加 GENERIC_TIMEZONE=Asia/Shanghai(本文命令已含),改过的要重建容器生效。验证方式:跑一个每分钟触发的工作流,观察执行记录里的时间。

坑 3:Webhook 收不到外部请求

本地部署的 n8n 对外暴露的是内网地址,外部回调的 URL 要与公网访问地址一致:配置 WEBHOOK_URL 为公网域名,并配反向代理 + HTTPS。【待补:你的反代配置片段】判断方法:test URL 能本机触发、production URL 收不到,就是这个问题。

坑 4:升级后工作流报错

大版本升级偶尔带破坏性变更,把镜像 tag 回退到上一个版本即可——这也是第一步就建议固定 tag 的原因。

坑 5:镜像拉取超时

Docker Hub 直连不稳时,给 Docker 配置镜像加速器(daemon.json 里加 registry-mirrors),或走代理拉取。

升级与备份

docker pull docker.n8n.io/n8nio/n8n:latest
docker stop n8n && docker rm n8n
# 用原命令重建容器,volume 里的数据自动保留

升级前导出一份工作流 JSON(工作流页面 → Download)双保险;导出的 JSON 可以放进 Git 仓库,这就是最省心的”版本管理”。

最终效果与验证

工作流连续三天按时触发、无红色失败节点;重启容器后工作流和数据完好。把 Executions 页打开看每次执行的耗时列表——这个页面以后就是你排查自动化的主战场。至此,部署、验证、上线、排错四件事全部闭环,接下来就是往里面搬你自己的重复劳动了。

n8n 第一个工作流运行成功

【待补:工作流画布截图与时区设置截图】

相关阅读