Google Reader
在 2013 年的下线似乎标志着 RSS
黄金时代的结束。在那之后,虽然陆续出现过很多替代品,但 RSS
的地位已经被无限刷新的信息流、算法推荐等新技术逐渐取代了(来自少数派文章)。
虽然 RSS
服务对用户要求较高,逐渐被各种各样的平台替代,但其信息来源灵活,对有一定动手能力的用户的来说利大于弊。因此本文记录自建 RSS
源获取、管理工具的流程,免得后续忘记需要重新翻找文档。
首先是 RSS
订阅获取,这里推荐著名的 RSSHub
,GitHub
地址如下:
RSSHub
详细的说明可以在项目文档找到,下面是服务器部署的方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| 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
工具来显示当前页面的订阅,如下图:
工具的地址如下:
其他 RSS 源推荐
推荐两个其他的 RSS
订阅获取地址:
获取到订阅源后就需要管理订阅,目前如 Feedly
、Inoreader
等等都是非常不错服务商,比如 Inoreader
可以非常详细地自定义筛选订阅规则,如去重等,就是不免费,所以可以尝试自建管理工具,这里推荐两个开源的项目:FreshRSS
和 Miniflux
FreshRSS
是一个轻量、自托管的 Feed
聚合器,支持插件系统,部分应用如 Reeder
就支持直接添加 FreshRSS
账户,项目地址如下:
FreshRSS
部署如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| 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
部署如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| version: '3.4'
services:
miniflux:
image: ${MINIFLUX_IMAGE:-miniflux/miniflux:latest}
container_name: miniflux
depends_on:
- db
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- FETCH_YOUTUBE_WATCH_TIME=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin #登录用户名
- ADMIN_PASSWORD=adminpassword #登录密码
- BASE_URL=https://rss.example.com #阅读器的域名
- POLLING_FREQUENCY=10 #每个 feed 的刷新间隔
- POLLING_PARSING_ERROR_LIMIT=0 #拉取出错后不会停止拉去,还是会按计划继续拉
- BATCH_SIZE=100 #每次拉取的 feed 数量
- POLLING_SCHEDULER=entry_frequency #拉取类型,根据上周的平均更新周期来拉取
- SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL=30 #接上条,但也不会大于 30 分钟,建议和 POLLING_FREQUENCY 参数一起来看
- MEDIA_PROXY_MODE=all #图片代理功能,Miniflux 先把源端的图片缓存到服务器上来,后续就不用客户端去源服务器拉了
- MEDIA_PROXY_PRIVATE_KEY=password # 使用客户端缓存过文章,然后某个时间重启了 docker 实例,那么会导致图片无法显示的情况,这是因为每次重启会随机生成 PROXY_PRIVATE_KEY,所以可以增加参数 PROXY_PRIVATE_KEY 固化 key ,便于解决更新、重启等场景下的图片显示问题。
- DATABASE_MAX_CONNS=50 #增加数据库连接数,对于多图片的 feed 非常有效,可以大幅提升加载和访问速度
- DATABASE_MIN_CONNS=5 # 同上
- WORKER_POOL_SIZE=10 #默认,或适当加大
restart: unless-stopped
ports:
- "6800:8080"
db:
image: postgres:15
container_name: postgres
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
volumes:
- ./miniflux-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
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
防盗链设置#
个别订阅源会设置图片防盗链,导致在网页或者客户端加载不出图片,比如少数派。
Q: 为什么 RSSHub 里的图片 / 视频加载不出来?
A: RSSHub 里的图片 / 视频地址都是源站地址,部分有防盗链,所以 RSSHub 给图片加了 referrerpolicy="no-referrer"
属性来防止跨域问题,但部分 RSS 服务会自作主张去掉这个属性,如 Feedly、Inoreader,在它们的网页端图片会触发跨域加载不出来。同时,视频目前没有类似的属性,因此大部分阅读器都无法通过防盗链检查。
这是 RSSHub
文档的描述:为什么 RSSHub 里的图片 / 视频加载不出来?
同样提供了解决方法可以通过一些油猴脚本解决网页观看问题,脚本1 脚本2,或者使用代理解决:多媒体处理,不过我用不明白,好在在另一篇文章中得到灵感,可以直接用 Surge
修改 Header
中的 referer
,方便快捷。
这是我自用的 Surge 模块,可以跳过少数派的防盗链,你可以参考适应自己的需求,如果是网页端,可以使用上面提到的文章的方法。
参考文献#