RSS 一站式指南
前言#
Google Reader在 2013 年的下线似乎标志着RSS黄金时代的结束。在那之后,虽然陆续出现过很多替代品,但RSS的地位已经被无限刷新的信息流、算法推荐等新技术逐渐取代了 (来自 少数派文章)。
虽然 RSS 服务对用户要求较高,逐渐被各种各样的平台替代,但其信息来源灵活,对有一定动手能力的用户的来说利大于弊。因此本文记录自建 RSS 源获取、管理工具的流程,免得后续忘记需要重新翻找文档。
RSSHub#
首先是 RSS 订阅获取,这里推荐著名的 RSSHub,GitHub 地址如下:
详细的说明可以在 项目文档 找到,下面是服务器部署的方式:
version: "3.9"services: rsshub: # two ways to enable puppeteer: # * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled # * (consumes more disk space and memory) leave everything unchanged image: diygod/rsshub restart: always ports: - 1200:1200 environment: NODE_ENV: production CACHE_TYPE: redis REDIS_URL: redis://redis:6379/ PUPPETEER_WS_ENDPOINT: ws://browserless:3000 # marked # ACCESS_KEY: password # 访问限制密钥 depends_on: - redis - browserless # marked browserless: # marked image: browserless/chrome # marked restart: always # marked ulimits: # marked core: # marked hard: 0 # marked soft: 0 # marked redis: image: redis:alpine restart: always volumes: - redis-data:/datavolumes: redis-data: nullnetworks: {}个人建议在配置中写入访问限制设置,以免别人盗用你的地址,将 ACCESS_KEY 后替换为自己的密码即可。
配置好后访问密钥 key 可直接访问所有路由,例如:https://rsshub.app/qdaily/column/59?key=ILoveRSSHub
也可以通过 md5 生成访问码访问,官方的文档说明如下:访问控制配置
之前可以部署到
Vercel平台,但是新版本部署出现问题,只能部署以前的分支,不过目前开发者在重写项目,可以等项目重构后再部署到Vercel等。
RSSHub Radar#
除了项目支持的链接外,你也可以通过 RSSHub Radar 工具来显示当前页面的订阅,工具的地址如下:
其他 RSS 源推荐
推荐两个其他的 RSS 订阅获取地址:
RSS 订阅管理#
获取到订阅源后就需要管理订阅,目前如 Feedly、Inoreader 等等都是非常不错服务商,比如 Inoreader 可以非常详细地自定义筛选订阅规则,如去重等,就是不免费,所以可以尝试自建管理工具,这里推荐两个开源的项目:FreshRSS 和 Miniflux
FreshRSS#
FreshRSS 是一个轻量、自托管的 Feed 聚合器,支持插件系统,部分应用如 Reeder
就支持直接添加 FreshRSS 账户,项目地址如下:

部署如下:
version: "3"services: freshrss: image: freshrss/freshrss:latest container_name: freshrss hostname: freshrss-app restart: always ports: - '8010:80' volumes: - ./data:/var/www/FreshRSS/data - ./extensions:/var/www/FreshRSS/extensions environment: CRON_MIN: '*/20' # 刷新频率 TZ: Asia/Shanghai后续如果需要在 APP 使用,需要在首先在 账户管理 页面的 API 管理中 设置一个 API 密码,随后在 账户设置-管理-认证 中打开 允许 API 访问 开关。
Minuflux#
Miniflux 相比 FreshRSS 更加轻量,使用 Postgresql 数据库,同时也支持图片代理,项目地址如下:

