还在为 n8n 的配置头疼?环境变量才是进阶的钥匙
朋友,你是不是也遇到了这些情况:定时任务的时间总是差 8 小时?n8n 裸奔在公网感觉不安全?或者想用 Gmail 发邮件却怎么都连不上?
其实,这些问题的根源往往不在 n8n 本身,而在于你忽略了它的“基因”配置——.env 文件。很多新手只懂在 UI 里点点点,却不知道掌握 .env 才是通往 n8n 高手的必经之路。今天,笔者就带你彻底搞懂 n8n 的环境变量配置,一次解决时区、安全和邮件三大痛点。
一、什么是 .env 文件?为什么它是 n8n 的命门?
简单来说,.env 就是 n8n 启动时的“说明书”。在 Docker 部署中,它负责把配置参数注入到容器内部。如果你不懂 .env,就相当于买了一辆法拉利却只敢挂 1 档开。
它的重要性体现在三个方面:
- 持久化配置:避免每次重启容器都要重新输入参数。
- 安全性:把密码、密钥藏在环境变量里,而不是硬编码在流程中。
- 功能开启:很多高级功能(如队列模式、邮件发送)必须通过环境变量开启。
二、解决“时差”痛点:让定时任务精准执行
很多国内用户抱怨,明明设置的是早上 8 点执行,结果 n8n 跑在 UTC 时间,凌晨 0 点就触发了。这是因为 n8n 默认使用的是 UTC 时区。
解决方法非常简单,只需要在你的 docker-compose.yml 或者 .env 文件中增加一行配置:
GENERIC_TIMEZONE=Asia/Shanghai
或者结合 Node.js 时区设置:
TZ=Asia/Shanghai
笔者提示: 这里的 Asia/Shanghai 是关键,设置后,无论是 Schedule Trigger 节点还是日志时间,都会变成你熟悉的北京时间。改完记得重启容器生效。
三、安全加固:别让你的 n8n 在公网“裸奔”
n8n 默认虽然是需要登录的,但在公网环境下,只靠一个简单的密码是不够的。特别是当你开启了 Webhook 暴露在公网时,安全配置至关重要。
1. 强制 HTTPS (N8N_PROTOCOL)
如果你配置了域名和 SSL 证书,务必设置:
N8N_PROTOCOL=https
这能确保所有流量加密传输,防止中间人攻击。
2. 限制 Host (N8N_HOST)
为了防止 DNS 重绑定攻击,你应该明确指定 n8n 暴露的主机名:
N8N_HOST=yourdomain.com
3. 隐藏敏感数据 (EXECUTIONS_DATA_PRUNE)
n8n 会记录每一次执行的数据,时间久了会泄露敏感信息。建议开启自动清理:
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168 (保留 168 小时,即 7 天)
四、搞定邮件服务:SMTP 配置详解
在 n8n 中使用 Email Send 节点发送报警或通知时,最让人抓狂的就是报错 Invalid login 或 Connection timed out。这通常是因为你没有在环境变量中预设好 SMTP 的全局配置。
与其在每个节点里重复填写 SMTP 信息,不如直接在 .env 中定义好,一劳永逸。以 Gmail 为例(注意:现在 Gmail 需要应用专用密码):
N8N_EMAIL_MODE=smtp
SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_USER=你的邮箱@gmail.com
SMTP_PASS=你的应用专用密码
SMTP_SECURE=true
避坑指南: 如果是国内的 QQ 邮箱或 163 邮箱,端口通常是 465 或 587,且 SMTP_SECURE 必须设为 true。如果配置了这些环境变量,你在使用 Email Send 节点时,甚至不需要手动输入认证信息,直接就能发送。
五、进阶玩家的选择:队列模式与并发
当你的工作流越来越多,或者需要处理高并发 Webhook 时,SQLite 数据库就不够用了。这时我们需要引入 Redis 来开启队列模式。
在 .env 中添加以下配置,n8n 的架构就会发生质变:
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
这能让你的 n8n 支持水平扩展,处理海量任务不卡顿。当然,这通常需要配合 Docker Compose 搭建 Redis 服务。
六、常见问题 FAQ
Q1: 修改了 .env 文件,为什么 n8n 没变化?
A: 环境变量只在容器启动时读取。修改后,必须重启 Docker 容器才能生效。命令是 docker-compose restart。
Q2: 我在哪里编辑 .env 文件?
A: 如果你是用 Docker Compose 部署的,通常在 docker-compose.yml 同级目录下。如果没有这个文件,你可能是在用命令行参数启动,建议改为使用 .env 文件管理,更清晰。
Q3: 设置了 SMTP 环境变量,但在 Email Send 节点里还能填账号密码吗?
A: 可以。节点内的设置会覆盖全局环境变量。但通常建议留空,使用全局配置,这样更安全且易于管理。
总结与资源
掌握了 .env 环境变量,你就掌握了 n8n 的底层控制权。它不仅能帮你解决时区混乱、邮件发送失败的琐碎问题,更是保障系统安全、迈向高可用架构的基石。
配置环境变量就像给汽车做保养,虽然看不见直接效果,但能决定你能跑多远、跑多稳。希望这篇硬核指南能帮你避坑。如果你还有其他关于 n8n 配置的疑问,欢迎在 N8N大学 交流,我们一起精进。