AUTOMATION

EP08. "自架基础:Docker 部署要点"

首页 › 自动化工具 › n8n · EP08
约 9 分钟· #EP08#n8n
🔒 登录后可标记已读
  • EP06 讲过自架"免费"实际要花多少钱,这篇讲实际动手要准备什么、怎么部署、最容易踩的几个坑
  • n8n 官方推荐的标准自架方式是 Docker,官方文档本身就是照这条路径写的,不是这里另外发明的做法
  • 真正要顾的不只是「跑起来」——Webhook 要能稳定接收外部请求,几乎一定要一个域名 + HTTPS,这是新手最容易漏掉、上线后才发现的坑
  • 不是从零讲 Docker 是什么(网络上通用 Docker 教程很多),这篇只讲 n8n 自架这件事本身特有的设置和坑

重点内容


开始前要准备什么

  • 一台 VPS:1-2 vCPU、1-2GB RAM 起步就能跑起来,个人/小团队用量的话,$5-10/月等级的 VPS(DigitalOcean、Hetzner、Contabo 这类)通常够用,实际花费看 EP06
  • Docker(和 Docker Compose):装在 VPS 上,n8n 官方镜像跑在 Docker 容器里,不需要另外装 Node.js 环境
  • 一个域名(强烈建议,不是必须):Webhook Trigger 需要外部服务能打到你的 n8n 实例,用 VPS 的裸 IP 也能接,但换 IP、配 HTTPS 证书都麻烦,绑一个域名(子域名也行,比如 n8n.yourdomain.com)配合反向代理长期用更稳定

最基本的启动方式

官方镜像可以直接用 docker run 起一个测试用的实例,数据(工作流、凭据、加密密钥)会存在挂载的 volume 里:

docker volume create n8n_data

docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

📌 -v n8n_data:/home/node/.n8n 这行不能省——n8n 默认用 SQLite 把工作流数据存在这个用户目录里,连加密密钥也在这(下面会讲为什么这个密钥很重要),容器重建但没挂载这个 volume,数据会直接消失。

这个命令跑完,浏览器打 http://VPS的IP:5678 就能看到 n8n 的编辑器界面。但这只是「跑起来了」,离能正式上线用还差几步。


几个 n8n 自架专属、容易漏掉的设置

1. WEBHOOK_URL 一定要设成你的公开域名

n8n 默认不知道自己对外的网址是什么,Webhook Trigger 生成的 URL 如果没设这个环境变量,可能会指向 localhost 或内网地址,外部服务(Shopify、Stripe 这类)打不进来。部署时要设:

WEBHOOK_URL=https://n8n.yourdomain.com/

2. N8N_ENCRYPTION_KEY 要固定住,不能每次重启都换

n8n 用这把密钥加密所有存起来的 Credentials(API Key、OAuth Token 这些)。如果不手动设置,n8n 会自动生成一把随机密钥——但这把密钥要是弄丢或者每次重启都变,之前存的所有 Credentials 会全部解不开、直接失效,得重新一个个填一次。

正确做法:自己生成一串固定的密钥(比如用 openssl rand -hex 32),设进环境变量,并且把这串密钥单独备份好(跟 VPS 数据备份分开存一份):

N8N_ENCRYPTION_KEY=你自己生成的固定字符串

3. 数据库:小量用 SQLite 没问题,正式生产环境建议换 Postgres

默认的 SQLite 对个人/小团队测试够用,但资料量变大或需要多个 n8n 实例(worker 模式)共用数据时,官方建议换成 Postgres,用环境变量指定数据库连接信息即可,不用改工作流本身。


反向代理 + HTTPS:不是可选项

n8n 编辑器和 Webhook 都不该直接裸奔在 http:// 上,标准做法是在 VPS 上加一层反向代理(Nginx、Caddy 或 Traefik 都行):

  1. 反向代理监听公开的 80/443 端口,n8n 容器本身只在内网监听 5678,不直接对外开放
  2. 反向代理配 Let's Encrypt 免费证书,处理 HTTPS,把请求转发给内部的 n8n 容器
  3. 域名解析指到 VPS 的 IP,反向代理按域名分流(如果同一台 VPS 还跑别的服务)

Caddy 因为能自动申请和续期 Let's Encrypt 证书,配置最省事,适合不想手动管证书的新手;Nginx/Traefik 更灵活但配置步骤更多。


基本安全设置

  • 不要把 5678 端口直接暴露给公网——只开放反向代理用的 80/443,5678 只留给反向代理内网访问,外部直接打 5678 应该打不通
  • 开启 Basic Auth 或 n8n 自带的用户登录,避免编辑器网址被搜到/猜到的人直接进去看你的工作流和数据
  • 防火墙只开必要端口:80、443(对外),SSH 建议限制成只有自己的 IP 能连,或改用密钥登录、关掉密码登录
  • 定期备份:数据库(或 SQLite 文件)+ N8N_ENCRYPTION_KEY 两样都要备份,缺一样都无法完整还原

常见问题

  • ❌ 部署完发现 Webhook 收不到外部服务的请求——十次有八次是没设 WEBHOOK_URL,或者域名解析/反向代理没配对,检查这两样先
  • ❌ 换了台服务器或重建容器后,一堆 Credentials 突然全部要重新登录——N8N_ENCRYPTION_KEY 没有固定下来,用了自动生成的随机密钥,重建容器密钥跟着变,旧数据解不开;这条一定要在第一次部署时就设好并备份
  • ❌ 直接把 5678 端口暴露在公网上,没配反向代理和 HTTPS——编辑器和 Webhook 流量都是明文/容易被扫到,正式使用前一定要补上反向代理这一层
  • 💡 不想自己处理反向代理、证书、更新这些细节,可以考虑 Sliplane 这类"托管式自架"服务(一个月几欧元起),帮你顾好底层部署,但工作流数据还是跑在你自己的实例上,不是官方 n8n Cloud,费用和取舍见 EP06
  • 📌 这篇只讲最基本的单机部署,n8n 多实例/Queue 模式(用 Redis + 多个 worker 处理大量并发执行)是更进阶的话题,官方文档的 Scaling 章节有专门说明,这里不展开

Sources

官方文档:

  1. n8nio/n8n — Docker Image (Docker Hub)

Blog / Website:

  1. Best Practices for Self-Hosting n8n in 2026 — Sliplane
  2. How to Secure Your Self-Hosted n8n Instance: A Production Hardening Checklist — MassiveGRID