使用 K8S 部署 RSS 全套自托管解決方案- RssHub + Tiny Tiny Rss

前言

什么是 RSS?

RSS 是一種描述和同步網(wǎng)站內(nèi)容的格式,是使用最廣泛的 XML 應(yīng)用。RSS 搭建了信息迅速傳播的一個技術(shù)平臺,使得每個人都成為潛在的信息提供者。發(fā)布一個 RSS 文件后,這個 RSS Feed 中包含的信息就能直接被其他站點調(diào)用,而且由于這些數(shù)據(jù)都是標(biāo)準(zhǔn)的 XML 格式,所以也能在其他的終端和服務(wù)中使用,是一種描述和同步網(wǎng)站內(nèi)容的格式。

RSS 廣泛用于網(wǎng)上新聞頻道,blog 和 wiki。使用 RSS 訂閱能更快地獲取信息,網(wǎng)站提供 RSS 輸出,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新。網(wǎng)絡(luò)用戶可以在客戶端借助于支持 RSS 的聚合工具軟件,在不打開網(wǎng)站內(nèi)容頁面的情況下閱讀支持 RSS 輸出的網(wǎng)站內(nèi)容。

為什么我還是需要 RSS?

兩個目的:

  1. 通過 RSS 和 RSS 閱讀器作為高效率的 Feed 集合器,免去每日瀏覽各個網(wǎng)站搜尋信息的時間,發(fā)現(xiàn)優(yōu)質(zhì)內(nèi)容,提高閱讀效率。
  2. 通過 RSS Feed, 獲取低頻但重要的信息,如重要軟件更新,預(yù)報預(yù)警等。

Tiny Tiny RSS 簡介

Tiny Tiny RSS 是一款基于 PHP 的免費開源 RSS 聚合閱讀器。需要自行托管和部署,為基于網(wǎng)頁的 RSS 閱讀器。

RssHub 簡介

RSSHub 主頁

RSSHub 是一個開源、簡單易用、易于擴(kuò)展的 RSS 生成器,可以給任何奇奇怪怪的內(nèi)容生成 RSS 訂閱源。RSSHub 借助于開源社區(qū)的力量快速發(fā)展中,目前已適配數(shù)百家網(wǎng)站的上千項內(nèi)容

主要目的:

  • 將非 rss 格式轉(zhuǎn)換為 rss 以便訂閱;正如其 slogan 所言:「?? 萬物皆可 RSS」

  • 發(fā)現(xiàn)更多有趣的訂閱源。

比如我通過 RssHub 訂閱的內(nèi)容有:

  • 嗶哩嗶哩
  • InfoQ 熱門話題
  • 本地寶焦點資訊
  • 豆瓣 - 正在上映的高分電影
  • 所在城區(qū)停電通知
  • N 卡驅(qū)動更新
  • ...

它是作為一個有聚合了很多內(nèi)容 RSS 源的倉庫來使用。

??? Reference:

比如我希望訂閱 Twitter 上一個名為 DIYgod 的用戶的時間線

根據(jù) Twitter 用戶時間線路由 的文檔,路由為 /twitter/user/:id,把 :id 替換為用戶名,得到路徑為 /twitter/user/DIYgod,再加上域名 https://rsshub.app,一個訂閱源就生成了:https://rsshub.app/twitter/user/DIYgod(opens new window)

然后我們可以把 https://rsshub.app/twitter/user/DIYgod 添加到任意 RSS 閱讀器(當(dāng)然也可以是 Tiny Tiny RSS) 里來使用

其中域名 https://rsshub.app 可以替換為你 自部署 的域名

另外,如果需要訂閱一些特定的內(nèi)容,比如:

  • bilibili 用戶(我自己)關(guān)注的內(nèi)容
  • 微博 個人時間線

等就需要將 RssHub 單獨部署并進(jìn)行配置。

部署架構(gòu)

Overview

