从想法到落地:搭建自己的 RSS 订阅聚合服务

目录

最近萌生了一个想法:做一个全平台订阅聚合软件。从市场调研到最终部署,整个过程让我重新认识了 RSS 的价值。


🎯 起因:时间被压缩了

打开手机,刷一会儿抖音、看一会儿 YouTube、翻一会儿今日头条……一个小时过去了,什么都没看到。

算法推荐一堆“可能感兴趣”的内容,其实大部分都是无意义的噪音。加上多个平台频繁切换,时间被切得更碎。真正想关注的东西,反而没时间看。

我想要的很简单:只看我真正关心的,其他的一概不要。


📊 市场调研:RSS 还活着吗?

带着这个想法做了一些调研,结果挺出乎意料:

RSS 阅读器市场现状

  • 全球 RSS 阅读器市场 2023 年估值约 50 亿美元,预计以 7% CAGR 增长
  • RSS 阅读器采用率同比增长 34%,隐私意识用户正在逃离算法推荐
  • Feedly 拥有超过 1500 万用户

主流竞品

产品 类型 价格
Feedly 商业托管 免费/Pro $6/月
Inoreader 商业托管 $1.67/月起
NewsBlur 开源 $1/月
FreshRSS 开源自托管 免费
Miniflux 开源自托管 免费

为什么不做"账号绑定聚合"?

最初的想法是绑定用户在各平台(YouTube、今日头条等)的账号,自动同步订阅列表。技术上能做,但以我的角度看,这种产品的 ROI 非常低。

先满足我自己的需求再说。现有的 RSS 已经够用了:

  • YouTube 有 RSS
  • 播客有 RSS
  • 博客有 RSS
  • 抖音/今日头条?真正想订阅的内容……仔细想想,一个都没有 😂

既然 RSS 能覆盖我 90% 的需求,何必折腾那剩下的 10%?


🔧 技术选型:FreshRSS vs Miniflux

既然决定自托管,就得选一个靠谱的开源方案。主要对比了 FreshRSS 和 Miniflux:

维度 FreshRSS Miniflux
后端语言 PHP Go
数据库 SQLite/MySQL/PostgreSQL PostgreSQL only
API Google Reader API + Fever API 原生 REST API
插件系统 ✅ 丰富 ❌ 无
网页抓取 ✅ XPath 原生支持 ⚠️ 需配合 RSS-Bridge
许可证 AGPL-3.0 Apache 2.0
适合场景 功能丰富,多用户 极简主义,个人使用

最终选择 FreshRSS,因为:

  1. 功能更丰富,支持网页抓取
  2. 客户端生态更好
  3. 多用户支持完善(以后可以给家人用)

🚀 部署过程

服务器环境

手上有一台 Oracle Cloud 的免费 VPS:

  • Ubuntu 20.04
  • 1GB 内存
  • 45GB 磁盘

安装 Docker

sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

部署 FreshRSS

一行命令搞定:

docker run -d \
  --name freshrss \
  -p 8081:80 \
  -v freshrss_data:/var/www/FreshRSS/data \
  -v freshrss_extensions:/var/www/FreshRSS/extensions \
  --restart unless-stopped \
  freshrss/freshrss

配置 Nginx 反向代理

server {
    listen 80;
server_name rss.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8081;
        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;
    }
}

配置 Cloudflare

  1. DNS 添加 A 记录:rss → 服务器 IP
  2. 开启代理(橙色云朵)
  3. SSL/TLS 模式设为 灵活 (Flexible)

🔥 踩坑记录

坑 1:Oracle Cloud 防火墙

服务跑起来了,但外网访问不了。原来 Oracle Cloud 有两层防火墙:

  1. iptables(系统层):需要开放端口
  2. 安全组(云平台层):也需要开放端口

解决方案:

# iptables 开放端口
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT

同时在 Oracle Cloud 控制台的安全列表里添加入站规则。

坑 2:Cloudflare 523 错误

配置好 Cloudflare 后,访问域名报 523 (Origin is unreachable)。

原因:SSL 模式设成了 完全 (Full),Cloudflare 尝试用 HTTPS 连接源服务器,但服务器没有 SSL 证书。

解决方案:SSL 模式改成 灵活 (Flexible)

坑 3:本地代理劫持 DNS

最诡异的问题:服务器一切正常,但浏览器就是打不开。

排查后发现是本地代理软件(Shadowrocket)劫持了 DNS,把域名解析到了假 IP。

解决方案:在代理规则里添加直连:

DOMAIN-SUFFIX,yourdomain.com,DIRECT

坑 4:订阅不自动刷新

部署完发现订阅源不会自动更新,必须手动刷新。

原因:FreshRSS 官方 Docker 镜像默认不启用自动刷新,需要通过环境变量 CRON_MIN 来配置。

解决方案:重新创建容器,加上 CRON_MIN 参数:

docker run -d \
  --name freshrss \
  -p 8081:80 \
  -e CRON_MIN='*/15' \
  -v freshrss_data:/var/www/FreshRSS/data \
  -v freshrss_extensions:/var/www/FreshRSS/extensions \
  --restart unless-stopped \
  freshrss/freshrss

*/15 表示每 15 分钟自动刷新一次。数据存在 volume 里,重建容器不会丢失。


📱 客户端配置

FreshRSS 支持多种客户端通过 API 连接:

平台 客户端
iOS/macOS NetNewsWire
Android Read You / FeedMe
Windows Fluent Reader
Linux NewsFlash

NetNewsWire 配置

  1. 添加账户 → 选择 FreshRSS URL:https://rss.yourdomain.com
  2. 用户名:FreshRSS 用户名
  3. 密码:API 密码(在 FreshRSS 设置 → 认证 里设置)

💡 RSS 源推荐

配置好后,开始添加订阅源。这里分享一些高质量的 RSS:

YouTube 频道

YouTube 频道的 RSS 格式:

https://www.youtube.com/feeds/videos.xml?channel_id=频道ID

找频道 ID:打开频道页面 → 右键查看源代码 → 搜索 channel_id

科技/AI

# Hacker News
https://hnrss.org/frontpage

# OpenAI
https://openai.com/blog/rss/

# Anthropic
https://www.anthropic.com/rss.xml

财经

# Bloomberg
https://feeds.bloomberg.com/markets/news.rss

# 36氪
https://36kr.com/feed

🎯 最大的收获

部署完成后,我把 YouTube 订阅导入了 FreshRSS。

100+ 订阅 → 筛选出真正想看的 → 只剩十几个

再看抖音关注列表,发现竟然一个都不想加到 RSS 里

这就是 RSS 的价值:帮你认清什么才是真正重要的内容。

算法喂给你的,和你主动想追的,完全是两回事。


📝 总结

阶段 内容
调研 RSS 市场活跃,自托管方案成熟
选型 FreshRSS(功能丰富)> Miniflux(极简)
部署 Docker 一行命令,Nginx 反向代理,Cloudflare CDN
踩坑 防火墙、SSL 模式、代理劫持
收获 信息过载 → 精简订阅 → 专注阅读

搭完之后,终于可以把时间花在真正想看的内容上了,而不是被算法牧着走。

优化人生,all in one 😄