---
title: "在自己的服务器上部署 n8n：域名、工作流与备份"
description: "用 Zenavo 的模板部署 n8n，配置 HTTPS、Webhook 地址和时区，跑通第一个工作流，再做好加密密钥保存与数据卷备份。"
date: 2026-11-10
language: zh-CN
url: https://zenavo.app/zh-CN/blog/self-host-n8n
---

# 在自己的服务器上部署 n8n：域名、工作流与备份

把表单内容写进表格、定时汇总消息、收到 Webhook 后调用另一个接口——这些重复的自动化流程都可以交给 [n8n](https://n8n.io)。自托管没有托管版按执行次数计费的限制，工作流和凭据都留在你自己的服务器上。

这篇文章用 Zenavo 的 n8n 模板，从部署、配置域名和 Webhook，一直走到备份与升级。服务器、Zenavo 平台以及工作流调用的第三方 API 分别计费。

## 部署 n8n

先在 Zenavo 中[连接一台 Linux 服务器](https://docs.zenavo.app/zh-CN/servers/add-a-server)，再打开 [n8n 模板](https://zenavo.app/deploy?template=n8n)，选择服务器并部署。

当前模板的配置如下：

| 配置 | 值或用途 |
|---|---|
| 镜像 | `n8nio/n8n:latest` |
| HTTP 端口 | `5678` |
| 持久化目录 | `/home/node/.n8n`，默认 SQLite 数据库、工作流和凭据都在这里 |
| `N8N_ENCRYPTION_KEY` | 项目创建时自动生成，用于加密工作流中保存的凭据 |
| `GENERIC_TIMEZONE` | 默认 `UTC`，下面改成你的时区 |
| `N8N_DIAGNOSTICS_ENABLED` | `false`，关闭遥测统计 |

`latest` 会随上游更新。准备长期使用时，在 n8n 服务 **设置** 的 **来源** 中把镜像标签改成你验证过的固定版本（例如 `n8nio/n8n:1.82.0`），避免重新部署时无意间跨版本升级。

## 绑定域名，配置 Webhook 和时区

在 n8n 服务的 **网络** 页为 `5678` 端口绑定域名，例如 `n8n.example.com`，在 DNS 添加指向服务器的 A 记录，等待 HTTPS 生效。步骤见[域名文档](https://docs.zenavo.app/zh-CN/networking/domains)。

然后打开 n8n 服务的 **变量** 页，补充域名和时区配置：

```sh
N8N_HOST=n8n.example.com
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://n8n.example.com/
WEBHOOK_URL=https://n8n.example.com/
N8N_PROXY_HOPS=1
GENERIC_TIMEZONE=Asia/Shanghai
TZ=Asia/Shanghai
```

几点说明：

- `WEBHOOK_URL` 决定 Webhook 节点生成的公开地址；不设置时，节点会显示容器内部地址 `http://localhost:5678`。
- `N8N_PROXY_HOPS=1` 对应 Zenavo 网关这一层反向代理。如果你的域名前面还套了 Cloudflare 等 CDN 代理，按实际代理层数调整。
- `GENERIC_TIMEZONE` 影响定时触发器（Schedule Trigger）的默认时区。

保存后重启服务，打开 `https://n8n.example.com` 创建管理员账号。以后更换域名时，记得同步修改上面几个地址变量。

## 跑通第一个工作流和 Webhook

进入编辑器后，先建一个最小工作流确认执行正常：

1. 新建工作流，添加 **Manual Trigger**。
2. 添加 **Edit Fields (Set)** 节点，新增字符串字段 `message`，值填 `Hello from n8n`。
3. 点击 **Test workflow**，确认右侧输出出现这条消息，然后保存。

接着测试外部请求能否进入 Webhook：

1. 添加 **Webhook** 节点，HTTP Method 选 `GET`。
2. 点击 **Listen for test event**，在浏览器打开节点显示的 **Test URL**，确认编辑器立即收到请求数据。
3. 正式接入第三方系统（如 GitHub、Stripe、飞书）时，切换到 **Production URL**，并将工作流右上角的开关设为 **Active**。Test URL 只在点击监听时临时生效，不能填进正式业务。

## 保管好 `N8N_ENCRYPTION_KEY`

n8n 里保存的所有第三方 API Key、数据库密码和 OAuth 令牌，都用 `N8N_ENCRYPTION_KEY` 加密后存在数据库里。

打开 n8n 服务的 **变量** 页，把 `N8N_ENCRYPTION_KEY` 的值复制一份存进你的密码管理器。**部署后不要修改它**；将来把备份恢复到新项目或新服务器时，也必须填入同一个 `N8N_ENCRYPTION_KEY`，否则恢复出来的工作流无法解密原有的凭据。

编辑器里的“导出工作流”只会导出节点和连接关系的 JSON，不包含凭据和执行记录，不能代替完整备份。

## 备份与升级

n8n 的全部数据都在 `/home/node/.n8n` 数据卷里。在 n8n 服务的 **备份与恢复** 中备份它：

1. 选一个没有关键任务在跑的时间，停止项目（数据卷备份要求项目处于停止状态）。
2. 创建数据卷备份，完成后重新启动项目。
3. 下载一份备份自行保存，并和 `N8N_ENCRYPTION_KEY` 放在一起。

操作细节见[备份与恢复](https://docs.zenavo.app/zh-CN/operations/backups)。如果你把备份恢复到新项目做验证，注意已启用的工作流恢复后会继续按定时触发器运行，测试时先关闭触发器或与真实业务隔离。

升级前先读 n8n 的[发行说明](https://docs.n8n.io/release-notes/)，先备份数据卷，再去服务 **设置 → 来源** 修改镜像版本。n8n 升级时可能会迁移数据库结构，一旦升级完成，单纯换回旧镜像不一定能启动，需要用升级前的备份恢复。

## 常见问题

**Webhook 节点里的地址还是显示 `localhost:5678`？**
检查 **变量** 页是否已添加 `WEBHOOK_URL=https://你的域名/`，保存后需要重启 n8n 服务才会生效。

**第三方平台调用 Webhook 返回 404？**
确认用的是 **Production URL**（路径带 `/webhook/` 而不是 `/webhook-test/`），并且工作流右上角已经打开 **Active** 开关。

**定时任务没有按北京时间触发？**
检查变量里的 `GENERIC_TIMEZONE` 和 `TZ` 是否设为 `Asia/Shanghai`，同时看工作流自身的 **Settings → Timezone** 有没有单独覆盖成别的时区。

**需要多大的服务器？**
日常轻量工作流占用的内存不大，1 核 2 GB 的服务器即可起步；如果工作流里要在内存中处理大文件、大量 JSON 数组或高并发请求，建议用 2 核 4 GB 以上的服务器。

从 [n8n 模板](https://zenavo.app/deploy?template=n8n)开始：先绑定域名并配好 `WEBHOOK_URL` 和时区，再把 `N8N_ENCRYPTION_KEY` 存好、做一次数据卷备份。
