# 这周我用 n8n + Ollama 搭了个本地自动化助手,结果它真帮我把每天的新闻和日志处理完了
这周一我盯着满屏幕的 RSS 订阅源和一堆没看的新闻,突然冒出一个想法:能不能让 AI 帮我把这些消化掉,早上起来只看一份整理好的摘要?
于是折腾了几天。中间踩了不少坑,但最后效果确实不错。记录一下整个过程。
周一:装 n8n
之前已经装过 Ollama,模型用的 qwen2.5:7b,跑起来没问题。这次就差一个工作流引擎。
mkdir -p /opt/n8n && cd /opt/n8ncat > docker-compose.yml << 'EOF'
version: "3.8"
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
volumes:
- n8n-data:/home/node/.n8n
environment:
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
volumes:
n8n-data:
EOF
docker compose up -d
装完打开 http://IP:5678,注册账号,进去了。界面长这样——左边一堆节点,右边画布,跟搭积木差不多。
第一个想法很简单:每天早上 8 点,抓几条新闻,让 AI 总结一下发给我。
周二:踩坑——n8n 连不上 Ollama
我加了个 Ollama 节点,填了 http://localhost:11434,一点测试——连不上。
折腾了半天才想起来:n8n 跑在 Docker 里,localhost 指向的是容器自己,不是宿主机。
解决:
# 查看 Docker 网关地址
docker network inspect bridge --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}'
# 输出:172.17.0.1
然后 n8n 里 Ollama 的 URL 改成 http://172.17.0.1:11434。
但还连不上。又查了一下——Ollama 默认只监听 127.0.0.1,外面访问不到。
# 改 Ollama 配置,监听所有接口
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
EOF
systemctl daemon-reload && systemctl restart ollama
这下通了。测试一下:
curl http://172.17.0.1:11434/api/generate -d '{"model":"qwen2.5:7b","prompt":"你好","stream":false}'
返回了正常响应。踩了两个坑,浪费半天。
周三:搭第一个工作流——新闻摘要
思路:Schedule 定时 → RSS 抓取 → AI 总结 → 通知。
具体节点:
1. Schedule 触发器
- 时间:每天早上 8:00
- 时区:Asia/Shanghai
- 填入几个常看的 RSS 地址
- 每条取标题和摘要
- Schedule:每天 22:00
- Execute Command:跑上面的脚本
- Ollama Chat:分析日志,找出需要关注的问题
- 通知:有异常才发,没问题就不打扰
- 模型用 phi3:3.8b 或 qwen2.5:3b,内存占用 2~3G
- n8n 限制 512MB 内存,执行记录保存天数设短一点
- 工作流别设太频繁,新闻摘要每天 1~2 次就够了
- Ollama 和 n8n 分开部署的话,可以放在不同机器上
2. RSS Feed Read 节点
3. Code 节点(数据预处理)
RSS 抓回来是列表,需要拼成一段话给 AI:
// 把多条 RSS 合并成一段文本
const items = $input.all();
const text = items.map(item => {
return 标题:${item.json.title}n摘要:${item.json.contentSnippet || ''};
}).join('nn
nn');return [{ json: { combined_text: text, count: items.length } }];
4. Ollama Chat 节点
System Prompt:
你是一个新闻摘要助手。以下是今天的几条新闻,请用简洁的中文总结每条的核心内容,
按类别分组(科技/财经/国际/其他),每条一句话。总字数控制在 500 字以内。
User Message 填上一步的 {{ $json.combined_text }}。
5. Telegram Bot 通知
用 Telegram Bot 发给我(飞书/邮件/钉钉都行)。消息内容填 AI 的回复。
完整流程:
Schedule (8:00)
→ RSS Feed Read (3个源)
→ Code (合并文本)
→ Ollama Chat (总结)
→ Telegram Bot (发送)
第一次跑的时候,等了大概 15 秒,手机收到消息了。AI 把 10 条新闻分成了 4 类,每条一句话,看起来清爽多了。
周四:第二个——服务器日志分析
每天看日志太烦了。干脆让 AI 帮我看。
先写个脚本提取关键信息:
cat > /opt/n8n/log-analyzer.sh << 'SCRIPT'
#!/bin/bash
# 提取昨天的关键日志echo "=== Nginx 错误 (昨天) ==="
yesterday=$(date -d "yesterday" +%Y/%m/%d)
grep "$yesterday" /var/log/nginx/error.log | tail -20
echo ""
echo "=== 系统异常 ==="
grep -i "error|fail|kill|oom" /var/log/syslog | tail -20
echo ""
echo "=== 磁盘 ==="
df -h / | tail -1
echo ""
echo "=== 内存峰值 ==="
echo "昨日最高内存使用: $(cat /proc/meminfo | grep MemTotal)"
SCRIPT
chmod +x /opt/n8n/log-analyzer.sh
n8n 里加一个工作流:
Ollama 的 System Prompt:
你是运维助手。分析以下日志,如果有异常(服务崩溃、磁盘不足、OOM 等),
列出问题和修复建议。如果一切正常,回复"今日日志正常",不需要展开。
跑了两天,第一天确实抓到了一个 Nginx 的 upstream 超时问题,AI 建议检查后端服务的响应时间,顺藤摸瓜找到了一个慢查询。
周五:踩坑——n8n 自己占了太多内存
周五早上看服务器,发现 n8n 占了 800MB 内存。我一共就 24G,倒是不紧张,但跑在 8G 机器上就够呛了。
查了一下,n8n 默认把所有执行记录都存在内存里。改一下:
# docker-compose.yml 里加环境变量
environment:
- EXECUTIONS_MODE=database
- DB_TYPE=sqlite
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
再加上资源限制:
deploy:
resources:
limits:
memory: 512M
改完重启,内存降到 300MB 左右。
另外,工作流如果设置了”保存执行记录”,数据会越积越多。建议在 n8n 设置里把 保存天数 改成 3~7 天,自动清理。
周末:把几个工作流串起来
有了新闻和日志两个工作流,周末又把之前做的服务器监控工作流也加进来了。现在每天的时间线是这样的:
| 时间 | 工作流 | 作用 |
|
|
–|
|
| 8:00 | 新闻摘要 | 抓 RSS,AI 总结,发我手机 |
| 12:00 | 邮件检查 | 有新邮件自动分类摘要 |
| 18:00 | 服务器巡检 | CPU/内存/磁盘/服务状态 |
| 22:00 | 日志分析 | 分析当天日志 |
四个工作流,全部跑在本地。
给小内存机器的建议
如果你跑在 8G 或更小的机器上:
总结
折腾了一周,几个感受:
1. n8n 上手不难,画布式的界面比写代码直观,但第一次连本地 Ollama 确实会踩坑
2. 本地 AI 够用——qwen2.5:7b 做摘要、分类、简单分析完全没问题,就是速度慢点(5~15 秒一次)
3. 自动化这东西,一旦跑起来就停不下来了——我现在已经开始想把 RSS 换成微信公众号了……
下一篇打算写写沙箱和长期记忆的方案。AI 光会总结还不够,得能”记住”之前的事,并且安全地执行一些操作。到时候再聊。