发现全球最佳 AI 工具

从零教你部署与精通,掌握实战变现工作流

n8n 自托管部署教程封面图,展示 Docker Compose、Webhook、HTTPS 和自动化流程节点

n8n 自托管部署教程:从安装到搭建第一个自动化流程

本文是一篇面向新手和网站运营者的 n8n 自托管部署教程,完整讲解 Docker 与 Docker Compose 安装、服务器环境准备、域名 HTTPS、环境变量、数据持久化、PostgreSQL、Webhook 地址配置,以及从 0 搭建第一个自动化流程的实战步骤。

n8n 自托管部署教程:从安装到搭建第一个自动化流程

Docker / Docker Compose / 域名 HTTPS / 环境变量 / Webhook 实战 / 常见报错排查

适合发布:AI 自动化教程、n8n 部署教程、工作流自动化实战|版本:2026-05 网站发布版

导读:n8n 是一款适合搭建自动化流程的工作流平台。对于网站运营、内容生产、客户线索收集、AI 工具串联、数据同步等场景,自托管 n8n 的价值在于:数据掌握在自己服务器上、可以连接更多内部系统、也更方便与本地脚本或私有 API 配合。

这篇教程采用“先能跑起来,再逐步上线”的路线:先用 Docker 快速启动,再讲 Docker Compose 生产部署,最后搭建一个不依赖第三方账号的 Webhook 自动化流程。

重要提醒:自托管不是把命令复制完就结束。生产环境必须关注 HTTPS、域名、数据库、加密密钥、备份、访问控制和更新回滚。新手可以先本地测试,确认理解后再部署到公网服务器。

准备工作:先确认你适合哪种部署方式

n8n 官方文档建议多数自托管场景优先使用 Docker,因为容器可以减少系统环境差异,也方便管理数据库、卷和环境变量。对于新手,建议按下面三种路线选择。

部署路线适合人群优点注意事项
本地 Docker 测试想先体验 n8n 的用户启动快、方便试错、不需要域名不要把临时容器当正式环境;必须配置数据卷
VPS + Docker Compose个人站长、自动化工作流使用者可长期运行,方便反代 HTTPS、备份和更新需要会使用 Linux、域名解析、防火墙和日志排查
云平台 / Kubernetes / 队列模式企业团队、高并发流程可扩展性更强,适合多 worker配置复杂,必须固定加密密钥并规划数据库

本文主线采用“VPS + Docker Compose”。如果你只是想快速体验,可以先阅读“本地快速启动”部分;如果要上线给真实业务使用,建议直接看“线上生产部署”。

服务器与域名环境建议

最低配置并没有一个绝对数字,取决于流程复杂度、执行频率、是否跑 AI 节点、是否保存大量执行数据。对于个人或小团队,建议从 2 核 CPU、2GB-4GB 内存、20GB 以上磁盘开始,后续按执行量扩容。

  • 操作系统:Ubuntu 22.04/24.04 LTS、Debian 12,或其他能稳定运行 Docker 的 Linux 发行版。
  • 端口:公网部署通常只暴露 80 和 443;5678 建议由反向代理转发,不直接裸露到公网。
  • 域名:建议使用 n8n.example.com 这样的二级域名,并在 DNS 中添加 A 记录指向服务器 IP。
  • 备份:正式使用前就要规划数据库备份、.n8n 配置目录备份、加密密钥备份。
  • 安全:管理员强密码、必要时开启 2FA;不要把 API Key、Token、数据库密码写在文章截图或公开仓库里。

图 1:n8n 自托管部署架构示意图

方式一:本地快速启动 n8n

本地启动适合学习界面、测试节点、导入模板和熟悉工作流逻辑。以下命令会创建一个 Docker 卷保存 n8n 数据,再启动 n8n 容器。

  docker volume create n8n_data   docker run -it –rm \   –name n8n \   -p 5678:5678 \   -e GENERIC_TIMEZONE=”Asia/Shanghai” \   -e TZ=”Asia/Shanghai” \   -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \   -e N8N_RUNNERS_ENABLED=true \   -v n8n_data:/home/node/.n8n \   docker.n8n.io/n8nio/n8n
  1. 浏览器打开 http://localhost:5678。
  2. 首次进入时创建 Owner 账号,填写邮箱、姓名和密码。
  3. 进入工作台后,可以先创建一个空白工作流,熟悉节点搜索、执行、保存和发布。
