n8n 是用来串接口、做自动化的工具。我原本的用法很简单:每天早 9 点把几个 RSS 汇总,推到企业微信。

装完之后发现一个怪事——设的 9 点,实际 17 点才跑。

一开始以为是 cron 写错了,查了半天才发现不是。n8n 容器默认是 UTC 时区,你在界面里选的 9:00,它按 UTC 的 9 点执行,换算成北京时间就是 17 点。

 

 

 

 

 

 

 

 

 

 

环境

  • 系统:OpenCloudOS 8 / Ubuntu 22.04 都行
  • 内存:1G 起步,跑多工作流建议 2G
  • Docker:20.10+
  • 不需要数据库,n8n 自带 SQLite

部署

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

四个环境变量说明:

变量 作用 缺了会怎样
TZ 容器系统时区 日志时间全是 UTC
GENERIC_TIMEZONE n8n 内部调度时区 定时任务错 8 小时
N8N_DEFAULT_LOCALE 界面语言 默认英文

最容易漏的是第二个。 很多人只加了 TZ,以为改完了,结果任务照错不误——因为 n8n 有自己的时区配置,和容器的 TZ 是两套。

我第一次部署就踩了这个坑。

反代后 Webhook 地址不对

用宝塔加了域名反向代理,结果 Webhook 节点显示的地址是:

代码块
http://localhost:5678/webhook/xxxx

这个地址外部根本访问不了。需要在环境变量里指定外部地址:

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

结尾的斜杠不能少。 少了会拼出 https://n8n.yourdomain.comwebhook/xxx。

宝塔反代配置

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 也要加。默认 60 秒,工作流跑久一点就会断,报 502。

验证时区是否生效

部署后进 n8n,新建工作流:

  1. 加一个 Schedule Trigger 节点
  2. 设成「3 分钟后执行」
  3. 保存并激活
  4. 等 3 分钟看日志时间戳

日志是北京时间就对了;比北京时间早 8 小时,说明 GENERIC_TIMEZONE 没生效。

内存不够会崩

n8n 默认把二进制数据放内存。机器只有 1G 的话,跑几个带文件的工作流就会 OOM。

加这个变量改成存磁盘:

bash
-e N8N_DEFAULT_BINARY_DATA_MODE=filesystem

一个建议

第一次部署先用 IP 加端口跑通,别急着配域名。 时区、Webhook、反代三个问题同时出现时很难排查。

俗人源码网免责声明:

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

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

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