n8n 是做自动化工作流的,类似 Zapier 但可以自己部署。

最典型的用法:每天早上 9 点把某个 RSS 的内容汇总,推到企业微信。

但很多人部署完发现:设的 9 点,实际 17 点才跑。

原因:容器时区默认 UTC

n8n 官方镜像默认用 UTC,你在界面里设 9 点,它按 UTC 9 点执行,也就是北京时间 17 点。

正确部署方式

bash
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e GENERIC_TIMEZONE="Asia/Shanghai" \
  -e TZ="Asia/Shanghai" \
  -e N8N_DEFAULT_LOCALE="zh-CN" \
  --restart=always \
  n8nio/n8n

三个环境变量缺一不可:

变量 作用
TZ 容器系统时区
GENERIC_TIMEZONE n8n 内部工作流时区
N8N_DEFAULT_LOCALE 界面语言

只设 TZ 不够,n8n 有自己的时区配置,两个都要设。

反代后 Webhook 地址不对

这是第二个坑。

部署完配置了域名反代,结果 Webhook 节点的 URL 显示成 http://localhost:5678/webhook/xxx,外部访问不了。

需要在环境变量里指定外部地址:

bash
-e WEBHOOK_URL="https://n8n.yourdomain.com/"

完整命令:

bash
docker run -d \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e GENERIC_TIMEZONE="Asia/Shanghai" \
  -e TZ="Asia/Shanghai" \
  -e WEBHOOK_URL="https://n8n.yourdomain.com/" \
  --restart=always \
  n8nio/n8n

宝塔反代配置

n8n 有 WebSocket,反代要带升级头:

代码块
location / {
    proxy_pass http://127.0.0.1:5678;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 300s;
}

proxy_read_timeout 300s 也要加,不然长任务执行到一半会断。

验证时区是否生效

部署后进入 n8n,新建一个工作流,加一个「Schedule Trigger」节点,设成 5 分钟后执行。

看日志时间戳:

  • 如果显示的是北京时间 → 对了
  • 如果显示的时间比北京时间早 8 小时 → 时区没生效

内存不够会崩

n8n 默认内存限制比较保守。机器内存小于 2G 的话,跑几个工作流可能 OOM。

加个环境变量放宽:

bash
-e N8N_DEFAULT_BINARY_DATA_MODE=filesystem

把二进制数据存到磁盘而不是内存。

一个建议

第--次部署先用 IP 加端口跑通,再配域名。

时区、Webhook、反代三个问题叠在一起排查会很乱。先确认基础功能正常,再一层层加。


n8n 的环境变量清单和我踩过的几个坑,整理在 [俗人源码网],需要的自取。

俗人源码网免责声明:

1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!

2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。

3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。