前言#
什么是 RSS?#
来自 Wikipedia:
RSS(英文全称:RDF Site Summary 或 Really Simple Syndication),中文译作简易信息聚合[3],也称聚合内容,是一种 消息来源 格式规范,用以聚合多个网站更新的内容并自动通知网站订阅者。使用 RSS 后,网站订阅者便无需再手动查看网站是否有新的内容,同时 RSS 可将多个网站更新的内容进行整合,以摘要的形式呈现,有助于订阅者快速获取重要信息,并选择性地点阅查看。
简单地说,就是把各种网站的更新聚合到一起查看。
为什么选择 RSS ?#
在关注多个网站的时候,如果想要检查网站有没有更新,一般需要打开每一个网站看一看。
RSS 便可以把这些信息聚合起来,在一处查看。
同时,部分网站也提供 RSS 用于监控某些变化,比如 GitHub 提供了仓库 commit 或者新 issue 等 RSS 源。
而且,在 RSSHub 这个项目的帮助下,我们可以给没有提供 RSS 的网站制作 RSS:意味着你可以用 RSS 订阅微博,B 站,知乎等社交媒体平台!
这篇文章所搭建的 RSS 系统是怎么样的?#
使用 RSS,主要要解决两个问题:订阅源和阅读器。
订阅源是一个链接,其中包括了文章信息,一些网站已经提供了 RSS 链接,比如 我的博客的 RSS 地址,而对于没有提供 RSS 订阅源得网站,就需要 RSSHub 来生成订阅源。
对于阅读器,现在大部分的 RSS 客户端都提供直接订阅 RSS 链接,或者可以直接使用 inoreader 这类一站式解决方案(如果你的需求免费方案即可满足,或者买得起 $9.9 / 月 的 Pro 套餐),如果你既有一些高级需求(如按正则过滤),又不想花太多钱,就可以选择自建方案,如本文要搭建的 miniflux。
安装#
前置要求#
- 拥有一台云服务器(推荐)或者一台桌面设备,并且安装好 Docker。可以参考我的这篇文章的安装 Docker 部分:安装 Docker | Yunfi's Blog
- 如果想要通过域名以及 HTTPS 访问,请完整地阅读这篇文章:用 Nginx Proxy Manager 可视化管理 Nginx | Yunfi's Blog 否则只能以丑陋且不安全的的 http://114.514.114.514:1200/ 访问。
{%note warning modern %}
如果你的服务器是中国大陆地区的,那么在没有备案的情况下,无法使用 80 或者 443 端口,也就是说不需要也不用做第二个需求。
如果还未购买云服务器,且对中国大陆的访问速度没有极高的要求,强烈不推荐购买位于中国大陆的服务器
{% endnote %}
自建 RSSHub#
什么是 RSSHub?#
RSSHub 文档:
RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容
- RSSHub 的部署文档地址:部署 | RSSHub
如果你没有云服务器...#
可以直接用官方示例实例 rsshub.app,不过反爬严格的路由肯定是用不了了
或者 RSSHub 提供了大量云服务的安装方法,具体参见文档。
我比较推荐的是 部署到 Vercel,因为 Railway 和 Heroku 现在不付费的体验很不好,其他的服务我也不熟悉。
这种办法的缺点就是云服务的 ip 可能比较脏,部分反爬严格的路由可能会用不了
如果不想搭建,可以直接使用我的实例:https://rsshub.yfi.moe
通过 docker-compose 部署#
如果你跟着 文档 走的话,记得去 docker-compose.yml 里看一眼,按照注释进行修改,或者直接用我提供的 docker-compose.yml
-
确定已经安装好了 docker 和 docker-compose,并且安装了一个反向代理工具(比如 nginx)。如果是新买的服务器,可以参考这篇文章 【Docker 系列】一个反向代理神器 ——Nginx Proxy Manager
-
切换到 root 用户,进入一个你喜欢的目录,比如
/root/data/docker_data/rsshub
-
编辑一个
docker-compose.yml
填入以下内容(这是一个最小的配置)version: '3' services: rsshub: image: diygod/rsshub:chromium-bundled restart: always ports: - '1200:1200' environment: NODE_ENV: production CACHE_TYPE: redis REDIS_URL: 'redis://redis:6379/' depends_on: - redis redis: image: redis:alpine restart: always volumes: - redis-data:/data volumes: redis-data:
-
创建 volume 持久化 Redis 缓存
docker volume create redis-data
-
检查一下 1200 端口有没有被占用,没有的话继续,有的话把上面文件里的前一个 1200 改成一个没被占用的端口
-
docker compose up -d
然后浏览器访问http://你的服务器ip:1200
, 出现以下页面即为成功 a -
做一下反向代理
安装 Miniflux#
为什么选择 Miniflux?#
Miniflux is a minimalist and opinionated feed reader.
轻量!轻量!轻量!
主要的竞品是 Tiny Tiny RSS 和 FreshRSS
产品 | 优点 | 缺点 |
---|---|---|
Tiny Tiny RSS | 功能和插件最丰富 | 资源占用多,更新缓慢 |
FreshRSS | 支持 XPath 抓取不支持 RSS 的网站 | 资源占用也不小 |
Miniflux | 资源占用小,功能够用 | 无法为每个源自定义抓取间隔 |
注:都是我自己用下来的感觉,不一定准确
如果你要使用 TTRSS,不建议使用官方原版,用 🐋 Awesome TTRSS
通过 docker-compose 部署 miniflux#
-
切换到 root 用户,进入一个你喜欢的目录,比如
/root/data/docker_data/miniflux
-
新增一个如下的
docker-compose.yml
version: '3.4' services: miniflux: image: miniflux/miniflux:latest container_name: miniflux ports: - "8880:8080" depends_on: - db environment: - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable - POLLING_PARSING_ERROR_LIMIT=10 # 抓取失败多少次后暂时禁用源 - POLLING_FREQUENCY=30 # 抓取间隔 - RUN_MIGRATIONS=1 - CREATE_ADMIN=1 - ADMIN_USERNAME=yourname #管理员账户名称 - ADMIN_PASSWORD=pleasechangeme #管理员密码,记得修改 - BASE_URL=https://miniflux.yunfinibol.top db: image: postgres:15 container_name: miniflux-db environment: - POSTGRES_USER=miniflux - POSTGRES_PASSWORD=secret volumes: - ./db:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "miniflux"] interval: 10s start_period: 30s
更多的环境变量参见:Configuration Parameters
-
检查一下 8880 端口有没有被占用,没有的话继续,有的话把上面文件里的 8880 改成一个没被占用的端口
-
启动容器
- 一般来说,直接
docker compose up -d
即可 - 如果出现 miniflux 容器无法启动(
docker ps -a
中,miniflux 的状态 Exited),可能是因为启动顺序的问题,可以依次启动,即可解决
docker compose up -d db docker compose up -d miniflux
- 一般来说,直接
-
浏览器访问 http:// 你的服务器 ip:8880, 应该可以看到登陆页面
-
做一下反向代理
在设置 -> 设置中可以把语言改为中文,并且打开深色模式自动切换
使用#
订阅源从哪来?#
- 网站自带
- 有些人维护的 RSS (比如 feedx.net 就提供了很多新闻类的 RSS)
- RSSHub (看 文档)
在哪看?#
如果不觉得 Miniflux 的网页简陋的话...#
直接用网页看就行!Miniflux 的网页版是支持 PWA 和移动版的,除了简陋了一点,体验很不错
其他阅读器#
Miniflux 提供多样的 API,供第三方软件使用,包括专有的 Miniflux API,以及通用的 Fever API 和 Google Reader API
Windows 平台#
可以试试 Fluent Reader,支持三种 API,建议直接使用 Miniflux
-
在 Miniflux 中,转到 设置 ->API 密钥,可以直接使用默认提供的账号密码的,也可以新建一个
-
打开 Fluent Reader 的设置 -> 服务,选择 Miniflux
-
端点即为网页上的 API Endpoint,剩下的填好即可
iOS 平台#
因为在 20 年初的时候 Inoreader 的推荐价值导向问题,导致大量 RSS 阅读器从国区下架,包括大量本身不提供任何内容的优秀 RSS 客户端。如果你没有外区商店账号,我推荐使用 Unread 或者 ReadKit,两者是国区商店里矮子里挑高个的佼佼者;如果你有外区账号,我强烈推荐使用 $4.99
的 Reeder 5,可以说是平衡了价格和功能的最佳选择(也有 macOS 版);如果你不仅有外区账号,还能内购付费,而且手头比较宽裕,直接用 $14.99/year
的 Fiery Feed 吧,除了贵,几乎没有缺点。
对于 ReadKit 和 Fiery Feed,它们直接支持了 Miniflux 的专有 API,设置方法和 Windows 端的 Fluent Reader 一样,剩下的可以通过 Fever API 或者 Google Reader API 阅读,设置方法大同小异,这边以 Google Reader API 配上 Reeder 做演示
-
在 Miniflux 中,转到 设置 -> 集成,打开
启用 Google Reader API
,并且设置一个专用的用户名 / 密码,点击更新以保存 -
在 Reeder 中,点击右上角加号以新增账号,选择 Reader
-
Server 中输入
Google Reader API 端点
, 用户名 / 密码使用刚刚设置的
Android 平台#
不太了解,ReadYou 还有 feedme 好像不错
尾声#
至此,一个完全由自己掌握的 RSS 系统就搭完了,但是其实 RSSHub 和 Miniflux 还有很多本文不曾提到的实用功能,大概会在之后的文章里在写吧,自己翻翻 RSSHub 的文档和 Miniflux 的设置应该就能发现一些