避坑:如果你没有挂载 -v n8n_data:/home/node/.n8n,删除容器或重新创建容器后可能丢失账号、工作流、凭据和加密密钥。正式环境一定要持久化。

方式二:VPS 线上部署 Docker Compose

线上部署建议使用 Docker Compose 管理服务。下面给出适合入门的生产化思路:n8n 使用 PostgreSQL 保存数据,反向代理负责 HTTPS,n8n 只在容器网络内部暴露。你也可以参考官方 Traefik 示例,或按自己的服务器习惯改成 Caddy/Nginx。

图 2:n8n 从服务器准备到上线的部署流程

第 1 步:安装 Docker 与 Docker Compose

先登录服务器,安装 Docker Engine 与 Docker Compose 插件。不同系统命令略有差异,安装完成后用以下命令检查:

  docker –version docker compose version

如果提示 command not found,说明 Docker 或 Compose 没有安装成功;如果提示 permission denied,可以临时使用 sudo,也可以把当前用户加入 docker 用户组。

第 2 步:创建项目目录与 .env 文件

  mkdir -p /opt/n8n cd /opt/n8n mkdir -p local-files nano .env

`.env` 文件用于集中管理域名、时区、数据库密码、加密密钥等变量。下面是可直接改造的示例:

  # 对外访问域名 N8N_DOMAIN=n8n.example.com N8N_PROTOCOL=https WEBHOOK_URL=https://n8n.example.com/ N8N_PROXY_HOPS=1   # 时区:影响 Schedule / Cron 类节点 GENERIC_TIMEZONE=Asia/Shanghai TZ=Asia/Shanghai   # 建议生产环境固定,不要遗失或随意更换 N8N_ENCRYPTION_KEY=replace-with-a-long-random-secret   # PostgreSQL POSTGRES_DB=n8n POSTGRES_USER=n8n POSTGRES_PASSWORD=replace-with-a-strong-password
加密密钥很重要:n8n 会使用加密密钥加密凭据。正式环境建议一开始就设置 N8N_ENCRYPTION_KEY,并安全备份;如果后续丢失或更换,已有凭据可能无法解密。

第 3 步:编写 compose.yaml

下面示例使用 PostgreSQL + n8n。反向代理部分可用你熟悉的 Caddy、Traefik、Nginx Proxy Manager 或宝塔反代完成;如果使用官方 Traefik 示例,可以把证书和路由配置一起放入 Compose。

  services:   postgres:     image: postgres:16-alpine     restart: unless-stopped     environment:       POSTGRES_DB: ${POSTGRES_DB}       POSTGRES_USER: ${POSTGRES_USER}       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}     volumes:       – postgres_data:/var/lib/postgresql/data     n8n:     image: docker.n8n.io/n8nio/n8n:latest     restart: unless-stopped     depends_on:       – postgres     ports:       – “127.0.0.1:5678:5678”     environment:       N8N_HOST: ${N8N_DOMAIN}       N8N_PROTOCOL: ${N8N_PROTOCOL}       WEBHOOK_URL: ${WEBHOOK_URL}       N8N_PROXY_HOPS: ${N8N_PROXY_HOPS}       GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}       TZ: ${TZ}       N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}       N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: “true”       N8N_RUNNERS_ENABLED: “true”       DB_TYPE: postgresdb       DB_POSTGRESDB_HOST: postgres       DB_POSTGRESDB_PORT: 5432       DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}       DB_POSTGRESDB_USER: ${POSTGRES_USER}       DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}     volumes:       – n8n_data:/home/node/.n8n       – ./local-files:/files   volumes:   postgres_data:   n8n_data:

这个配置把 n8n 映射到服务器本机 127.0.0.1:5678,外部用户不能直接访问 5678,需要由反向代理转发。这比直接暴露 0.0.0.0:5678 更安全。

