重复的任务浪费无数时间——从自动发布博客到社交媒体,到同步线索到 CRM,再到定时抓取网站数据。如果你用过 Zapier 或 Make.com,你知道随着工作流增多,月账单会迅速攀升。n8n 是开源自动化平台,可以自托管在你自己的 VPS 上——这意味着你控制数据、避免按任务计费、工作流数量无限制。本指南将引导你使用 Docker 或 Node.js 在 Linux VPS 上安装 n8n,设置 Nginx 反向代理和 HTTPS,配置安全认证,并确保工作流数据在更新后仍然存在。
简而言之:n8n 是开源工作流自动化平台,可以自托管在 VPS 上,避免按任务收费、确保数据隐私、支持无限工作流。最快的设置方式是使用 Docker;正确配置环境变量 N8N_HOST 和 WEBHOOK_URL 以避免 webhook 失败;使用 Nginx 作为反向代理配合 Let's Encrypt SSL;启用内置用户认证保证安全。
什么是 n8n 以及为什么要自托管
n8n(发音为"n-eight-n")是开源工作流自动化平台,类似于 Zapier 和 Make.com——但有关键区别:它运行在你自己的硬件上。"自托管"意味着 n8n 服务器运行在你的 VPS 上,而不是依赖第三方 SaaS 提供商。
自托管 n8n 的主要优势:
- 没有按任务计费:Zapier 按任务执行次数或月度工作流运行次数计费。n8n 没有使用限制——一旦部署在 VPS 上,工作流可以无限执行,零边际成本。
- 数据隐私:所有工作流和凭证都保留在你的服务器上。没有数据离开你的基础设施或进入第三方云。
- 完全控制:你可以访问源代码,可以 fork、自定义集成、扩展 n8n 以满足具体需求。
- 长期稳定:不用担心 SaaS 提供商倒闭、涨价或改变服务条款。
实际应用案例
在设置前,看看 n8n 的实际应用场景:
- 自动发布博客到社交媒体:发布新的 WordPress 文章时,n8n 自动通过 webhook 触发器分享链接到 Facebook、Twitter、LinkedIn 和 Telegram。
- 同步表单提交数据到 CRM:每个表单提交自动流向 Google Sheets、Salesforce 或 HubSpot,无需手动更新 CRM。
- 发送 Slack/Line 通知:服务器宕机、订单完成或新支持工单到达时,n8n 立即发送通知到团队的 Slack 或 Line 群组。
- 定时网站监控:n8n 可以按计划监控网站,当内容更新时自动告知或记录变化。
- 自动备份:每天固定时间,n8n 可以从云存储(Google Drive、S3)拉取文件并备份到其他位置。
- 数据转换清洗:规范化来自 API 的混乱数据,拆分全名为名和姓、标准化电话号码、推送干净数据到下游系统。
前置要求
在 VPS 上安装 n8n 需要:
- 具有 root 权限的 VPS:能够 SSH 进入并运行终端命令。
- 操作系统:Ubuntu 22.04 LTS(或任何现代 Linux 发行版)。
- Docker(推荐):安装 Docker 和 Docker Compose 简化环境管理和确保部署一致性。
- 或 Node.js:如果不想用 Docker,Node.js 18+ 和 npm 也可以。
- 域名:n8n 需要完全限定域名(例如 automation.yourcompany.com)使 webhooks 和 HTTPS 正常工作。
- 内存:最少 512 MB RAM,推荐 1 GB+ 以保证大型工作流顺利运行。
使用 Docker 安装 n8n(推荐)
Docker 消除了依赖问题——没有 Node.js 版本冲突,没有系统库冲突。这是最快的 n8n 部署方式。
第 1 步:安装 Docker 和 Docker Compose
如果未安装 Docker,运行:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER newgrp docker
验证安装:
docker --version docker run hello-world
第 2 步:创建目录和命名卷
创建存储 n8n 配置和工作流数据的目录:
mkdir -p ~/n8n cd ~/n8n docker volume create n8n_data
命名卷在容器删除后仍然保留——对生产环境至关重要。
第 3 步:创建 docker-compose.yml
创建 Docker Compose 文件:
nano docker-compose.yml
粘贴以下内容:
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- N8N_HOST=automation.yourcompany.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://automation.yourcompany.com/
- N8N_USER_MANAGEMENT_DISABLED=false
volumes:
- n8n_data:/home/node/.n8n
restart: unless-stopped
volumes:
n8n_data:
注意:N8N_HOST 和 WEBHOOK_URL 是最常见的设置错误。如果这些不正确或不匹配,webhook 会无声地失败——外部集成无法触发工作流。确保两个值完全匹配你的域名并使用 HTTPS。
用你的实际值替换占位符:
N8N_HOST:从automation.yourcompany.com改为你的实际域名。WEBHOOK_URL:必须以斜杠结尾并使用https://协议。
第 4 步:使用 Docker 启动 n8n
docker-compose up -d
检查容器是否运行:
docker ps docker logs n8n
当看到日志中的 "Server started successfully" 时,n8n 已准备好——尽管从互联网还无法访问。我们接下来用 Nginx 解决这个问题。
设置 Nginx 反向代理和 HTTPS
n8n 仅监听 localhost:5678。要用 HTTPS 通过你的域名暴露它(webhook 需要),我们使用 Nginx 作为反向代理。
第 1 步:安装 Nginx 和 Certbot
sudo apt update sudo apt install -y nginx certbot python3-certbot-nginx
第 2 步:创建 Nginx 配置
sudo nano /etc/nginx/sites-available/n8n
粘贴以下内容:
server {
listen 80;
server_name automation.yourcompany.com;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
用你的实际域名替换 automation.yourcompany.com。
第 3 步:启用配置并测试
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
第 4 步:使用 Let's Encrypt 安装 SSL
sudo certbot --nginx -d automation.yourcompany.com
按照提示进行,接受条款,允许 Certbot 自动修改 Nginx 配置。Certbot 将自动重定向所有 HTTP 流量到 HTTPS 并设置证书自动续期。
配置用户认证
一旦 n8n 可通过 HTTPS 访问,首次登录时系统会提示创建管理员账户。这是主要安全关卡——安全保存这些凭证,因为每次访问 n8n 仪表板都需要用到。
小贴士:为了额外安全,在 n8n 用户设置中启用双因素认证(2FA),或在 Nginx 配置的 location 块中添加 .htpasswd 基本认证。这增加第二层防御。
确保数据持久性和备份
所有工作流定义、凭证和执行历史都存储在容器内的 ~/.n8n 目录。如果没有卷删除容器,所有数据都会丢失。我们已挂载命名卷,但添加显式备份很明智。
验证卷持久性
docker volume inspect n8n_data
设置自动备份
创建 cron 任务每天备份 n8n 数据:
crontab -e
添加此行:
0 2 * * * tar -czf ~/backups/n8n-$(date +\%Y\%m\%d).tar.gz ~/n8n/
这每天凌晨 2 点备份整个 ~/n8n 目录。首先创建备份目录:
mkdir -p ~/backups
生产环境注意事项
对于 24/7 运行的关键工作流,额外的加强步骤确保稳定性:
- 从 SQLite 升级到 PostgreSQL:默认 n8n 用 SQLite,测试时可以,但高负载下会成为瓶颈。生产环境需在 docker-compose.yml 环境变量中配置 PostgreSQL。
- 监控资源使用:跟踪 n8n 容器的 CPU 和 RAM。如果持续过高,优化工作流或升级 VPS。
- 启用 Docker 日志轮转:通过在
/etc/docker/daemon.json中配置日志轮转防止 Docker 日志填满磁盘。 - 设置监控和告警:使用 Prometheus/Grafana 或简单的健康检查脚本监控 n8n 正常运行时间,如果崩溃则告警。
- 保持 n8n 更新:定期拉取最新 Docker 镜像并重启容器获取错误修复和安全补丁:
docker pull n8nio/n8n:latest && docker-compose up -d。
总结
现在你有一个完全功能的自托管 n8n 实例运行在 VPS 上。与 SaaS 平台不同,没有每个工作流的费用——你的 VPS 投资覆盖无限自动化。所有工作流数据和凭证保留在服务器上,给你完全控制和隐私。
后续步骤:登录 n8n 仪表板(https://automation.yourcompany.com),创建你的第一个简单工作流(例如 HTTP 触发器 → 发送 Slack 消息),并端到端测试。熟悉后,构建涉及多个 API、定时任务和条件逻辑的更复杂自动化。可能性无限。
常见问题 (FAQ)
n8n 与 Zapier 或 Make.com 有什么不同?
Zapier 和 Make 按任务执行或月度使用计费。n8n 是开源自托管的,部署到 VPS 后工作流可无限运行零成本。你还保有完全数据控制和代码访问权限。
我可以不用 Docker 运行 n8n 吗?
可以,安装 Node.js 18+ 和 npm,然后运行 `npm install -g n8n` 再运行 `n8n start`。不过 Docker 对生产更整洁,因为依赖隔离且更新更简单。
为什么我的 webhook 没有触发?
通常是 N8N_HOST 或 WEBHOOK_URL 配置错误导致。仔细检查两个值是否完全匹配你的域名(如 automation.yourcompany.com)并使用 HTTPS,没有多余空格。查看 Docker 日志:`docker logs n8n`。
n8n 对工作流或凭证数量有限制吗?
没有硬限制——取决于 VPS 资源(RAM、磁盘、CPU)。支持数百个工作流,但许多大型工作流或频繁执行可能需要更多 RAM。如果性能下降,升级 VPS 或跨多个实例分散工作流。
立即开始使用 AsiaGB VPS
AsiaGB VPS 全系列采用 SSD 存储,可选择泰国或新加坡数据中心,并提供完整的 Root 权限,Linux 系统每月低至 500 泰铢起,由泰语技术团队提供支持。
查看 VPS 套餐