部署如下:
services: miniflux: image: ${MINIFLUX_IMAGE:-miniflux/miniflux:latest} container_name: miniflux depends_on: miniflux-db: condition: service_healthy environment: - DATABASE_URL=postgres://miniflux:secret@miniflux-db/miniflux?sslmode=disable - RUN_MIGRATIONS=1 - FETCH_YOUTUBE_WATCH_TIME=1 - CREATE_ADMIN=1 - ADMIN_USERNAME=admin #登录用户名 - ADMIN_PASSWORD=admin_password #登录密码 - BASE_URL=https://miniflux.grew.cc #阅读器的域名 - POLLING_FREQUENCY=120 #每个 feed 的刷新间隔(分钟) - POLLING_PARSING_ERROR_LIMIT=3 #拉取出错后最大重试次数,超出后需要手动更新,0为不限制 - BATCH_SIZE=100 #每次拉取的 feed 数量 - POLLING_SCHEDULER=entry_frequency #拉取类型,根据上周的平均更新周期来拉取 - SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL=1440 #接上条,feed平均更新周期的最大间隔,单位分钟,代表即使某feed更新周期为一个月,1440分钟仍会拉去更新 - MEDIA_PROXY_MODE=all #图片代理功能,Miniflux 先把源端的图片缓存到服务器上来,后续就不用客户端去源服务器拉了 - MEDIA_PROXY_PRIVATE_KEY=password # 使用客户端缓存过文章,然后某个时间重启了 docker 实例,那么会导致图片无法显示的情况,这是因为每次重启会随机生成 PROXY_PRIVATE_KEY,所以可以增加参数 PROXY_PRIVATE_KEY 固化 key ,便于解决更新、重启等场景下的图片显示问题。 - DATABASE_MAX_CONNS=20 #数据库连接数,对于多图片的 feed 非常有效,可以大幅提升加载和访问速度 - DATABASE_MIN_CONNS=5 # 同上 - WORKER_POOL_SIZE=10 #默认 restart: unless-stopped ports: - "6800:8080"
miniflux-db: image: postgres:12.1-alpine container_name: miniflux-db environment: - POSTGRES_USER=miniflux - POSTGRES_PASSWORD=secret - TZ=Asia/Shanghai volumes: - ./miniflux-db:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "miniflux"] interval: 10s start_period: 30s restart: unless-stopped
tidyflux: image: pehzerov/tidyflux:latest container_name: tidyflux ports: - "8812:8812" depends_on: miniflux: condition: service_started environment: - PORT=8812 - TZ=Asia/Shanghai - MINIFLUX_URL=http://miniflux:8080 - MINIFLUX_USERNAME=admin - MINIFLUX_PASSWORD=admin_password volumes: - ./tidyflux_data:/app/server/data restart: unless-stopped在客户端使用同样需要打开 API 开关并设置密码,推荐使用 Google Reader API,Fever API 后续可能会不支持。
前端项目#
这里推荐两个前端项目优化 web 阅读体验。
第一个项目只需要在 Minuflux 中添加自定义 CSS,访问 style.mini.css 复制代码。
ReactFlux 是一个防 Reeder 的前端项目,可以自己部署页面到 Cloudflare Pages 或者 Vercel,也可以使用官方提供的 示例页面,推荐使用 API Token 登录。
iOS 客户端推荐#
- Reeder,体验流畅,缺点是收费且不支持中文,新版成为了订阅制,并且不支持导入自建服务端。
- NetNewsWire,免费。
- feeeed,卡片式阅读,可以避免红点轰炸,像浏览社交媒体一样,支持设备 AI。
防盗链设置#
个别订阅源会设置图片防盗链,导致在网页或者客户端加载不出图片,比如少数派。
Q: 为什么 RSSHub 里的图片 / 视频加载不出来?
A: RSSHub 里的图片 / 视频地址都是源站地址,部分有防盗链,所以 RSSHub 给图片加了
referrerpolicy="no-referrer"属性来防止跨域问题,但部分 RSS 服务会自作主张去掉这个属性,如 Feedly、Inoreader,在它们的网页端图片会触发跨域加载不出来。同时,视频目前没有类似的属性,因此大部分阅读器都无法通过防盗链检查。
这是 RSSHub 文档的描述:为什么 RSSHub 里的图片 / 视频加载不出来?
同样提供了解决方法可以通过一些油猴脚本解决网页观看问题,脚本1 脚本2,或者使用代理解决:多媒体处理,不过我用不明白,好在在另一篇 文章 中得到灵感,可以直接用 Surge 修改 Header 中的 referer,方便快捷。
如果你使用的是 Miniflux,官方预设了一些常用网站的 重写规则,少数派的规则设置只需要在 源设置-URL重写规则 添加下面内容即可:
regexp.MustCompile(`^https://cdnfile\.sspai\.com`)如果你不是自建 RSS 服务,可以通过一些软件实现,这是我自用的 Surge 模块,你可以参考适应自己的需求。
更加丰富的过滤、重写、刮削规则可以参考文档:Filter, Rewrite and Scraper Rules。