前言:告别裸奔,给你的 n8n 穿上“防弹衣”
兄弟们,我是 N8N大学 的主编。最近在社群里发现,很多新手在宝塔面板部署完 n8n 后,直接用 IP 地址加端口访问,既不安全,看着也不专业。更惨的是,很多人因为没配好反向代理,导致 Webhook 回调死活接不到数据。
今天,笔者就手把手带大家在宝塔面板上,把 n8n 部署得稳稳当当,并且搞定 HTTPS 加密和反向代理。这不仅仅是“能用”,而是“好用且安全”。走起!
准备工作:手里有粮,心里不慌
在开始之前,请确保你手头有以下资源:
- 一台配置不拉胯的 VPS:建议 2核4G 起步,n8n 这家伙胃口不小。
- 宝塔面板(Linux Panel):最新版即可。
- 一个域名:必须解析到你的服务器 IP,比如
n8n.yourdomain.com。 - SSH 终端工具:FinalShell 或者 Xshell 都行。
核心实操:三步走,部署与代理
咱们把整个流程拆解为三个核心步骤:运行容器、创建网站、配置代理。别慌,每一步都很简单。
步骤一:Docker 运行 n8n 容器
虽然宝塔有自带的 Docker 管理器,但笔者习惯直接用 SSH 命令行操作,这样更稳,权限更好控制。
首先,必须创建一个持久化目录,防止容器重启数据丢失:
mkdir -p /www/wwwroot/n8n_data && cd /www/wwwroot/n8n_data
接下来,运行以下命令启动 n8n。注意看,这里我特意加了时区配置,这是新手最容易忽略的坑!
docker run -d --name n8n --restart=always -p 5678:5678 -v $(pwd):/home/node/.n8n -e TZ=Asia/Shanghai docker.n8n.io/n8nio/n8n
参数解释:
-p 5678:5678:将容器的 5678 端口映射到宿主机的 5678 端口。这里我们暂时只暴露给本地,不对外开放。-v $(pwd):/home/node/.n8n:把当前目录挂载到容器内部,你的工作流数据都会存在这里。-e TZ=Asia/Shanghai:强制设置时区为上海,否则你的时间调度任务全是乱的。
执行完后,输入 docker ps 看一眼,如果看到 n8n 容器正在运行,第一步就成功了。
步骤二:宝塔创建站点并申请 SSL
现在回到宝塔面板的图形界面:
- 点击左侧菜单的 网站 -> 添加站点。
- 输入你的域名(例如
n8n.yourdomain.com),数据库选 MySQL(虽然 n8n 用不上,但宝塔习惯让你选),PHP 版本选择 纯静态(非常重要,n8n 是 Node.js 应用,不需要 PHP)。 - 站点创建好后,点击该站点的 设置。
- 在左侧菜单找到 SSL,选择 Let's Encrypt,勾选你的域名,点击申请。秒级下发,免费又好用。
步骤三:配置反向代理(关键!)
这是连接域名和 n8n 容器的桥梁。很多教程这里讲得云里雾里,看笔者操作:
- 仍在站点的 设置 页面,点击左侧的 反向代理 标签。
- 点击 添加反向代理。
- 代理名称:随便填,比如
n8n_proxy。 - 目标 URL:这里填入
http://127.0.0.1:5678。注意,因为我们前面 Docker 映射的是 5678 端口,且在本机运行,所以直接填本地回环地址。 - 发送域名:保持默认的
$host即可。
保存后,宝塔会自动生成 Nginx 配置文件。但到这里还没完,n8n 对反向代理有特殊要求,我们需要手动修整一下 Nginx 配置,防止前端资源加载失败。
点击反向代理列表里的 配置文件,在 location / 块中,确保有下面这两行(宝塔生成的通常有,但我们要确认):
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
为了支持 Webhook 的 POST 请求,防止 413 错误(请求体太大),建议在配置文件里加上:
client_max_body_size 100m;
保存配置,重载 Nginx。现在,直接访问 https://n8n.yourdomain.com,你应该能看到 n8n 漂亮的登录界面了!
避坑指南:这些坑笔者替你踩过了
即使按照上面做,偶尔也会遇到问题。这里分享两个实战中最容易出现的“灵异事件”:
1. Webhook 回调超时或 502 错误
如果你的工作流卡在 Webhook 节点迟迟不动,大概率是 Nginx 默认的 60 秒超时时间不够用。n8n 的 Webhook 有时需要处理长任务。
解决办法:在宝塔的 Nginx 配置文件(不是反向代理配置,是站点配置)的 server 块中,加入以下两行:
proxy_read_timeout 300s; proxy_connect_timeout 75s;
然后重启 Nginx。
2. 找不到 Webhook 路径
很多用户配置完后,复制 Webhook URL 时直接用了 n8n 内部显示的地址。但在反向代理模式下,Webhook 的 URL 域名必须和你访问的域名保持一致!
正确做法:在 n8n 的 设置 -> 实例设置 中,找到 Webhook URL,手动将其修改为 https://n8n.yourdomain.com(不带 /webhook 路径,n8n 会自动拼接)。这样外部回调才能正确打到你的服务上。
FAQ 问答
Q1: 为什么要用反向代理,直接用 IP:5678 访问不行吗?
A: 可以,但不推荐。反向代理配合 SSL 证书能让你的数据传输加密,防止 Token 被抓包窃取。另外,公司网络通常会封禁非标准端口(如 5678),用 443 端口的 HTTPS 则能畅通无阻。
Q2: 我的 n8n 运行一段时间就自动重启了,怎么回事?
A: 大概率是内存不足。n8n 在执行复杂工作流时非常吃内存。建议查看 Docker 日志(docker logs n8n),如果看到 JavaScript heap out of memory,就需要增加 VPS 内存,或者在 Docker 启动命令中限制内存使用(虽然不推荐限制,因为会影响任务执行)。
Q3: 宝塔面板自带的商店里也有 n8n,我能直接安装吗?
A: 笔者不推荐。宝塔商店的一键包通常是基于 PHP 环境或者老旧的 Node 版本,兼容性较差。使用 Docker 镜像(docker.n8n.io/n8nio/n8n)是目前最稳定、最干净的部署方式,卸载也方便,直接删容器就行。
总结与资源
恭喜你!到这里,你已经拥有了一个生产级别的 n8n 自动化平台。反向代理和 SSL 是企业级应用的标配,也是保障你数据安全的第一道防线。N8N大学 建议你在部署后,先跑一个简单的定时任务测试连通性,再接入复杂的业务。
如果在部署过程中遇到报错,欢迎在评论区贴出日志,笔者看到会第一时间回复。下期教程,我们聊聊如何用 n8n 接入 DeepSeek 搞定本地知识库,敬请期待!