自建RSS信息聚合服务

1. RSS现状

RSS介绍,摘自WIKI百科:

RSS(全称:RDF Site Summary;Really Simple Syndication),中文译作简易信息聚合,也称聚合内容,是一种消息来源格式规范,用以聚合经常发布更新资料的网站,例如博客文章、新闻、音频或视频的网摘。RSS文件(或称做摘要、网络摘要、或频更新,提供到频道)包含全文或是节录的文字,再加上发布者所订阅之网摘资料和授权的元数据。简单来说 RSS 能够让用户订阅个人网站个人博客,当订阅的网站有新文章时能够获得通知。

RSS摘要可以借由RSS阅读器、feed reader或是aggregator等网页或以桌面为架构的软件来阅读。标准的XML档式可允许信息在一次发布后透过不同的程序阅览。用户借由将网摘输入RSS阅读器或是用鼠标点取浏览器上指向订阅程序的RSS小图标之URI(非通常称为URL)来订阅网摘。RSS阅读器定期检阅是否有更新,然后下载给监看用户界面。

RSS的黄金年代早已随着2013年Google Reader的下线而逝去,随之而来的是各种聚合类新闻APP,它们利用实时推送提高了信息传递的速度,利用推荐算法实现了信息传递的精准度。然而在这个信息爆炸的时代,良莠不齐的内容、低俗偏激的评论,大数据+人工智能精心打造的信息茧房真的适合人们去阅读去思考吗?

对信息来源、信息内容、信息实时性有要求,希望操作界面简单、适合阅读、跨平台。在2021年,利用RSS打造这样一个信息聚合服务,依然是小众之选,但却可以获得更纯粹的阅读体验。

目前市面上依然活跃的RSS服务当属Feedly和Inoreader:

  • 均为国外产品,国内处于被墙状态。
  • 均有免费版。免费版订阅源更新较慢,普遍为小时级。此外Inoreader免费版有广告。
  • Feedly资费:6$/12$/month, Inoreader资费:1.67$/5.83$/month.
  • 个人更喜欢Feedly的移动端界面交互。

如果不愿意折腾,又有梯子,个人更建议使用成熟的第三方RSS服务。但我个人有轻量云服务器,所以最终选择使用RSSHUB+TTRSS自建RSS服务。

2. 资源清单

  • 基础设施
    • 阿里云/腾讯云 轻量云服务器 2vCPU/4G内存/80G硬盘/30M带宽(仅供参考)
    • 阿里云 域名
  • 系统环境
    • Ubuntu 20.04
  • 软件工具
    • docker / docker-compose:用于部署RSSHUB、TTRSS
    • Nginx:用于反向代理
    • acme.sh:用于生成SSL证书
    • RSSHub:用于生产RSS Feed
    • Awesome-TTRSS:用于搭建RSS服务

3. 域名与SSL证书

  • 域名

    • RSSHub域名拟定为:rss.yyyy.zz
    • TTRSS域名拟定为:hub.yyyy.zz
  • RAM账号

    • 阿里云“访问控制”
    • 创建用户并赋予权限“AliyunDNSFullAccess”
    • 创建AccessKey,记住AK和SK
  • SLL证书

    • 使用Docker启动acme.sh,因为是daemon模式,容器会以最小资源保持运行,以便定期自动刷新证书

      1
      2
      3
      4
      5
      6
      7
      8
      # 替换AK、SK
      # 可修改挂载卷目录 /home/ubuntu/acme ,用于存放证书
      docker run --rm -itd \
      -v /home/ubuntu/acme:/acme.sh \
      -e Ali_Key="AK" \
      -e Ali_Secret="SK" \
      --name=acme.sh \
      neilpang/acme.sh daemon
    • 进入容器,执行命令生成SSL通用域名证书

      1
      2
      3
      # 替换 -m 邮箱
      # 替换 -d 域名 yyyy.zz
      docker exec -it acme.sh --register-account -m xxxx@yy.com --issue --dns dns_ali -d yyyy.zz -d "*.yyyy.zz"

4. 搭建RSSHUB

