超详细的中文简体教程,帮助你在本地通过 Docker + n8n + Ngrok + Traefik 快速、安全、免费的搭建和公开访问你的 n8n 实例。这份教程是从 0 基础出发的,适合没有部署经验的新手朋友。


🎯 最终目标

实现在本地电脑上部署 n8n,并且可以通过公网地址访问(用于 Webhook 测试或远程控制),无需购买服务器和域名。


🧩 使用的技术组件一览

工具 作用 说明
Docker 容器运行环境 安装后可快速启动 n8n
Docker Compose 编排多个容器 同时启动 n8n + Ngrok
n8n 自动化流程平台 我们的主角,用于连接各种服务
Ngrok 临时公网访问隧道 localhost 映射为公网地址
Traefik(可选) 反向代理、证书管理 稳定运行 HTTPS 和多服务控制(正式部署用)

🧱 环境准备(一次性配置)

1. 安装 Docker 和 Docker Compose

Windows 或 macOS:

下载地址:https://www.docker.com/products/docker-desktop/

安装完之后:

  • 打开 Docker Desktop

  • 启动成功后可以在终端执行:

bash
docker -v
docker compose version

确保都能正常输出版本号。

Linux(Ubuntu):

bash
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl start docker
sudo systemctl enable docker

📦 创建 n8n + Ngrok 的 Docker Compose 配置

步骤:

  1. 在任意文件夹下创建一个目录,例如:

bash
mkdir n8n-local-ngrok
cd n8n-local-ngrok
  1. 创建 .env 文件(用于配置变量):

env
# .env 文件
N8N_PORT=5678
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123
  1. 创建 docker-compose.yml 文件:

yaml
version: "3.7"
services:
n8n:
image: n8nio/n8n
ports:
- "\({N8N_PORT}:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=\){N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=\({N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=localhost
- WEBHOOK_TUNNEL_URL=http://localhost:4040
volumes:
- ./n8n_data:/home/node/.n8n
restart: always

ngrok:
image: wernight/ngrok
command: http n8n:5678
ports:
- "4040:4040" # 本地控制台页面
environment:
- NGROK_PORT=n8n:5678
restart: always

  1. 启动服务:

bash
docker compose up -d

🚀 启动成功后

查看状态:

bash
docker compose ps

打开 n8n 本地地址:

浏览器访问:

arduino
http://localhost:5678

用户名和密码是你 .env 里设置的。


获取公网访问地址(Ngrok)

打开浏览器,访问:

arduino
http://localhost:4040

你会看到如下界面:

nginx
Forwarding https://abcd1234.ngrok.io -> http://n8n:5678

现在你可以使用这个 https://abcd1234.ngrok.io 地址,在 全球任意地点 访问你的本地 n8n,包括:

  • 测试 Webhook

  • 外部 API 回调

  • 手机访问你的自动化流程


🛡️ 安全建议

  1. 一定启用 Basic Auth(已在上面配置中设置)

  2. Ngrok 的免费地址是随机的,每次重启会变,所以不能用于长期部署

  3. 若要长期稳定部署,请使用 Traefik + 自定义域名(可继续写详细教程)


🧼 停止和清理

停止服务:

bash
docker compose down

清理数据(可选):

bash
rm -rf ./n8n_data

✅ 总结

你获得了什么 说明
本地 n8n 服务 不依赖公网 IP
公开访问入口 Ngrok 自动生成的公网地址
安全性控制 登录认证已开启
一键部署能力 使用 Docker Compose 快速启动

🚀【进阶版】使用 Traefik + HTTPS + 自定义域名 部署本地 n8n

🎯 目标

让你在本地或 VPS 上运行 n8n,同时:

  • ✅ 使用 自定义域名(如 n8n.yourdomain.com)访问

  • ✅ 自动签发 HTTPS 证书(通过 Let’s Encrypt)

  • ✅ 拥有 多服务路由能力,为将来拓展多个服务打好基础

  • ✅ 安全、稳定、无需每次手动配置


🧰 准备工作

1. 你需要有:

  • 一个自己的域名(例如:yourdomain.com)✅

  • 能修改域名 DNS 的权限(比如阿里云、Cloudflare、腾讯云)✅

  • 一台公网服务器(例如阿里云/腾讯云/搬瓦工)或支持公网 IP 的本地环境✅

  • 安装好 Docker + Docker Compose ✅

如果你没有服务器,也可以在本地部署,但必须要将域名解析到你当前电脑的公网 IP(比如通过花生壳、Cloudflare Tunnel 等)


🧱 目录结构设计

你可以用如下目录结构(适合长期维护):

bash
n8n-traefik/
├── docker-compose.yml
├── .env
├── traefik/
│ └── traefik.yml
│ └── acme.json
└── n8n_data/ # 持久化 n8n 数据

📄 .env 文件(保存环境变量)

env
DOMAIN=n8n.yourdomain.com
[email protected]
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123

📄 traefik/traefik.yml 文件(Traefik 主配置)

yaml
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
docker:
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: "\){EMAIL}"
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web

📄 traefik/acme.json 文件(用于保存 HTTPS 证书)

bash
touch traefik/acme.json
chmod 600 traefik/acme.json

📄 docker-compose.yml 文件

yaml
version: "3.7"
services:
traefik:
image: traefik:v2.10
command:
- "--configFile=/traefik.yml"
ports:
- "80:80"
- "443:443"
volumes:
- "./traefik/traefik.yml:/traefik.yml:ro"
- "./traefik/acme.json:/letsencrypt/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
restart: always

n8n:
image: n8nio/n8n
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=\({N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=\){N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=\({DOMAIN}
- N8N_PORT=5678
- WEBHOOK_URL=https://\){DOMAIN}/
volumes:
- ./n8n_data:/home/node/.n8n
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
restart: always


🛰️ 第一步:配置你的 DNS

登录你购买域名的平台,把以下记录加进去:

css
类型:A
主机记录:n8n
值:你的服务器公网 IP

等待 DNS 生效(通常 1-5 分钟)


🚀 第二步:启动所有服务

在项目目录下执行:

bash
docker compose up -d

✅ 第三步:访问 n8n(带 HTTPS!)

浏览器访问:

arduino
https://n8n.yourdomain.com

输入用户名密码(就是 .env 中设置的),你就能使用安全加密的 n8n 啦!


🔐 功能加分项(可选配置)

  • 防火墙:只开放 80、443 端口

  • 数据备份:定期打包 n8n_data/ 目录

  • 加密 API 密钥管理:可以结合 Vault 或环境变量方式


🔁 重启 & 更新

升级 n8n 镜像版本:

bash
docker compose pull
docker compose up -d

📌 小结对比

部署方式 公网访问 安全性 自动证书 适用场景
Ngrok 临时版 ❌ 限制访问域名 测试、学习
Traefik + 域名 ✅ Basic Auth + HTTPS 正式部署、上线系统

📮 想法加值:还可以接什么服务?

  • 接入 Telegram、微信机器人、GitHub 等,做自动通知

  • 搭配 Notion、Google Sheets、Email 做自动报表

  • 自动从电商后台抓数据、发邮件

  • 做个人 AI 助理流程


如果你想,我还可以为你定制:

  • ✅ 一键脚本部署版

  • ✅ 本地 + Cloudflare Tunnel 方案(无需公网 IP)

  • ✅ 与 WordPress / 电商系统整合流程

  • ✅ 带前端界面的 n8n SaaS 封装方案