RSS 一站式指南

RSS 获取全记录,从服务端部署到客户端设置。

#docker

RSS 一站式指南

前言#

Google Reader 在 2013 年的下线似乎标志着 RSS 黄金时代的结束。在那之后,虽然陆续出现过很多替代品,但 RSS 的地位已经被无限刷新的信息流、算法推荐等新技术逐渐取代了 (来自 少数派文章)。

虽然 RSS 服务对用户要求较高,逐渐被各种各样的平台替代,但其信息来源灵活,对有一定动手能力的用户的来说利大于弊。因此本文记录自建 RSS 源获取、管理工具的流程,免得后续忘记需要重新翻找文档。

RSSHub#

首先是 RSS 订阅获取,这里推荐著名的 RSSHubGitHub 地址如下:

RSSHub

详细的说明可以在 项目文档 找到,下面是服务器部署的方式:

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:/data
volumes:
redis-data: null
networks: {}

个人建议在配置中写入访问限制设置,以免别人盗用你的地址,将 ACCESS_KEY 后替换为自己的密码即可。

配置好后访问密钥 key 可直接访问所有路由,例如:https://rsshub.app/qdaily/column/59?key=ILoveRSSHub

也可以通过 md5 生成访问码访问,官方的文档说明如下:访问控制配置

之前可以部署到 Vercel 平台,但是新版本部署出现问题,只能部署以前的分支,不过目前开发者在重写项目,可以等项目重构后再部署到 Vercel 等。

RSSHub Radar#

除了项目支持的链接外,你也可以通过 RSSHub Radar 工具来显示当前页面的订阅,工具的地址如下:

其他 RSS 源推荐

推荐两个其他的 RSS 订阅获取地址:

RSS 订阅管理#

获取到订阅源后就需要管理订阅,目前如 FeedlyInoreader 等等都是非常不错服务商,比如 Inoreader 可以非常详细地自定义筛选订阅规则,如去重等,就是不免费,所以可以尝试自建管理工具,这里推荐两个开源的项目:FreshRSSMiniflux

FreshRSS#

FreshRSS 是一个轻量、自托管的 Feed 聚合器,支持插件系统,部分应用如 Reeder

就支持直接添加 FreshRSS 账户,项目地址如下:

FreshRSS

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 数据库,同时也支持图片代理,项目地址如下:

miniflux

miniflux

部署如下:

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 APIFever API 后续可能会不支持。

前端项目#

这里推荐两个前端项目优化 web 阅读体验。

第一个项目只需要在 Minuflux 中添加自定义 CSS,访问 style.mini.css 复制代码。

ReactFlux 是一个防 Reeder 的前端项目,可以自己部署页面到 Cloudflare Pages 或者 Vercel,也可以使用官方提供的 示例页面,推荐使用 API Token 登录。

iOS 客户端推荐#

防盗链设置#

个别订阅源会设置图片防盗链,导致在网页或者客户端加载不出图片,比如少数派。

Q: 为什么 RSSHub 里的图片 / 视频加载不出来?

A: RSSHub 里的图片 / 视频地址都是源站地址,部分有防盗链,所以 RSSHub 给图片加了 referrerpolicy="no-referrer" 属性来防止跨域问题,但部分 RSS 服务会自作主张去掉这个属性,如 Feedly、Inoreader,在它们的网页端图片会触发跨域加载不出来。同时,视频目前没有类似的属性,因此大部分阅读器都无法通过防盗链检查。

这是 RSSHub 文档的描述:为什么 RSSHub 里的图片 / 视频加载不出来?

同样提供了解决方法可以通过一些油猴脚本解决网页观看问题,脚本1 脚本2,或者使用代理解决:多媒体处理,不过我用不明白,好在在另一篇 文章 中得到灵感,可以直接用 Surge 修改 Header 中的 referer,方便快捷。

如果你使用的是 Miniflux,官方预设了一些常用网站的 重写规则,少数派的规则设置只需要在 源设置-URL重写规则 添加下面内容即可:

Terminal window
regexp.MustCompile(`^https://cdnfile\.sspai\.com`)

如果你不是自建 RSS 服务,可以通过一些软件实现,这是我自用的 Surge 模块,你可以参考适应自己的需求。

更加丰富的过滤、重写、刮削规则可以参考文档:Filter, Rewrite and Scraper Rules

参考文献#

版权许可

CC BY-NC-SA 4.0 许可协议。

相关文章