前言
什么是 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?
兩個目的:
- 通過 RSS 和 RSS 閱讀器作為高效率的 Feed 集合器,免去每日瀏覽各個網(wǎng)站搜尋信息的時間,發(fā)現(xiàn)優(yōu)質(zhì)內(nèi)容,提高閱讀效率。
- 通過 RSS Feed, 獲取低頻但重要的信息,如重要軟件更新,預(yù)報預(yù)警等。
Tiny Tiny RSS 簡介
Tiny Tiny RSS 是一款基于 PHP 的免費開源 RSS 聚合閱讀器。需要自行托管和部署,為基于網(wǎng)頁的 RSS 閱讀器。
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 訂閱源可以來自:
- 支持 RSS 的網(wǎng)站,比如:OpenShift 博客 的對應(yīng) RSS 地址為:https://cloud.redhat.com/blog/rss.xml
- 我自己部署的 RssHub, 公網(wǎng) HTTPS 域名為:https://rss.ewhisper.cn
Tiny Tiny RSS
- Tiny Tiny RSS 部署在 K8S 集群的
rssns 里; - 基于 Awesome-TTRSS/docker-compose.yml at main · HenryQW/Awesome-TTRSS (github.com), 需要部署的組件有:
- tiny tiny rss, 需要有一個 PVC 存儲,用于存放 icon
- tiny tiny rss 的 數(shù)據(jù)庫 - postgresql 13, 需要有一個 PVC 存儲,用于存放數(shù)據(jù)庫數(shù)據(jù)。
- 組件都是單節(jié)點部署,不考慮高可用;
- Tiny Tiny RSS 通過 Ingress + SVC 對外發(fā)布域名;
RssHub
- RssHub 部署在 K8S 集群的
rssns 里; - 基于 RSSHub/docker-compose.yml at master · DIYgod/RSSHub (github.com) , 需要部署的組件有:
- rsshub
- browserless chrome
- redis, 需要有一個 PVC 存儲,用于存放緩存數(shù)據(jù)。
- 組件都是單節(jié)點部署,不考慮高可用;
- RssHub 通過 Ingress + SVC 對外發(fā)布域名;
前提條件
- 需要有屬于自己的域名,如:
ewhisper.cn, 具體的域名為:ttrss.ewhisper.cnrss.ewhisper.cn
- 且該域名已經(jīng)在國內(nèi)備案,80 和 443 端口可以正常使用;
- 該域名托管在 DNSPod 或類似的 DNS 供應(yīng)商,可以方便地修改 DNS Record;
- 需要有對應(yīng)域名的證書,本次需要有:
ttrss.ewhisper.cn和rss.ewhisper.cn的證書,可以是單域名證書,也可以是泛域名證書。 - 已經(jīng)搭建好 K8S 集群
- K8S 集群有 Ingress Controller
- K8S 集群有 StorageClass 或可以提供 PV 存儲。(本文 K8S 集群默認(rèn)提供
local-pathstorageclass) - 本次 2 個域名通過 K8S Traefik 的 IngressRoute 進(jìn)行配置,配置 Ingress 和 證書;
- 已安裝: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 個地方需要修改:
- 環(huán)境變量:
-
SELF_URL_PATH=https://ttrss.ewhisper.cn/(你自己的域名) -
DB_PASS=changeit(postgresql 數(shù)據(jù)庫密碼)
-
- 使用
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).
- Tiny Tiny Rss
- Deployment:
service-rss-deployment.yaml(??這里還需要添加一個 ENV: DB_HOST, 以通過 DB SVC 訪問 DB) - Service:
service.rss-service.yaml(用于對接 Ingress, 對外提供服務(wù)) - IngressRoute:
ingress-rss-service.yaml
- Deployment:
- DB - PostgreSQL
- Deployment:
database-postgres-deployment.yaml - SVC:
database.postgres-service.yaml(Tiny Tiny Rss 通過該 SVC 連接到 DB) - PVC:
database-postgres-claim0-persistentvolumeclaim.yaml(申請持久化存儲)
- Deployment:
- 其他服務(wù) - opencc
- Deployment:
service-opencc-deployment.yaml - Service:
service-opencc-deployment.yaml
- Deployment:
- 其他服務(wù) - mercury
- Deployment:
service-mercury-deployment.yaml - Service:
service.mercury-service.yaml
- Deployment:
具體的 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,請第一時間更改。
效果如下:

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).
- RssHub
- Deployment:
rsshub-deployment.yaml - Service:
rsshub-service.yaml(用于對接 Ingress, 對外提供服務(wù)) - IngressRoute:
rsshub-ingress.yaml
- Deployment:
- Browserless - Chrome
- Deployment:
browserless-deployment.yaml - SVC:
browserless-service.yaml(RssHub 通過該 SVC 連接到 Browserless )
- Deployment:
- Redis
- Deployment:
redis-deployment.yaml - Service:
redis-service.yaml - PVC:
redis-data-persistentvolumeclaim.yaml
- Deployment:
具體的 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)部署成功:

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

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

證明 RssHub 已經(jīng)正常運行。
??????
總結(jié)
通過如上的配置,我們可以通過自己的基于瀏覽器的 Tiny Tiny RSS 閱讀器來訂閱并閱讀消息,并可以通過 RssHub 來將各種各樣的信息轉(zhuǎn)換為可訂閱的 Rss 路由。
參考資料
三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.