在阿里云ECS上部署n8n自动化工作流:U2实例实战
- 建站程序
- 8天前
- 40热度
- 0评论
最近公司需要搭建一个工作流自动化系统,用来处理一些重复性的任务,比如定时同步数据、触发webhook、对接各种API等等。研究了一圈之后,选择了n8n这个开源的工作流自动化工具。
n8n相比其他同类产品,有几个明显的优势:完全开源、可以自部署、节点丰富、界面友好。最关键的是,它不像某些SaaS服务那样按执行次数收费,自己部署的话跑多少次都不用额外花钱。
为什么选择阿里云的u2i/u2a实例
在选择服务器的时候,我对比了阿里云的几种ECS规格。最终选择了u2i或u2a系列,主要考虑是:
- n8n本身是Node.js应用,对CPU的单核性能有一定要求
- 如果工作流比较复杂,内存占用会上去
- u2系列的性价比比较合适,不会像通用型实例那样资源过剩
我用的是u2i.large(2核8G),对于中小规模的工作流来说完全够用。如果你的工作流不多,u2a.large(2核4G)也可以胜任。
部署步骤
1. 准备工作
首先确保你的ECS已经安装了Docker和Docker Compose。如果还没装,可以快速安装:
# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker
# 启动Docker服务
systemctl start docker
systemctl enable docker
# 安装Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose2. 创建docker-compose配置
创建一个工作目录,然后编写docker-compose.yml:
mkdir -p /opt/n8n
cd /opt/n8n
vim docker-compose.yml配置文件内容如下:
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_password_here
- N8N_HOST=your_domain_or_ip
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://your_domain_or_ip:5678/
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- ./data:/home/node/.n8n记得修改几个关键参数:
N8N_BASIC_AUTH_PASSWORD:改成你自己的密码N8N_HOST:改成你的域名或ECS的公网IPWEBHOOK_URL:同样改成你的域名或IP
3. 启动服务
docker-compose up -d第一次启动会拉取镜像,需要等一会儿。启动完成后,可以检查服务状态:
docker-compose ps
docker-compose logs -f4. 配置安全组
别忘了在阿里云控制台给ECS的安全组添加规则,开放5678端口。入方向规则:
- 协议类型:自定义TCP
- 端口范围:
5678/5678 - 授权对象:
0.0.0.0/0(或者限制为你的办公网IP段)
5. 访问n8n
浏览器打开 http://你的IP:5678,输入刚才设置的用户名密码,就能看到n8n的界面了。
实战案例
定时获取MuleRun上的新AI Agent
部署好n8n之后,我们来做一个实际的工作流。这个例子会演示如何每天定时抓取MuleRun.com上新发布的AI Agent信息,然后发送到企业微信或钉钉。
工作流设计思路
整个流程分为几步:
- 定时触发(每天早上9点)
- HTTP请求获取MuleRun网站内容
- 解析HTML提取AI Agent信息
- 过滤出新发布的内容(24小时内)
- 格式化消息
- 发送通知
具体操作步骤
第一步:创建工作流
登录n8n后,点击右上角的"Create New Workflow",进入工作流编辑界面。
第二步:添加Schedule触发器
点击左侧的"+"号,搜索"Schedule Trigger"节点,配置如下:
- Trigger Interval: Day
- Trigger at Hour: 9
- Trigger at Minute: 0
这样就设置成每天早上9点触发。
第三步:添加HTTP Request节点
添加"HTTP Request"节点,配置:
- Method: GET
- URL:
https://mulerun.com/agents(假设这是AI Agent列表页面) - Response Format: String
如果网站有反爬机制,可能需要添加User-Agent:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36第四步:添加HTML Extract节点
添加"HTML Extract"节点来解析网页内容。假设MuleRun的AI Agent列表结构如下:
<div class="agent-item" data-publish-time="2024-01-15">
<h3 class="agent-title">智能客服助手</h3>
<p class="agent-desc">基于GPT-4的智能客服解决方案</p>
</div>配置提取规则:
- Extraction Values:
- Key:
title, CSS Selector:.agent-title, Attribute:text - Key:
description, CSS Selector:.agent-desc, Attribute:text - Key:
publishTime, CSS Selector:.agent-item, Attribute:data-publish-time
第五步:添加Code节点过滤数据
添加"Code"节点,用JavaScript过滤出24小时内的新Agent:
// 获取当前时间和24小时前的时间
const now = new Date();
const oneDayAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000);
// 过滤新发布的Agent
const newAgents = $input.all().filter(item => {
const publishTime = new Date(item.json.publishTime);
return publishTime > oneDayAgo;
});
// 如果没有新Agent,返回空数组
if (newAgents.length === 0) {
return [{
json: {
hasNewAgents: false,
message: '今天没有新的AI Agent发布'
}
}];
}
// 格式化消息
const message = `🤖 MuleRun今日新增 ${newAgents.length} 个AI Agent:\n\n` +
newAgents.map((agent, index) =>
`${index + 1}. ${agent.json.title}\n ${agent.json.description}`
).join('\n\n');
return [{
json: {
hasNewAgents: true,
message: message,
count: newAgents.length
}
}];第六步:添加条件判断
添加"IF"节点,判断是否有新Agent:
- Condition:
{{ $json.hasNewAgents }}equalstrue
第七步:发送通知
在IF节点的"true"分支添加通知节点。这里以企业微信为例,添加"HTTP Request"节点:
- Method: POST
- URL: 你的企业微信webhook地址
- Body Content Type: JSON
- Body:
{
"msgtype": "text",
"text": {
"content": "{{ $json.message }}"
}
}如果用钉钉,配置类似:
{
"msgtype": "markdown",
"markdown": {
"title": "MuleRun AI Agent更新",
"text": "{{ $json.message }}"
}
}第八步:测试和激活
点击右上角的"Execute Workflow"按钮测试整个流程。确认没问题后,点击右上角的开关按钮,激活工作流。
工作流优化建议
这个基础版本可以继续优化:
- 数据持久化:添加一个数据库节点(比如PostgreSQL或MongoDB),存储已经推送过的Agent ID,避免重复通知
- 错误处理:添加"Error Trigger"节点,当工作流出错时发送告警
- 多渠道推送:同时推送到多个通知渠道(企业微信、钉钉、飞书、邮件等)
- 内容增强:调用AI API对Agent描述进行总结或分类
实际使用中,我发现这种定时任务特别适合用n8n来做。以前需要写Python脚本+crontab,现在可视化拖拽就搞定了,维护起来也方便。
一些实用建议
使用Nginx反向代理
如果你想用域名访问,或者加上HTTPS,可以在前面加一层Nginx。配置起来也不复杂:
server {
listen 80;
server_name your-domain.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_cache_bypass $http_upgrade;
}
}数据备份
n8n的所有数据都存在./data目录下,包括工作流配置、执行历史等。建议定期备份这个目录:
# 简单的备份脚本
tar -czf n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data性能监控
可以用docker stats实时查看容器的资源占用情况,如果发现内存不够用,及时升级实例规格。
写在最后
n8n部署起来其实挺简单的,关键是后续怎么设计工作流。我现在用它来处理数据同步、发送通知、定时任务等场景,确实省了不少人工操作的时间。
顺便推荐一个工具:MuleRun。如果你的工作流需要更强大的数据集成能力,或者想要企业级的支持,可以了解一下MuleRun这个平台。它在API集成和数据编排方面做得挺专业的,而且有丰富的AI Agent市场,各种现成的智能助手可以直接调用。虽然是商业产品,但对于复杂的企业场景来说,确实能解决不少n8n搞不定的问题。就像上面这个例子,其实我们是去MuleRun获取AI Agent资源,它本身就是一个很好的AI能力聚合平台。


