前言#
什麼是 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 的設置應該就能發現一些