第 4 步:启动、查看日志与初始化账号

  cd /opt/n8n docker compose up -d   docker compose ps docker compose logs -f n8n

如果容器状态正常,配置好反向代理后,访问你的域名,例如 https://n8n.example.com。首次访问会进入账号初始化页面。创建 Owner 账号后,就可以进入 n8n 工作台。

第 5 步:配置 HTTPS 反向代理

公网部署必须启用 HTTPS。你可以使用 Caddy、Traefik、Nginx 或宝塔面板反向代理。核心逻辑是:外部访问 https://n8n.example.com,代理转发到服务器本机 http://127.0.0.1:5678。

如果 n8n 在反向代理后面运行,需要正确设置 WEBHOOK_URL。否则在 Webhook 节点、OAuth 回调、第三方平台回调中可能出现地址错误。

  # 反向代理后的关键变量示例 WEBHOOK_URL=https://n8n.example.com/ N8N_PROXY_HOPS=1 N8N_HOST=n8n.example.com N8N_PROTOCOL=https
检查方法:进入 n8n 后新建 Webhook 节点,查看 Production URL 是否显示为 https://n8n.example.com/webhook/…。如果仍显示 localhost、IP、http 或 5678,说明反向代理或环境变量还没配对。

目录结构:n8n 数据、文件和备份应该放在哪里

很多 n8n 部署翻车不是因为安装失败,而是因为没有搞清楚“哪些数据必须保存”。下面这张表要重点看。

路径 / 数据作用是否必须备份备注
/home/node/.n8nn8n 用户目录,包含配置、SQLite 数据库、加密密钥等必须Docker 中通常挂载为 n8n_data 卷
PostgreSQL 数据库保存工作流、执行记录、凭据元数据等必须生产环境推荐使用独立数据库并定期备份
N8N_ENCRYPTION_KEY加密和解密凭据必须不要公开,不要随意更换
./local-files 或 /files读写本地文件节点使用的共享目录按业务需要适合保存临时文件、导入导出文件
compose.yaml / .env部署配置与变量必须注意不要把密钥提交到公开仓库

图 3:n8n 上线前检查清单

第一个自动化流程:Webhook 接收数据并返回结果

第一个流程建议选择“零第三方账号依赖”的 Webhook 示例。这样不需要邮箱、企业微信、Telegram、Slack 等凭据,部署成功后立刻可以测试。

图 4:Webhook 自动化流程结构

流程目标

外部系统向 n8n 发送一段 JSON 数据,n8n 接收后提取字段,最后返回一段处理后的 JSON。这个流程可以理解为:把 n8n 当成一个轻量 API 接口。

节点 1:Webhook Trigger

  • 点击 New Workflow,新建空白流程。
  • 添加 Webhook 节点。
  • HTTP Method 选择 POST。
  • Path 填写 first-demo。
  • Response 方式选择 Using Respond to Webhook Node,便于后面自定义返回内容。
  • 点击 Listen for test event,让测试 URL 进入监听状态。

Webhook 节点会提供 Test URL 和 Production URL。测试阶段用 Test URL,发布后给外部系统用 Production URL。

节点 2:Edit Fields / Set

添加 Edit Fields(有些版本显示为 Set)节点,用于整理输入数据。可以新增字段:

  name: {{$json.body.name}} source: {{$json.body.source}} receivedAt: {{$now}}

如果你的 Webhook Body 结构不同,可以先执行一次测试请求,然后根据 n8n 左侧输入数据面板选择真实字段路径。

节点 3:Respond to Webhook

添加 Respond to Webhook 节点,返回 JSON:

  {   “ok”: true,   “message”: “收到 {{$json.name}} 的请求”,   “source”: “{{$json.source}}”,   “receivedAt”: “{{$json.receivedAt}}” }

测试请求

复制 Webhook 节点的 Test URL,用 curl 或 Apifox/Postman 发送请求:

  curl -X POST https://n8n.example.com/webhook-test/first-demo \   -H “Content-Type: application/json” \   -d ‘{“name”:”AI Stack Nav”,”source”:”website”}’