RSSHUB的文档可参考 介绍 | RSSHub,可以直接使用RSSHUB的公共订阅源,但缓存时间为20分钟,意味着新信息刷新时间有20分钟延迟,此外因为某些网站反爬严格,公共订阅源会被ban,此时使用私有化部署就可以解决问题。使用私有化部署的订阅源,只需要替换RSSHUB官方订阅源的域名。如https://hub.yyyy.zz/36kr/news/lastest

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
# 可修改redis挂载卷 /home/ubuntu/rsshub/redis
# 可修改CACHE_EXPIRE缓存时间, 默认为300秒
version: '3'
services:
rsshub:
image: diygod/rsshub
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
CACHE_EXPIRE: 300
CACHE_CONTENT_EXPIRE: 3600
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
depends_on:
- redis
- browserless

browserless:
# See issue 6680
image: browserless/chrome:1.43-chrome-stable
restart: always
ulimits:
core:
hard: 0
soft: 0
redis:
image: redis:alpine
restart: always
volumes:
- /home/ubuntu/rsshub/redis:/data

5. 搭建Tiny Tiny RSS

参考以下方式进行部署,初始账号:admin,初始密码:password

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
version: "3"
services:
service.rss:
image: wangqiru/ttrss:latest
container_name: ttrss
ports:
- 181:80
environment:
- SELF_URL_PATH=https://rss.yyyy.zz # 替换为自己拟定的TTRSS域名
- DB_PASS=ttrss
- PUID=1000
- PGID=1000
volumes:
- feed-icons:/var/www/feed-icons/
networks:
- public_access
- service_only
- database_only
stdin_open: true
tty: true
restart: always

service.mercury:
image: wangqiru/mercury-parser-api:latest
container_name: mercury
networks:
- public_access
- service_only
restart: always

service.opencc:
image: wangqiru/opencc-api-server:latest
container_name: opencc
environment:
- NODE_ENV=production
networks:
- service_only
restart: always

database.postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_PASSWORD=ttrss
volumes:
- ./database:/var/lib/postgresql/data # 可修改挂载卷
networks:
- database_only
restart: always

# utility.watchtower:
# container_name: watchtower
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# - WATCHTOWER_CLEANUP=true
# - WATCHTOWER_POLL_INTERVAL=86400
# restart: always

volumes:
feed-icons:

networks:
public_access: # Provide the access for ttrss UI
service_only: # Provide the communication network between services only
internal: true
database_only: # Provide the communication between ttrss and database only
internal: true

可参考TTRSS的文档添加上一步私有化部署的RSS订阅源,进行主题设置等功能。

  • 全文索引插件:用于获取原文

    • 可在“偏好设置——插件”里开启mercury。

    • 启用mercury后,还需在“订阅源——插件”中设置插件地址为localhost:3000,然后在编辑订阅源中启用插件。

    • 在TTRSS中使用mercury

  • Fever API插件:用于某些RSS客户端

    • 可在“偏好设置——插件”里开启fever。

    • 在“偏好设置——fever emulation”设置fever密码

    • 在RSS客户端(见第6章)填写TTRSS域名的fefver api地址,如 https://rss.yyyy.zz/plugins/fever

6. RSS客户端

2021年,符合界面美观、操作简洁的RSS客户端不多了,很多好用的APP如Press已经下架或者停更。好在RSS的小圈子依然有一些独立作者在开发。以下仅推荐几个个人觉得还不错的客户端。

  • Windows

    • TTRSS Web端(免费)
    • Windows商店的Newsflow:支持Fever API(免费)
    • Windows商店的RSS 追踪:支持Fever API(付费)
  • iOS

    • Reader 4:支持Fever API(付费)
  • Android

    • FocusReader:支持TTRSS(免费/年费)
    • 知微:支持TTRSS(免费)

目前个人在Windows使用RSS追踪,Newsflow也不错,都需要开启TTRSS的Fever API。在Android使用FocusReader,知微也很符合使用习惯,但目前缺少字体设置功能。暂时不推荐Feedme,它的Mobilizer不是很好,页面经常出现混乱,此外图片也无法正常加载,待作者更新解决这些问题。

自建RSS信息聚合服务

https://wurang.net/rss-service/

作者

Wu Rang

发布于

2021-09-19

更新于

2022-03-11

许可协议

评论