Huginn 自动化实战:从 Docker 安装到第一条网页监控流水线,半小时上手
【免费下载链接】huginnCreate agents that monitor and act on your behalf. Your agents are standing by!项目地址: https://gitcode.com/gh_mirrors/hu/huginn
Huginn 是一款可以运行在自己服务器上的开源自动化平台,核心思路是让你创建一批名叫 Agent 的"数字帮手",按你预先写好的规则去监视网页、抓取数据、做判断,最后自动推送通知。本文不堆概念,而是用一条"商品价格监控→降价自动通知"的完整流水线,带你从零装好环境、读懂配置,亲眼看着它替你干活。
先讲一个具体的画面:每天早上一到工位,你会先打开几个网页刷新一遍,把有用的信息抄进表格,再在合适的时机给同事发邮件。这种事偶尔做一次还行,天天做就是纯消耗。Huginn 要消灭的正是这种"每天重复的搬运工作"——它把"刷新→判断→通知"整个动作固化成一串自动执行的任务,你只负责定规则,剩下的交给它。
先弄懂两个词:Agent 和 Event
打开 Huginn 的界面之前,只要理解两个概念,后面所有操作都会变得顺理成章。
- Agent(代理):一个独立的任务单元,负责某一件具体的事,比如"每六小时抓取某个网页""当价格低于 500 时放行""把消息推送到手机"。
- Event(事件):在 Agent 之间传递的数据包裹,通常是一个 JSON 对象,里面装着抓到的标题、价格、链接等信息。
把这两个词组合起来,Huginn 的工作方式就像一条工厂流水线:原料(数据)从输入端进来,经过加工工位(筛选、格式化、计算),最后送到包装工位(邮件、推送、文件)。事件沿着有向图从一个 Agent 流向另一个 Agent,你在界面上可以直接看到这条流动路径。
上图就是 Huginn 自带示例场景里的一张事件流图:左侧的天气、新闻类 Agent 产出事件,中间的 Trigger 类 Agent 负责把关,最后汇入日报类 Agent 统一输出。整条链路的每一环都能单独查看、编辑或暂停。
三类零件,拼出绝大多数自动化场景
Huginn 仓库里自带了几十个现成的 Agent,分布在app/models/agents/目录下。数量看着吓人,但按职责分成三类就很好记:
| 类别 | 代表 Agent | 典型用途 |
|---|---|---|
| 输入端(数据源) | WebsiteAgent、RssAgent、WebhookAgent | 定时抓网页、订阅 RSS、接收外部 POST 请求 |
| 加工端(处理逻辑) | TriggerAgent、EventFormattingAgent、JavaScriptAgent | 条件过滤、字段重排、跑自定义 JS 计算 |
| 输出端(通知/存储) | EmailAgent、PushoverAgent、SlackAgent、LocalFileAgent | 发邮件、手机推送、写进本地文件 |
输入端负责"拿到数据",加工端负责"决定值不值得要",输出端负责"把结果送对人"。你规划自动化流程时,就按"抓什么→怎么筛→往哪发"三步来填空,绝大多数需求都能落到这三类里。
上图的"Your Agents"列表是所有 Agent 的大本营:每个代理的运行状态(Working? 是否正常)、最近一次检查和输出时间、事件总数都一目了然。右侧的 Show / Edit / Delete / Run 按钮分别对应查看详情、改配置、删除和手动触发一次。
部署选哪条路:五分钟体验版 vs 正式环境源码版
部署方式有两套,目的不同,别选错。
第一条路:Docker 一键启动,适合先体验
只要机器上有 Docker,一条命令就能把整个系统拉起来:
docker run -it -p 3000:3000 ghcr.io/huginn/huginn这条命令会下载官方镜像并映射 3000 端口。启动完成后浏览器打开http://localhost:3000,用默认账号admin/password登录即可。初次登录时系统里已经预置了一个示例场景(就是上面那张事件流图的来源),你可以先拆开看看别人是怎么搭的。完整的环境变量配置说明在doc/docker/install.md。
第二条路:源码部署,适合长期使用
正式环境推荐从源码装,方便自己控制依赖和升级节奏:
git clone https://gitcode.com/gh_mirrors/hu/huginn cd huginn cp .env.example .env bundle install bundle exec rake db:create db:migrate db:seed bundle exec foreman start这一段命令做的事情依次是:拉取代码、准备配置文件(.env里至少要把APP_SECRET_TOKEN换成随机字符串)、安装 Ruby 依赖、创建并初始化数据库(db:seed会写入示例场景)、最后启动应用。数据库用 MySQL 或 PostgreSQL 都行,配置写在config/database.yml。更详细的步骤见doc/manual/installation.md。
新手最常见的三个卡点提前说:数据库连不上时先检查.env里的数据库账号密码和端口;生产环境报资源错误就执行RAILS_ENV=production bundle exec rake assets:precompile预编译静态资源;Agent 一直不执行,多半是没给它配调度计划,或者去看了log/目录下的日志但没注意到告警信息。
实战:搭一条"价格监控→降价通知"的流水线
环境就绪后,动手搭第一条真正能用的流水线。假设你每天要盯一个商品页,希望在价格低于预算时收到手机推送。
第一步:新建一个 WebsiteAgent 抓取页面
在 Agent 列表页点 New Agent,选择 Website Agent。它的作用是按固定周期抓取目标网页,再用 CSS 选择器把需要的内容抠出来。关键配置如下:
{ "url": "https://example.com/product", "mode": "on_change", "extract": { "name": { "css": "h1", "value": "@text" }, "price": { "css": ".price", "value": "@text" } } }mode设为on_change表示只在页面内容发生变化时才产生新事件,避免数据没变也反复打扰下游;extract里定义了要提取的字段和对应的选择器。这个 Agent 在新建表单里就能直接填,填完先点 Dry Run 试跑一次,确认抓到的数据是想要的再保存。
上图是新建 Agent 的表单页面,类型选择、选项 JSON、调度计划都在这里配置。表单底部通常有一栏说明文档,来源就是该 Agent 源码顶部的描述,写得很详细,拿不准参数含义时可以现场查。
第二步:用 TriggerAgent 做降价判断
抓回的数据里既有高价也有低价,不可能每次变化都通知。加一个 Trigger Agent,规则是"价格低于 500 才放行":
{ "rules": [ { "type": "field<value", "value": "500", "path": "price" } ], "message": "心仪商品降价了,当前价格 {{ price }}" }Trigger Agent 的rules支持field<value、field==value、regex等多种比较方式,多个规则默认要全部满足才触发。命中后,它会把message里的内容作为新事件发给下游,其中{{ price }}是 Liquid 模板语法,会自动替换成事件里的实际值。
第三步:接上 PushoverAgent 推送手机
最后挂一个 Pushover Agent 接收降价事件,把它变成一条手机推送:
{ "token": "你的应用API令牌", "user": "你的用户或群组密钥", "message": "{{ message }}" }至此整条链路已经闭合:WebsiteAgent 定时抓页面 → TriggerAgent 判断是否跌破 500 → PushoverAgent 推送提醒。把这三个 Agent 的"Link"连接起来,一个能自主工作的监控流程就上线了。如果不想用 Pushover,把最后一步换成 EmailAgent、SlackAgent 或者 TelegramAgent 都可以,思路完全一致。
让流水线按你的节奏跑:定时与数据保鲜
大多数 Agent 的"多久跑一次"由两个地方控制。
一是调度计划。Agent 表单里可以选择内置档位(如every_5h),也可以自定义 cron 表达式。想用 SchedulerAgent 在每天 22 点批量触发一批代理,可以这样写:
0 22 * * 1-5这段 cron 表示工作日每晚 22 点整执行一次。SchedulerAgent 支持时区后缀(比如0 22 * * 1-5 Europe/Paris),还支持"每月最后一个工作日"这类进阶写法,细节都在app/models/agents/scheduler_agent.rb的说明里。
二是事件保留策略。每个 Agent 都可以设置keep_events_for,按秒计算,比如172800表示保留两天。合理设置这个值,让旧数据自动过期,能显著控制数据库体积,系统跑久了也不会越拖越慢。
上图的 PeakDetectorAgent 是加工端的一个进阶范例:它接收高频事件流,用算法识别"讨论量突然飙升"的尖峰,一旦触发就发通知。如果你的数据处理需求更复杂——比如多字段计算、外部 API 调用——可以改用 JavaScriptAgent 直接写函数处理,或参考app/models/agents/event_formatting_agent.rb里的模板字段做格式化输出。
长期运行,这几件小事值得养成习惯
- 更新代码:Huginn 迭代很快,定期
git pull拉取最新代码,再执行bundle exec rake db:migrate同步数据库结构。 - 关注状态列:Agent 列表里的 Working? 一列如果出现非 YES 的标记,点进详情看日志定位原因,别让坏掉的代理悄悄吞掉数据。
- 留好备份:自动化跑久了,Agent 配置和数据都是资产,数据库定期备份比事后重建省心得多。
- 按需扩展:第三方代理通过环境变量
ADDITIONAL_GEMS加载,比如想接更多平台就在.env里追加对应的 gem 名称。
现在就可以做的第一步
不要急着读完所有文档,先花五分钟做这件事:在装有 Docker 的机器上跑一遍docker run -it -p 3000:3000 ghcr.io/huginn/huginn,用admin/password登录,打开预置的示例场景,沿着事件流图把每个 Agent 的配置逐个点开看一遍。看懂别人搭的链路,比背任何教程都快。
看完示例后,再用本文的价格监控三件套(WebsiteAgent → TriggerAgent → PushoverAgent)搭一条属于你自己的流水线。想深入研究时,doc/manual/里有完整的安装与运维手册,app/models/agents/里每个 Agent 源码自带英文说明文档,那才是最权威的参考。
【免费下载链接】huginnCreate agents that monitor and act on your behalf. Your agents are standing by!项目地址: https://gitcode.com/gh_mirrors/hu/huginn
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考