使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss
前言
什么是 RSS?
RSS 是一种描述和同步网站内容的格式,是使用最广泛的 XML 应用。RSS 搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个 RSS 文件后,这个 RSS Feed 中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的 XML 格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。
RSS 广泛用于网上新闻频道,blog 和 wiki。使用 RSS 订阅能更快地获取信息,网站提供 RSS 输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持 RSS 的聚合工具软件,在不打开网站内容页面的情况下阅读支持 RSS 输出的网站内容。
为什么我还是需要 RSS?
两个目的:
- 通过 RSS 和 RSS 阅读器作为高效率的 Feed 集合器,免去每日浏览各个网站搜寻信息的时间,发现优质内容,提高阅读效率。
- 通过 RSS Feed, 获取低频但重要的信息,如重要软件更新,预报预警等。
Tiny Tiny RSS 简介
Tiny Tiny RSS 是一款基于 PHP 的免费开源 RSS 聚合阅读器。需要自行托管和部署,为基于网页的 RSS 阅读器。
RssHub 简介
RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容
主要目的:
将非 rss 格式转换为 rss 以便订阅;正如其 slogan 所言:「 万物皆可 RSS」
发现更多有趣的订阅源。
比如我通过 RssHub 订阅的内容有:
- 哔哩哔哩
- InfoQ 热门话题
- 本地宝焦点资讯
- 豆瓣 - 正在上映的高分电影
- 所在城区停电通知
- N 卡驱动更新
- ...
它是作为一个有聚合了很多内容 RSS 源的仓库来使用。
️ Reference:
比如我希望订阅 Twitter 上一个名为 DIYgod 的用户的时间线
根据 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 阅读器(当然也可以是 Tiny Tiny RSS) 里来使用
其中域名
https://rsshub.app
可以替换为你 自部署 的域名
另外,如果需要订阅一些特定的内容,比如:
- bilibili 用户(我自己)关注的内容
- 微博 个人时间线
等就需要将 RssHub 单独部署并进行配置。
部署架构
Overview
Tiny Tiny RSS 有一个公网 HTTPS 域名(如:https://ttrss.ewhisper.cn), 我直接登录该域名来进行 RSS 阅读;
Tiny Tiny RSS 订阅源可以来自:
- 支持 RSS 的网站,比如:OpenShift 博客 的对应 RSS 地址为:https://cloud.redhat.com/blog/rss.xml
- 我自己部署的 RssHub, 公网 HTTPS 域名为:https://rss.ewhisper.cn
Tiny Tiny RSS
- Tiny Tiny RSS 部署在 K8S 集群的
rss
ns 里; - 基于 Awesome-TTRSS/docker-compose.yml at main · HenryQW/Awesome-TTRSS (github.com), 需要部署的组件有:
- tiny tiny rss, 需要有一个 PVC 存储,用于存放 icon
- tiny tiny rss 的 数据库 - postgresql 13, 需要有一个 PVC 存储,用于存放数据库数据。
- 组件都是单节点部署,不考虑高可用;
- Tiny Tiny RSS 通过 Ingress + SVC 对外发布域名;
RssHub
- RssHub 部署在 K8S 集群的
rss
ns 里; - 基于 RSSHub/docker-compose.yml at master · DIYgod/RSSHub (github.com) , 需要部署的组件有:
- rsshub
- browserless chrome
- redis, 需要有一个 PVC 存储,用于存放缓存数据。
- 组件都是单节点部署,不考虑高可用;
- RssHub 通过 Ingress + SVC 对外发布域名;
前提条件
- 需要有属于自己的域名,如:
ewhisper.cn
, 具体的域名为:ttrss.ewhisper.cn
rss.ewhisper.cn
- 且该域名已经在国内备案,80 和 443 端口可以正常使用;
- 该域名托管在 DNSPod 或类似的 DNS 供应商,可以方便地修改 DNS Record;
- 需要有对应域名的证书,本次需要有:
ttrss.ewhisper.cn
和rss.ewhisper.cn
的证书,可以是单域名证书,也可以是泛域名证书。 - 已经搭建好 K8S 集群
- K8S 集群有 Ingress Controller
- K8S 集群有 StorageClass 或可以提供 PV 存储。(本文 K8S 集群默认提供
local-path
storageclass) - 本次 2 个域名通过 K8S Traefik 的 IngressRoute 进行配置,配置 Ingress 和 证书;
- 已安装:K8S 实用工具之五 -kompose - 东风微鸣技术博客 (ewhisper.cn), 该工具用于将
docker-compose.yml
快速转换为 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 个地方需要修改:
- 环境变量:
SELF_URL_PATH=https://ttrss.ewhisper.cn/
(你自己的域名)DB_PASS=changeit
(postgresql 数据库密码)
- 使用
kompose
转换,转换前,需要在docker-compose.yml
补充相关信息以保证转换 k8s service 成功,具体为在各个 docker compose 的 service 里加上ports
字段。docker-compose.yml
修改的内容见这里:
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
为方便查看,相关的 yaml 文件都放在这里了:east4ming/rsshub-ttrss-k8s-deploy (gitee.com)
修改后的 docker-compose.yml
在这里查看:ttrss/docker-compose.yml · east4ming/rsshub-ttrss-k8s-deploy - 码云 - 开源中国 (gitee.com)
2. 使用 kompose
转换
命令如下:
在 docker-compose.yml
所在目录下执行:
kompose convert -o ./k8s/ --pvc-request-size 2Gi
Note:
--pvc-request-size 2Gi
按需调整。
转换后,目录结构如下:(转换后还会生成 NetWorkPolicy 文件,个人认为没必要,就删除掉了相关文件和 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
除此之外还需要手动创建一个 ingress, 用于对外暴露服务(这里用的是 Traefik CRD - IngressRoute).
- Tiny Tiny Rss
- Deployment:
service-rss-deployment.yaml
(这里还需要添加一个 ENV: DB_HOST, 以通过 DB SVC 访问 DB) - Service:
service.rss-service.yaml
(用于对接 Ingress, 对外提供服务) - 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:
- 其他服务 - opencc
- Deployment:
service-opencc-deployment.yaml
- Service:
service-opencc-deployment.yaml
- Deployment:
- 其他服务 - mercury
- Deployment:
service-mercury-deployment.yaml
- Service:
service.mercury-service.yaml
- Deployment:
具体的 K8S yaml 内容见这里:ttrss/k8s · east4ming/rsshub-ttrss-k8s-deploy - 码云 - 开源中国 (gitee.com)
Note:
ttrss/k8s/ingress-rss-service.yaml · east4ming/rsshub-ttrss-k8s-deploy - 码云 - 开源中国 (gitee.com) 的配置沿袭于我的另一篇文章:《基于 Traefik 的激进 TLS 安全配置实践 - 东风微鸣技术博客 (ewhisper.cn)》
3. 部署
使用 kubectl
部署:
kubectl -n rss create -f ./k8s/
4. 配置 DNS Record
在 DNS 提供商控制台(本例为 DNSPod) 配置对应域名 <ttrss.ewhisper.cn> 的 DNS Record:
- ttrss, A 记录,指向 K8S 集群 Ingress 对应的公网地址
5. 访问验证
访问首页:https://ttrss.ewhisper.cn/ , 默认账户:admin
密码:password
,请第一时间更改。
效果如下:
RssHub 搭建
RssHub 搭建的步骤几乎和 Tiny Tiny RSS 一样。具体如下:
1. 修改 docker-compose
使用 kompose
转换,转换前,需要在 docker-compose.yml
补充相关信息以保证转换 k8s service 成功,具体为在各个 docker compose 的 service 里加上 ports
字段。
2. 使用 kompose
转换
命令如下:
在 docker-compose.yml
所在目录下执行:
kompose convert -o ./k8s/ --pvc-request-size 2Gi
Note:
--pvc-request-size 2Gi
按需调整。
转换后,目录结构如下:
.
├── 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
除此之外还需要手动创建一个 ingress, 用于对外暴露服务(这里用的是 Traefik CRD - IngressRoute).
- RssHub
- Deployment:
rsshub-deployment.yaml
- Service:
rsshub-service.yaml
(用于对接 Ingress, 对外提供服务) - 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 内容见这里:rsshub/k8s · east4ming/rsshub-ttrss-k8s-deploy - 码云 - 开源中国 (gitee.com)
Note:
rsshub/k8s/rsshub-ingress.yaml · east4ming/rsshub-ttrss-k8s-deploy - 码云 - 开源中国 (gitee.com) 的配置沿袭于我的另一篇文章:《基于 Traefik 的激进 TLS 安全配置实践 - 东风微鸣技术博客 (ewhisper.cn)》
3. 部署
使用 kubectl
部署:
kubectl -n rss create -f ./k8s/
4. 配置 DNS Record
在 DNS 提供商控制台(本例为 DNSPod) 配置对应域名 <rss.ewhisper.cn> 的 DNS Record:
- rss, A 记录,指向 K8S 集群 Ingress 对应的公网地址
5. 访问验证
如果看到这个页面,证明已经部署成功:
可以通过 TTRss 的页面订阅 RssHub 的源来验证 RssHub 是否正常运行,如下图:
点击订阅后成功,如下图:
证明 RssHub 已经正常运行。
总结
通过如上的配置,我们可以通过自己的基于浏览器的 Tiny Tiny RSS 阅读器来订阅并阅读消息,并可以通过 RssHub 来将各种各样的信息转换为可订阅的 Rss 路由。
参考资料
使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss的更多相关文章
- [转帖]k8s 部署问题解决
k8s 部署问题解决 https://www.jianshu.com/p/f53650a85131 本文记录一下在部署 k8s 时遇到的一些问题及解决方法,具体部署流程可以参考 ubuntu 安装 k ...
- 日志分析系统 - k8s部署ElasticSearch集群
K8s部署ElasticSearch集群 1.前提准备工作 1.1 创建elastic的命名空间 namespace编排文件如下: elastic.namespace.yaml --- apiVers ...
- 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...
- k8s部署canal-1.1.6版本实现MySQL数据库数据同步
1.版本说明 软件&镜像 版本&镜像信息 说明 Kubernetes v1.23.7 k8s服务器 Kuboard v3.5.2.0 k8s连接管理工具 Canal v1.1.6 数据 ...
- Python服务Dokcer化并k8s部署实例
这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程. 服务介绍Docker化设计业务代码改造创建docker镜像K8S部署设计yaml文件运行服务介绍这是一个用 pyth ...
- ballerina 学习二十七 项目k8s部署&& 运行
ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...
- iis 部署webapi常见错误及解决方案
iis 部署webapi常见错误及解决方案 错误一: 原因:asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问, ...
- Rancher+K8S部署手册
目前创建K8S集群的安装程序最受欢迎的有Kops,Kubespray,kubeadm,rancher,以及个人提供的脚本集等. Kops和Kubespary在国外用的比较多,没有处理中国的网络问题,没 ...
- Jenkins+Git+Docker+K8s部署
准备工作 Jenkins已安装 Docker和K8s部署运行成功 代码管理工具使用Git 最近公司项目使用Jenkins+Git+Docker+K8s进行持续化构建部署,这里笔者整理了一下构建部署的相 ...
- K8S部署
k8S部署 柯穴上网 安装openvpn来获取docker镜像(不是本文重点不做详述) 软件包安装 1 关闭iptables,禁用firewalld,关闭selinux 2 配置yum仓库(使用阿里云 ...
随机推荐
- 【Azure Developer】使用 Azure PowerShell 执行 Azure 表存储操作时遇见的4个问题
要使用PowerShell操作Azure的表存储,需要经过以下步骤: 1:必须安装 Az 和 AzTable 模块.安装命令为: #安装 Az 模块 Install-Module -Name Az - ...
- 【Azure 应用服务】App Service 部署txt静态文件和Jar包在不同目录中的解决办法
问题描述 在Web App wwwroot (Windows系统中)根目录下如何部署一个jar包和一个text文件,让两个文件都能被访问? 解决办法 Jar包和Text文件都分别放置在两个单独的文件夹 ...
- Win10系统winload.efi丢失或损坏怎么办?修复步骤(以联想笔记本为例)
winload.efi是通过UEFI方式引导必要的引导文件,如果系统中丢失或是损坏将导致系统无法启动,如win10在出现这样的问题时会出现蓝屏恢复界面,那么此时该如何解决呢?此例为 GPT+UEFI ...
- 16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(递归、思维、dp)
C. Min Max Sort 很不错的一道题目,不过脑电波和出题人每对上,\(qwq.\) 正难则反. 我们考虑最后一步是怎么操作的. 最后一步一定是对\(1\)和\(n\)进行操作 那么上一步呢? ...
- linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开
linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开 开始以为nodejs版本问题 最后发现是安装n ...
- 创建 nest-websocket 服务 用于mock单点登录开发
需求 有个单点登录的任务,但是都是现场的服务 api 和 websocket 都在现在 开发本机mock服务 本地搭建环境先模拟一下 资料 NestJS WebSocket 开始使用 https:// ...
- Some characters cannot be mapped using 'ISO-8859-1'解决方案
问题: MyEclipse中:Some characters cannot be mapped using 'ISO-8859-1' character encoding 分析:由于默认的字符是I ...
- RV1126编译过程
一.编译环境 1.目标系统:ubuntu 22.04 LTS 2.投屏器SDK下载: 链接:https://pan.baidu.com/s/1OJQafxm38FnbshMEu432Og 提取码:o6 ...
- 3DCAT为3D应用在云端构筑一个可靠的家
保护知识产权,一直是数字化长期关注的议题,如何保护应用内的数字化资产(文字.图片.音频.视频.模型)等,是当今行业的难题,只要运行在Windows环境的三维应用,都可能面临被破解提取出资产,为原创版权 ...
- Java基础知识篇04——数组
哈喽,大家好!我是白夜,今天给大家聊聊数组. 一.概念 计算机在内存区域分配的一段连续的区域(空间),用来存储同种类型的多个数据 简单的理解,数组就是一堆盒子,同一时间,可以保存多个相同数据类型的数据 ...