n8n 自部署指南:开源工作流自动化平台
什么是 n8n
n8n(发音为 “n-eight-n”)是一个开源的工作流自动化平台,被称为"自托管的 Zapier 替代品"。它允许用户通过可视化的节点编辑器创建自动化工作流,连接不同的应用程序和服务,实现业务流程的自动化。
n8n 的核心特点:
- 开源免费:MIT 许可证,可自托管
- 可视化编辑器:无需编码,通过拖拽创建工作流
- 丰富集成:支持 400+ 应用集成
- 灵活部署:支持 Docker、Kubernetes、本地部署
- 定时执行:支持手动、定时、事件触发
截至目前,n8n 在 GitHub 上已获得超过 37000 个 Star,是最受欢迎的自动化工作流工具之一。
部署方式选择
n8n 支持多种部署方式:
| 部署方式 |
适用场景 |
难度 |
| Docker Compose(SQLite) |
个人使用、小团队 |
简单 |
| Docker Compose(PostgreSQL) |
生产环境、多用户 |
中等 |
| Node.js (npm) |
本地开发测试 |
简单 |
| Kubernetes |
大规模生产部署 |
复杂 |
Docker Compose 部署(推荐)
环境要求
- 服务器:Ubuntu 22.04+ 或其他 Linux 发行版
- 资源:建议 2GB+ 内存,20GB+ 存储
- Docker 和 Docker Compose 已安装
简单版(SQLite)
创建项目目录和配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
mkdir -p ~/n8n && cd ~/n8n
cat > docker-compose.yml <<'YAML'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=automation.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://automation.example.com/
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- ./n8n_data:/home/node/.n8n
YAML
|
设置加密密钥并启动:
1
2
|
export N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
docker compose up -d
|
生产版(PostgreSQL)
对于团队使用或生产环境,建议使用 PostgreSQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
mkdir -p ~/n8n && cd ~/n8n
cat > docker-compose.yml <<'YAML'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
depends_on:
- postgres
ports:
- "5678:5678"
environment:
- N8N_HOST=automation.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://automation.example.com/
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=Asia/Shanghai
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./n8n_data:/home/node/.n8n
postgres:
image: postgres:15
container_name: n8n_postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
volumes:
- ./pg_data:/var/lib/postgresql/data
YAML
|
设置密钥并启动:
1
2
3
|
export N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
export POSTGRES_PASSWORD=$(openssl rand -hex 24)
docker compose up -d
|
添加 SSL(可选)
使用 Nginx 反向代理并配置 SSL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 安装 Nginx 和 Certbot
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
# 配置 Nginx
sudo tee /etc/nginx/sites-available/n8n > /dev/null <<'NGINX'
server {
listen 80;
server_name automation.example.com;
location / {
proxy_pass http://127.0.0.1:5678;
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;
}
}
NGINX
# 启用配置
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
# 获取 SSL 证书
sudo certbot --nginx -d automation.example.com --redirect
|
快速测试(Docker Run)
用于本地快速测试:
1
2
3
4
5
6
7
8
|
docker run -it --rm \
-p 5678:5678 \
-e N8N_HOST=localhost \
-e N8N_PORT=5678 \
-e N8N_PROTOCOL=http \
-e WEBHOOK_URL=http://localhost:5678/ \
-e N8N_ENCRYPTION_KEY=$(openssl rand -hex 32) \
n8nio/n8n:latest
|
思维导图:n8n 部署流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
┌─────────────────────────────────────────┐
│ n8n 部署流程总览 │
└─────────────────────────────────────────┘
│
┌─────────────────────────────────┼─────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ 环境准备 │ │ 选择部署方式 │ │ 配置优化 │
│ │ │ │ │ │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
├─安装 Docker ├─Docker Compose SQLite ├─设置加密密钥
├─安装 Docker Compose ├─Docker Compose PostgreSQL ├─配置时区
├─准备服务器 ├─Node.js (npm) ├─配置 SMTP
└─配置域名 └─Kubernetes ├─配置备份
├─配置 SSL
▼
┌─────────────────────────────────┐
│ 核心环境变量 │
├─────────────────────────────────┤
│ • N8N_HOST - 主机名 │
│ • N8N_PORT - 端口 │
│ • N8N_PROTOCOL - 协议 │
│ • WEBHOOK_URL - Webhook 地址 │
│ • N8N_ENCRYPTION_KEY - 加密密钥 │
│ • GENERIC_TIMEZONE - 时区 │
└─────────────────────────────────┘
|
常见使用案例
案例 1:自动收集社交媒体数据
场景:每天自动收集 Twitter/X 和 Reddit 的特定话题讨论
工作流节点:
- Schedule Trigger - 每天早上 8 点触发
- HTTP Request - 调用 Twitter API 获取话题推文
- HTTP Request - 调用 Reddit API 获取帖子
- Function - 合并和格式化数据
- Gmail - 发送每日报告到指定邮箱
配置示例:
1
2
3
4
5
6
7
8
9
|
触发器:每天 8:00
↓
Twitter: 搜索关键词 "AI automation"
↓
Reddit: 搜索 subreddit "programming"
↓
数据处理:JSON 合并去重
↓
Gmail: 发送报告到 user@example.com
|
案例 2:自动化客户支持
场景:新客户提交表单后自动创建支持工单
工作流节点:
- Webhook Trigger - 接收网站表单提交
- IF - 判断客户类型(VIP/普通)
- Mattermost - 发送通知到客服频道
- Google Sheets - 记录客户信息
- Slack - 向对应客服发送提醒
案例 3:定时备份数据
场景:每天自动备份 MySQL 数据库到云存储
工作流节点:
- Schedule Trigger - 每天凌晨 2 点
- MySQL - 执行备份查询
- Function - 压缩数据
- Google Drive - 上传到指定文件夹
- Discord - 发送备份完成通知
案例 4:AI 内容创作助手
场景:输入主题关键词,自动生成并发布文章
工作流节点:
- Manual Trigger - 手动触发
- HTTP Request - 调用 OpenAI API 生成大纲
- HTTP Request - 调用 OpenAI API 生成正文
- WordPress - 发布到博客
- Gmail - 发送发布通知
案例 5:自动化代码部署
场景:GitHub PR 合并后自动部署到服务器
工作流节点:
- GitHub Webhook - 监听 PR 合并事件
- GitHub - 获取最新代码
- SSH - 连接到服务器
- Command - 执行部署命令
- Discord - 发送部署结果
案例 6:定时数据同步
场景:每小时同步 CRM 数据到数据分析工具
工作流节点:
- Schedule Trigger - 每小时
- HTTP Request - 获取 CRM API 数据
- Transform - 转换数据格式
- PostgreSQL - 写入分析数据库
- Wait - 等待下一次同步
常用节点介绍
| 节点类别 |
常用节点 |
功能 |
| 触发器 |
Schedule, Webhook, Manual |
工作流启动条件 |
| 通信 |
Gmail, Slack, Discord, Telegram |
消息通知 |
| 数据 |
HTTP Request, JSON, Function |
数据处理 |
| 存储 |
Google Sheets, PostgreSQL, MySQL |
数据存储 |
| AI |
OpenAI, Anthropic |
AI 能力集成 |
| 开发工具 |
GitHub, GitLab, SSH |
代码和部署 |
| 营销 |
WordPress, Mailchimp |
营销自动化 |
配置优化建议
生产环境必须配置
1
2
3
4
5
|
# 关键环境变量
N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # 必须设置强密钥
N8N_PROTOCOL=https # 生产环境必须 HTTPS
WEBHOOK_URL=https://your-domain.com/ # 正确的 Webhook 地址
GENERIC_TIMEZONE=Asia/Shanghai # 设置正确时区
|
备份策略
1
2
3
4
5
|
# 备份 SQLite 数据
tar -czf n8n_backup_$(date +%Y%m%d).tar.gz ./n8n_data
# 备份 PostgreSQL 数据
docker exec n8n_postgres pg_dump -U n8n n8n > backup.sql
|
更新 n8n
1
2
3
4
5
|
# 拉取最新镜像
docker compose pull
# 重启服务
docker compose up -d
|
常见问题
Q: 如何实现 HTTPS 访问?
A: 使用 Nginx 反向代理 + Let’s Encrypt SSL 证书,或使用 Traefik 自动配置。
Q: 工作流在哪里运行?
A: 在 n8n 服务器上运行,可以是本地服务器、云服务器或 Docker 环境。
Q: 如何实现多个工作流?
A: n8n 支持创建多个独立的工作流,每个工作流可以有不同的触发条件和动作。
Q: 是否需要编程基础?
A: 不需要。n8n 提供可视化界面,通过连接节点即可创建工作流。复杂逻辑可使用 Function 节点编写 JavaScript。
Q: 免费版 vs 收费版区别?
A: 自托管版本功能完全免费。官方云服务有收费版,主要区别在于托管便利性和支持服务。
总结
n8n 是一个功能强大且灵活的开源工作流自动化平台。通过 Docker 部署,可以快速搭建自己的自动化服务,实现业务流程的自动化和效率提升。
部署要点:
- 生产环境使用 Docker Compose + PostgreSQL
- 配置 SSL 和加密密钥
- 定期备份数据
- 及时更新版本
使用建议:
- 从简单工作流开始
- 充分利用定时执行功能
- 结合 AI 节点实现智能化
- 做好数据备份
参考资源