Yunfi

Yunfi

tg_channel
github
email

完整的 RSS 解決方案:自建 RSSHub 與 Miniflux

前言#

什麼是 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。

安裝#

前置要求#

{%note warning modern %}
如果你的伺服器是中國大陸地區的,那麼在沒有備案的情況下,無法使用 80 或者 443 端口,也就是說不需要也不用做第二個需求。
如果還未購買雲伺服器,且對中國大陸的訪問速度沒有極高的要求,強烈不推薦購買位於中國大陸的伺服器
{% endnote %}

自建 RSSHub#

什麼是 RSSHub?#

RSSHub 文檔:

RSSHub 是一個開源、簡單易用、易於擴展的 RSS 生成器,可以給任何奇奇怪怪的內容生成 RSS 訂閱源。RSSHub 借助於開源社區的力量快速發展中,目前已適配數百家網站的上千項內容

如果你沒有雲伺服器...#

可以直接用官方示例實例 rsshub.app,不過反爬嚴格的路由肯定是用不了了

或者 RSSHub 提供了大量雲服務的安裝方法,具體參見文檔。

我比較推薦的是 部署到 Vercel,因為 Railway 和 Heroku 現在不付費的體驗很不好,其他的服務我也不熟悉。

這種辦法的缺點就是雲服務的 ip 可能比較髒,部分反爬嚴格的路由可能會用不了

如果不想搭建,可以直接使用我的實例:https://rsshub.yfi.moe

通過 docker-compose 部署#

如果你跟著 文檔 走的話,記得去 docker-compose.yml 裡看一眼,按照註釋進行修改,或者直接用我提供的 docker-compose.yml

  1. 確定已經安裝好了 docker 和 docker-compose,並且安裝了一個反向代理工具(比如 nginx)。如果是新買的伺服器,可以參考這篇文章 【Docker 系列】一個反向代理神器 ——Nginx Proxy Manager

  2. 切換到 root 用戶,進入一個你喜歡的目錄,比如 /root/data/docker_data/rsshub

  3. 編輯一個 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:
    
  4. 創建 volume 持久化 Redis 緩存 docker volume create redis-data

  5. 檢查一下 1200 端口有沒有被佔用,沒有的話繼續,有的話把上面文件裡的前一個 1200 改成一個沒被佔用的端口

  6. docker compose up -d 然後瀏覽器訪問 http://你的伺服器ip:1200,出現以下頁面即為成功 a

    rsshub_demo

  7. 做一下反向代理

安裝 Miniflux#

為什麼選擇 Miniflux?#

Miniflux is a minimalist and opinionated feed reader.

輕量!輕量!輕量!

主要的競品是 Tiny Tiny RSSFreshRSS

產品優點缺點
Tiny Tiny RSS功能和插件最豐富資源佔用多,更新緩慢
FreshRSS支持 XPath 抓取不支持 RSS 的網站資源佔用也不小
Miniflux資源佔用小,功能夠用無法為每個源自定義抓取間隔

注:都是我自己用下來的感覺,不一定準確
如果你要使用 TTRSS,不建議使用官方原版,用 🐋 Awesome TTRSS

通過 docker-compose 部署 miniflux#

官方指南:Installation Instructions

  1. 切換到 root 用戶,進入一個你喜歡的目錄,比如 /root/data/docker_data/miniflux

  2. 新增一個如下的 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

  3. 檢查一下 8880 端口有沒有被佔用,沒有的話繼續,有的話把上面文件裡的 8880 改成一個沒被佔用的端口

  4. 啟動容器

    • 一般來說,直接 docker compose up -d 即可
    • 如果出現 miniflux 容器無法啟動(docker ps -a 中,miniflux 的狀態 Exited),可能是因為啟動順序的問題,可以依次啟動,即可解決
    docker compose up -d db
    docker compose up -d miniflux
    
  5. 瀏覽器訪問 http:// 你的伺服器 ip:8880,應該可以看到登錄頁面

  6. 做一下反向代理

在設置 -> 設置中可以把語言改為中文,並且打開深色模式自動切換

使用#

訂閱源從哪來?#

  1. 網站自帶
  2. 有些人維護的 RSS (比如 feedx.net 就提供了很多新聞類的 RSS)
  3. RSSHub (看 文檔

在哪看?#

如果不覺得 Miniflux 的網頁簡陋的話...#

直接用網頁看就行!Miniflux 的網頁版是支持 PWA 和移動版的,除了簡陋了一點,體驗很不錯

其他閱讀器#

Miniflux 提供多樣的 API,供第三方軟件使用,包括專有的 Miniflux API,以及通用的 Fever API 和 Google Reader API

Windows 平台#

可以試試 Fluent Reader,支持三種 API,建議直接使用 Miniflux

  1. 在 Miniflux 中,轉到 設置 ->API 密鑰,可以直接使用默認提供的賬號密碼的,也可以新建一個

    image-20230513001228635

  2. 打開 Fluent Reader 的設置 -> 服務,選擇 Miniflux

    image-20230513000846604
  3. 端點即為網頁上的 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 做演示

  1. 在 Miniflux 中,轉到 設置 -> 集成,打開 啟用 Google Reader API,並且設置一個專用的用戶名 / 密碼,點擊更新以保存

    image-20230513003215509

  2. 在 Reeder 中,點擊右上角加號以新增賬號,選擇 Reader

    image
  3. Server 中輸入 Google Reader API 端點,用戶名 / 密碼使用剛剛設置的

Android 平台#

不太了解,ReadYou 還有 feedme 好像不錯

尾聲#

至此,一個完全由自己掌握的 RSS 系統就搭完了,但是其實 RSSHub 和 Miniflux 還有很多本文不曾提到的實用功能,大概會在之後的文章裡在寫吧,自己翻翻 RSSHub 的文檔和 Miniflux 的設置應該就能發現一些

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。