如果返回 ok: true,并且 n8n 画布上能看到每个节点的输入输出数据,说明第一个自动化流程已经跑通。

从测试到发布

  1. 点击右上角 Save 保存工作流。
  2. 点击 Active / Publish,将流程发布为生产可用状态。
  3. 把 Test URL 换成 Production URL。生产 URL 一般是 /webhook/first-demo,而不是 /webhook-test/first-demo。
  4. 再次用 curl 测试生产地址。生产 Webhook 的执行数据可在 Executions 中查看。
关键区别:Test URL 适合调试,可在编辑器中查看实时输入;Production URL 适合正式接入第三方系统,流程必须保存并发布。

进阶流程示例:网站运营常用自动化

跑通第一个流程后,可以继续做更贴近网站运营的自动化。下面给出几个适合 AI 教程网站、资源站、会员下载站使用的方向。

场景触发器核心节点落地价值
表单线索收集WebhookEdit Fields、Google Sheets、Email把咨询、订单、合作信息自动归档并提醒
文章发布提醒Schedule TriggerHTTP Request、RSS、Telegram/企业微信每天检查新文章并自动推送
会员下载通知WebhookIF、Email、数据库节点支付成功后自动发送下载说明或售后边界
AI 内容流水线Manual/ScheduleOpenAI/HTTP Request、Code、WordPress自动生成草稿、摘要、标签和 SEO 字段
数据备份提醒Schedule TriggerPostgres、Email、IF检测备份状态,异常时通知管理员

常用环境变量解释

变量用途建议
GENERIC_TIMEZONE设置实例默认时区,影响 Schedule/Cron 类节点国内用户可设 Asia/Shanghai;海外业务按目标地区设置
TZ容器系统时区建议与 GENERIC_TIMEZONE 保持一致
WEBHOOK_URL反向代理后生成正确的 Webhook 外部地址公网部署必查,末尾建议保留 /
N8N_PROXY_HOPS告诉 n8n 代理链路跳数单层反向代理常见值为 1
N8N_ENCRYPTION_KEY凭据加密密钥生产环境必须固定并安全备份
DB_TYPE数据库类型PostgreSQL 使用 postgresdb
DB_POSTGRESDB_*PostgreSQL 连接信息生产环境建议使用强密码,限制数据库暴露范围
N8N_RUNNERS_ENABLED启用任务运行器相关能力按官方 Docker 示例开启

更新、备份与回滚

更新前先备份

升级 n8n 之前,至少备份三类内容:PostgreSQL 数据库、n8n_data 卷或 /home/node/.n8n 目录、compose.yaml 与 .env 文件。不要在没有备份的情况下直接拉取新镜像。

  # 查看当前镜像与容器 docker compose ps   docker compose pull docker compose up -d   docker compose logs -f n8n

建议锁定版本

如果是生产环境,不建议长期使用 latest。更稳妥的方式是指定一个明确版本标签,先在测试环境验证,再更新正式环境。示例:

  image: docker.n8n.io/n8nio/n8n:2.x.x

这里的 2.x.x 仅为示例,请以官方发布页或镜像仓库中的实际版本为准。

常见报错与排查清单

问题可能原因解决方向
访问域名打不开DNS 未生效、防火墙未放行、反向代理未启动检查 A 记录、80/443 端口、安全组、代理日志
Webhook URL 显示 localhost 或 5678WEBHOOK_URL / N8N_HOST / N8N_PROTOCOL 未配置正确设置 WEBHOOK_URL=https://你的域名/,重启容器
Schedule 时间不对时区未设置或工作流单独时区不同设置 GENERIC_TIMEZONE,检查 workflow settings
重启后账号/流程丢失没有持久化 /home/node/.n8n 或数据库检查 volumes,确认 n8n_data 和 PostgreSQL 数据没有丢失
凭据全部变红/无法解密加密密钥丢失或更换找回旧 N8N_ENCRYPTION_KEY 或 .n8n/config;不要随意重置
502 Bad Gatewayn8n 容器未启动、端口不通、代理转发错误docker compose logs -f n8n;检查 127.0.0.1:5678 是否可访问
Webhook 收不到请求使用了 Test URL 但未监听,或 Production URL 流程未发布测试用 Listen for test event;生产用发布后的 Production URL
数据库越来越大执行记录保存过多设置执行数据清理策略,定期备份并清理历史执行