Tiny Tiny RSS 有一個公網(wǎng) HTTPS 域名(如:https://ttrss.ewhisper.cn), 我直接登錄該域名來進(jìn)行 RSS 閱讀;

Tiny Tiny RSS 訂閱源可以來自:

  1. 支持 RSS 的網(wǎng)站,比如:OpenShift 博客 的對應(yīng) RSS 地址為:https://cloud.redhat.com/blog/rss.xml
  2. 我自己部署的 RssHub, 公網(wǎng) HTTPS 域名為:https://rss.ewhisper.cn

Tiny Tiny RSS

  1. Tiny Tiny RSS 部署在 K8S 集群的 rss ns 里;
  2. 基于 Awesome-TTRSS/docker-compose.yml at main · HenryQW/Awesome-TTRSS (github.com), 需要部署的組件有:
    1. tiny tiny rss, 需要有一個 PVC 存儲,用于存放 icon
    2. tiny tiny rss 的 數(shù)據(jù)庫 - postgresql 13, 需要有一個 PVC 存儲,用于存放數(shù)據(jù)庫數(shù)據(jù)。
  3. 組件都是單節(jié)點部署,不考慮高可用;
  4. Tiny Tiny RSS 通過 Ingress + SVC 對外發(fā)布域名;

RssHub

  1. RssHub 部署在 K8S 集群的 rss ns 里;
  2. 基于 RSSHub/docker-compose.yml at master · DIYgod/RSSHub (github.com) , 需要部署的組件有:
    1. rsshub
    2. browserless chrome
    3. redis, 需要有一個 PVC 存儲,用于存放緩存數(shù)據(jù)。
  3. 組件都是單節(jié)點部署,不考慮高可用;
  4. RssHub 通過 Ingress + SVC 對外發(fā)布域名;

前提條件

  1. 需要有屬于自己的域名,如:ewhisper.cn, 具體的域名為:
    1. ttrss.ewhisper.cn
    2. rss.ewhisper.cn
  2. 且該域名已經(jīng)在國內(nèi)備案,80 和 443 端口可以正常使用;
  3. 該域名托管在 DNSPod 或類似的 DNS 供應(yīng)商,可以方便地修改 DNS Record;
  4. 需要有對應(yīng)域名的證書,本次需要有:ttrss.ewhisper.cnrss.ewhisper.cn 的證書,可以是單域名證書,也可以是泛域名證書。
  5. 已經(jīng)搭建好 K8S 集群
  6. K8S 集群有 Ingress Controller
  7. K8S 集群有 StorageClass 或可以提供 PV 存儲。(本文 K8S 集群默認(rèn)提供 local-path storageclass)
  8. 本次 2 個域名通過 K8S Traefik 的 IngressRoute 進(jìn)行配置,配置 Ingress 和 證書;
  9. 已安裝:K8S 實用工具之五 -kompose - 東風(fēng)微鳴技術(shù)博客 (ewhisper.cn), 該工具用于將 docker-compose.yml 快速轉(zhuǎn)換為 K8S yaml

??? Reference:

可以通過 cert-manager 為 dnspod 在 Letsencrypt 上申請免費證書:

實施

Tiny Tiny RSS 搭建

docker-compose.yml 在這里:

Awesome-TTRSS/docker-compose.yml at main · HenryQW/Awesome-TTRSS (github.com),

1. 修改 docker-compose

有 2 個地方需要修改:

  1. 環(huán)境變量:
    1. SELF_URL_PATH=https://ttrss.ewhisper.cn/ (你自己的域名)
    2. DB_PASS=changeit (postgresql 數(shù)據(jù)庫密碼)
  2. 使用 kompose 轉(zhuǎn)換,轉(zhuǎn)換前,需要在 docker-compose.yml 補(bǔ)充相關(guān)信息以保證轉(zhuǎn)換 k8s service 成功,具體為在各個 docker compose 的 service 里加上 ports 字段。docker-compose.yml 修改的內(nèi)容見這里:
version: "3"
services:
  service.rss:
    environment:
      - SELF_URL_PATH=https://ttrss.ewhisper.cn/ # please change to your own domain
      - DB_PASS=changeit # use the same password defined in `database.postgres`  
...
  service.mercury:
    ports:
      - 3000:3000
...
  service.opencc: # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
    ports:
      - 3000:3000
...
  database.postgres:
    environment:
      - POSTGRES_PASSWORD=changeit
    ports:
      - 5432:5432      

為方便查看,相關(guān)的 yaml 文件都放在這里了:east4ming/rsshub-ttrss-k8s-deploy (gitee.com)

修改后的 docker-compose.yml 在這里查看:ttrss/docker-compose.yml · east4ming/rsshub-ttrss-k8s-deploy - 碼云 - 開源中國 (gitee.com)

2. 使用 kompose 轉(zhuǎn)換

命令如下:

docker-compose.yml 所在目錄下執(zhí)行:

kompose convert -o ./k8s/ --pvc-request-size 2Gi

?? Note:

--pvc-request-size 2Gi 按需調(diào)整。

轉(zhuǎn)換后,目錄結(jié)構(gòu)如下:(轉(zhuǎn)換后還會生成 NetWorkPolicy 文件,個人認(rèn)為沒必要,就刪除掉了相關(guān)文件和 label; 另外,生成的文件中有的 字段包含 . , 以防萬一,都替換為了 -):

└── ttrss
    ├── docker-compose.yml
    └── k8s
        ├── database-postgres-claim0-persistentvolumeclaim.yaml
        ├── database-postgres-deployment.yaml
        ├── database.postgres-service.yaml
        ├── feed-icons-persistentvolumeclaim.yaml
        ├── service-mercury-deployment.yaml
        ├── service-opencc-deployment.yaml
        ├── service-rss-deployment.yaml
        ├── service.mercury-service.yaml
        ├── service.opencc-service.yaml
        └── service.rss-service.yaml

除此之外還需要手動創(chuàng)建一個 ingress, 用于對外暴露服務(wù)(這里用的是 Traefik CRD - IngressRoute).

  1. Tiny Tiny Rss
    1. Deployment: service-rss-deployment.yaml (??這里還需要添加一個 ENV: DB_HOST, 以通過 DB SVC 訪問 DB)
    2. Service: service.rss-service.yaml (用于對接 Ingress, 對外提供服務(wù))
    3. IngressRoute: ingress-rss-service.yaml
  2. DB - PostgreSQL
    1. Deployment: database-postgres-deployment.yaml
    2. SVC: database.postgres-service.yaml (Tiny Tiny Rss 通過該 SVC 連接到 DB)
    3. PVC: database-postgres-claim0-persistentvolumeclaim.yaml(申請持久化存儲)
  3. 其他服務(wù) - opencc
    1. Deployment: service-opencc-deployment.yaml
    2. Service: service-opencc-deployment.yaml
  4. 其他服務(wù) - mercury
    1. Deployment: service-mercury-deployment.yaml
    2. Service: service.mercury-service.yaml

具體的 K8S yaml 內(nèi)容見這里:ttrss/k8s · east4ming/rsshub-ttrss-k8s-deploy - 碼云 - 開源中國 (gitee.com)

?? Note:

ttrss/k8s/ingress-rss-service.yaml · east4ming/rsshub-ttrss-k8s-deploy - 碼云 - 開源中國 (gitee.com) 的配置沿襲于我的另一篇文章:《基于 Traefik 的激進(jìn) TLS 安全配置實踐 - 東風(fēng)微鳴技術(shù)博客 (ewhisper.cn)

3. 部署

使用 kubectl 部署:

kubectl -n rss create -f ./k8s/

4. 配置 DNS Record

在 DNS 提供商控制臺(本例為 DNSPod) 配置對應(yīng)域名 <ttrss.ewhisper.cn> 的 DNS Record:

  • ttrss, A 記錄,指向 K8S 集群 Ingress 對應(yīng)的公網(wǎng)地址

5. 訪問驗證

訪問首頁:https://ttrss.ewhisper.cn/ , 默認(rèn)賬戶:admin 密碼:password,請第一時間更改。

效果如下:

Tiny Tiny Rss

RssHub 搭建

RssHub 搭建的步驟幾乎和 Tiny Tiny RSS 一樣。具體如下:

1. 修改 docker-compose

使用 kompose 轉(zhuǎn)換,轉(zhuǎn)換前,需要在 docker-compose.yml 補(bǔ)充相關(guān)信息以保證轉(zhuǎn)換 k8s service 成功,具體為在各個 docker compose 的 service 里加上 ports 字段。

2. 使用 kompose 轉(zhuǎn)換

命令如下:

docker-compose.yml 所在目錄下執(zhí)行:

kompose convert -o ./k8s/ --pvc-request-size 2Gi

?? Note:

--pvc-request-size 2Gi 按需調(diào)整。

轉(zhuǎn)換后,目錄結(jié)構(gòu)如下:

.
├── docker-compose.yml
└── k8s
    ├── browserless-deployment.yaml
    ├── browserless-service.yaml
    ├── redis-data-persistentvolumeclaim.yaml
    ├── redis-deployment.yaml
    ├── redis-service.yaml
    ├── rsshub-deployment.yaml
    └── rsshub-service.yaml

1 directory, 8 files

除此之外還需要手動創(chuàng)建一個 ingress, 用于對外暴露服務(wù)(這里用的是 Traefik CRD - IngressRoute).

  1. RssHub
    1. Deployment: rsshub-deployment.yaml
    2. Service: rsshub-service.yaml (用于對接 Ingress, 對外提供服務(wù))
    3. IngressRoute: rsshub-ingress.yaml
  2. Browserless - Chrome
    1. Deployment: browserless-deployment.yaml
    2. SVC: browserless-service.yaml (RssHub 通過該 SVC 連接到 Browserless )
  3. Redis
    1. Deployment: redis-deployment.yaml
    2. Service: redis-service.yaml
    3. PVC: redis-data-persistentvolumeclaim.yaml

具體的 K8S yaml 內(nèi)容見這里:rsshub/k8s · east4ming/rsshub-ttrss-k8s-deploy - 碼云 - 開源中國 (gitee.com)

?? Note:

rsshub/k8s/rsshub-ingress.yaml · east4ming/rsshub-ttrss-k8s-deploy - 碼云 - 開源中國 (gitee.com) 的配置沿襲于我的另一篇文章:《基于 Traefik 的激進(jìn) TLS 安全配置實踐 - 東風(fēng)微鳴技術(shù)博客 (ewhisper.cn)

3. 部署

使用 kubectl 部署:

kubectl -n rss create -f ./k8s/

4. 配置 DNS Record

在 DNS 提供商控制臺(本例為 DNSPod) 配置對應(yīng)域名 <rss.ewhisper.cn> 的 DNS Record:

  • rss, A 記錄,指向 K8S 集群 Ingress 對應(yīng)的公網(wǎng)地址

5. 訪問驗證

如果看到這個頁面,證明已經(jīng)部署成功:

RssHub 首頁

可以通過 TTRss 的頁面訂閱 RssHub 的源來驗證 RssHub 是否正常運行,如下圖:

TTRSS 訂閱信息源

點擊訂閱后成功,如下圖:

訂閱效果

證明 RssHub 已經(jīng)正常運行。

??????

總結(jié)

通過如上的配置,我們可以通過自己的基于瀏覽器的 Tiny Tiny RSS 閱讀器來訂閱并閱讀消息,并可以通過 RssHub 來將各種各樣的信息轉(zhuǎn)換為可訂閱的 Rss 路由。

參考資料

三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容