安全建议:自托管 n8n 不要忽略这些细节

  • 不要把 n8n 直接通过 http://服务器IP:5678 暴露到公网,尽量用 HTTPS 域名访问。
  • 不要在公开仓库提交 .env、API Key、数据库密码、N8N_ENCRYPTION_KEY。
  • 不要让所有人都拥有管理员权限;团队使用时要做好账号分工。
  • 不要在 Code 节点执行不可信代码;自托管环境中的脚本权限通常比云端更敏感。
  • 对外 Webhook 建议开启 Header Auth、Basic Auth、JWT 或签名校验,避免被陌生请求刷爆。
  • 定期更新 n8n 与基础镜像,但每次更新前先备份,并保留回滚方案。

FAQ:n8n 自托管常见问题

n8n 自托管免费吗?

不添加商业许可证时,自托管 n8n 通常以 Community edition 运行。实际可用功能请以 n8n 官方版本和许可说明为准。

新手应该用 npm 还是 Docker?

建议优先 Docker。Docker 更容易隔离环境,也方便持久化、升级和迁移。npm 适合本地开发或有 Node.js 运维经验的用户。

SQLite 和 PostgreSQL 怎么选?

本地体验、小型个人流程可以先用 SQLite;正式生产、多人协作、执行量较大时建议使用 PostgreSQL。

为什么 Webhook 地址不对?

大多是反向代理后没有设置 WEBHOOK_URL,导致 n8n 仍用容器内部地址拼接 URL。

Test URL 和 Production URL 有什么区别?

Test URL 用于调试,需要在编辑器中监听测试事件;Production URL 用于正式触发,流程需要保存并发布。

Schedule Trigger 为什么没自动执行?

检查流程是否发布、实例时区是否正确、Cron 表达式是否有效,以及容器是否正常运行。

备份 n8n 只备份数据库够吗?

不够。还要备份 .n8n 目录、加密密钥、compose.yaml、.env,以及业务流程依赖的本地文件目录。

可以用宝塔面板反向代理 n8n 吗?

可以。核心是把域名 HTTPS 请求反代到 127.0.0.1:5678,并设置正确的 WEBHOOK_URL。

n8n 适合做 AI 自动化吗?

适合。可以串联 HTTP Request、OpenAI/兼容 API、表格、邮件、数据库、Webhook 和自定义 Code 节点,适合做内容生产、数据处理和运营自动化。

总结:先跑通,再上线,再自动化

n8n 自托管的核心不是“装上就完事”,而是建立一套可持续运行的自动化基础设施。新手可以先用 Docker 本地跑通,再迁移到 VPS + Docker Compose;上线前必须处理域名、HTTPS、持久化、数据库、加密密钥和备份。

第一个 Webhook 流程跑通后,你就可以把 n8n 接到网站表单、支付回调、AI 生成接口、RSS、WordPress、企业微信、飞书、Telegram、Notion、Google Sheets 等工具上,逐步把重复操作变成稳定的自动化流程。

参考资料

  • n8n Docs – Self-hosting n8n:https://docs.n8n.io/hosting/
  • n8n Docs – Docker Installation:https://docs.n8n.io/hosting/installation/docker/
  • n8n Docs – Docker Compose:https://docs.n8n.io/hosting/installation/server-setups/docker-compose/
  • n8n Docs – Environment Variables:https://docs.n8n.io/hosting/configuration/environment-variables/
  • n8n Docs – Configure webhooks with reverse proxy:https://docs.n8n.io/hosting/configuration/configuration-examples/webhook-url/

Facebook
LinkedIn
Reddit
X
Email
WhatsApp
Telegram
Pinterest
Mix

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注