日志
- 2023-05-02:优化RSShub的自动更新方案。
- 2023-04-30:增加RSShub的自动更新方案,基于cron。详见
配置yml文件——自动更新RSShub
。 - 2023-04-15:优化yaml内容,抛弃了笨重的chrome容器,转而使用更加轻量的
chromium-bundled
。该策略适用于x86/arm架构。使用旧配置的用户也可以轻松过渡到新版本的yaml,两者是兼容的。 - 2022-06-04:在
docker-compose.yml
文件中增加ACCESS_KEY
参数,增加RSShub私人属性。
前言
通过Docker系列 安装个人RSS服务TTRSS 手机完美适配的学习,我们已经成功地搭建了自己的RSS阅读器。可能也有小伙伴通过Unread
之类的手机App观看了RSS订阅。不知道你自己觉得这个获取知识的方案好不好呢?有了RSS阅读器后,马上就会有一个很大的问题——RSS源。
由于RSS的式微,加上平台对自身资源的垄断,稳定的RSS越来越难获取。
今天我们要介绍一个在RSS界大名鼎鼎的项目——RSShub。RSShub在Github上有19.6k的Star,足见其受欢迎程度了!根据官方仓库的介绍,“RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容”。此外,结合RSSHub Radar可以快速发现当前页面自带的RSS,这也大大增加了RSS源的可用性。
如果只看这个描述,好像也不是很特别。不过接下来,就是我觉得的比较特别的地方了:你可以通过docker来安装自己的RSShub!虽然官方已经搭建了一个服务:https://rsshub.app
来进行RSS源的支持,但是这个地址经常有网络上的问题;速度也比较慢。况且玩docker到现在,搭建一个docker服务对我们而言已经是很简单的事了,所以我也准备搭建一个自己的RSShub
。
话不多说,我们开始吧!
测试环境
uname -a # Linux racknerd-74a241 5.4.0-28-generic #32-Ubuntu SMP Wed Apr 22 17:40:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
docker --version # Docker version 23.0.5, build bc4487a
docker-compose --version #Docker Compose version v2.4.1
准备工作
按需修改工作目录:
work=~/docker/rsshub && mkdir -p $work && cd $work
按需修改端口,开启防火墙:
sudo ufw allow 1200/tcp comment 'rsshub' && sudo ufw reload
配置yml文件
不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。
值得一提的是,官方给出的docker-compose文件只是一些基础设置。如果你有更多需要,可以参考这里的教程:RSShub配置,主要是通过修改rsshub
的Environment选项来达到多种效果,比如用户控制。如果你按下面的方法来安装,原则上任何知道你RSShub地址的人都可以用你的地址进行订阅。
新配置
新配置使用的是rsshub:chromium-bundled
,它更加轻量,更新速度也更快。你可以在这里查看最新tag。推荐使用RSS订阅该tag的更新喔(基于RSShub和RSSHub Radar即可):
我当时获得的最新tag是chromium-bundled-2023-04-14
。具体安装教程如下:
新建一个docker-compose文件:
vim $work/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/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
ALLOW_LOCALHOST: true # 允许所有本地访问
WHITELIST: 172.70.*.* # 允许的ip
# ACCESS_KEY: wikWJAYTsq # 可选。访问密钥,推荐开启。若要开启,将前面的#号去除即可,并按需定义
depends_on:
- redis
redis:
image: redis:alpine
restart: always
volumes:
- ./redis-data:/data
这里的WHITELIST
和ACCESS_KEY
是可选参数,大家可以根据实际情况食用。
我个人是比较推崇启用ACCESS_KEY
的,它对RSShub生成的订阅链接进行验证和加密,可以防止知道我们RSShub网址的有心人白嫖我们的RSShub。如果你开启了ACCESS_KEY
参数,这个参数的值要保管好,不要让其它人知道。
最后,直接上线服务即可:
docker-compose up -d
手动更新RSShub
docker版rsshub是经常更新(每天1-3更),建议按需更新至最新版。首先我们可以下线应用:
docker-compose down
然后拉取docker-compose相关镜像的更新版:
# docker-compose pull
docker pull diygod/rsshub:chromium-bundled
最后再重新部署即可:
docker-compose up -d
自动更新RSShub
虽然方法可行,但不再推荐。强烈推荐使用Watchtower(详见“自动更新容器镜像”小节)自动更新RSShub的docker镜像
由于RSShub是一个频繁更新的docker应用。这里简单展示如何基于cron自动更新RSShub。咱们新建一个shell脚本:
vim ~/auto_update_rsshub.sh
填入以下内容:
#! /bin/bash
# 设置好RSShub的根目录
RSSHUB_WORKSPACE='/docker/rsshub' # 按需修改!!
# 进入RSShub目录
cd ${RSSHUB_WORKSPACE}
# 更新diygod/rsshub:chromium-bundled
docker-compose down
docker pull diygod/rsshub:chromium-bundled
docker-compose up -d
# 删除所有未被容器使用的镜像
# docker rmi $(docker images -qf dangling=true)
docker rmi $(docker images | grep none |grep -E 'diygod/rsshub' | awk '{print $3}')
# 删除未在使用的volume(按需食用。慎用!)
# docker volume prune --force --filter "label=<none>"
# docker volume prune --force
# 更多 --format 格式请关注: [Format command and log output | Docker Documentation](https://docs.docker.com/config/formatting/)
添加一个crontab任务(需要root权限):
chmod +770 $(cd ~; pwd)/auto_update_rsshub.sh && \
ln -s $(cd ~; pwd)/auto_update_rsshub.sh /usr/bin/auto_update_rsshub && \
echo -e "\n# Update RSSHub in 3:00 am\n0 3 * * * root /usr/bin/auto_update_rsshub >/dev/null 2>&1" >> /etc/crontab
这样,该脚本每天凌晨3点就会自动更新diygod/rsshub:chromium-bundled
并删除旧镜像了。
旧配置_Abandoned
browserless/chrome太过笨重,故不再推荐使用。
version: '3'
services:
rsshub:
# two ways to enable puppeteer:
# * (only on amd64/x86_64) comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# * (on all supported architectures, but consumes more disk space and memory) leave anything unchanged
image: diygod/rsshub
restart: always
ports:
- '1200:1200' # 按需修改
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' # marked
ALLOW_LOCALHOST: true # 允许所有本地访问
# ACCESS_KEY: wikWJAYTsq # 访问密钥,推荐开启。若要开启,将前面的#号去除即可,并按需定义
depends_on:
- redis
- browserless # marked
browserless: # marked
image: browserless/chrome # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked
redis:
image: redis:alpine
restart: always
volumes:
- ./redis-data:/data
ddns-go & NPM
不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。
域名:https://example.com
NPM中加反代,无特殊。配置如下:
直接访问https://example.com
。如果你的服务安装成功,可以看到下面的内容:
RSShub使用
比如,我比较喜欢看人民网
的报道。RSShub的文档是如此建议订阅人民网
的:
你可以用自己的地址替换rsshub.app
。这里分2种情况:
- 如果你在docker-compose.yml文件中定义了
ACCESS_KEY
参数,应该使用:https://example.com/people?key=wikWJAYTsq
或者https://example.com/people?code=27dcc3af2b1c660f050bcb5fd79310cb
这两个地址之一。 - 如果你没有在docker-compose.yml文件中定义
ACCESS_KEY
参数,直接使用https://example.com/people
即可。
我一般推荐定义ACCESS_KEY
参数(最好用bitwarden生成一段随机字符串),使用带code的那个地址来订阅。这种设置的好处是:如果你的某个RSShub源地址不小心泄露了,别人也无法以完全权限白嫖你的节点。
那么,链接中的code=XXX
中的XXX
是怎么来的呢?按文档的描述:
其实就是2个字符串组合后生成md5码。在Linux Shell中,你可以用以下命令:
# 仔细体会字符串的结构。在本例中,由路由/people和盐值wikWJAYTsq组成
target='/people'; salt='wikWJAYTsq';
echo -n ${target}${salt} | md5sum | cut -d ' ' -f1
日常使用时,只要替换对应的target
和salt
的值即可。比如,你要使用路由/geekpark/breakingnews
,则令target='/geekpark/breakingnews'
即可。自己试试在TTRSS中添加一个自建的RSShub地址吧!
在实际使用中,我们很少自己计算,一般是通过RSSHub Radar
自动生成带有code的RSS订阅地址。
RSSHub Radar使用
如果你是一个RSS重度用户的话,使用RSShub Radar
会更加方便!
具体的方法自己去官方Github Repo查吧!我这里贴一下它的安装介绍。我平时使用是将RSShub Radar
当作Chrome插件用的:
这里我主要讲一下RSShub Radar
的设置:
注意:如果你用Nextcloud News
的话,这里填写的链接类似于https://nextcloud.domain.com/apps/news/
。你可以在Docker系列 深度使用nextcloud(七) 在nextcloud使用RSS订阅中查看关于News的使用。
设置好RSShub Radar后,我们最好重启登陆一下TTRSS,让TTRSS的cookie更新一下。这样RSS Radar才可以正常识别并生成TTRSS的订阅链接;否则可能只是显示RSShub的文档链接。切记,切记!
比如我要打开知乎热榜:https://www.zhihu.com/hot,就可以有一些自定义的选项。非常方便!
小结
RSShub的安装和使用还是比较简单的。而且你也不需要用duplicati
去备份它的目录,因为你其实不需要本地的任何数据。比较傻瓜式!配合TTRSS、RSShub Radar,RSS订阅的体验还是非常好的!
另外,群里有个小伙伴 @Slark 分享了自己的自建RSShub,大家也可以尝试一下: https://hub.slarker.me。不过,这种第三方RSShub的稳定性都是不能保证的!
我还发现,像知乎
这种新媒体还是支持RSS的,可能它是一个比较开放和极客的平台吧!不管怎么说也要给它点赞了!头条系就比较封闭,基本上不支持RSS。
其实RSShub可能也不能完全解决你的问题。对于某些很难获得的源,你可以看看拓展阅读的内容,或者请教一下大神们,要怎么做。有条件的话,你可以加入RSShub的Telegram群或者去Github提issue获得社区帮助。你也可以学习一下怎么写属于自己的订阅源。
总之,完美的RSS体验还是需要自力更生的。不过,如果你真的折腾通了的话,那么个人阅读的环境将会非常干净和惬意。加油,少年!
参考
拓展阅读
- 参与我们 | RSSHub:官方的RSShub路由制作教程。
- 知乎专栏:RSS—打造完美信息流
- 知乎:RSS高端玩法,自动提醒/过滤垃圾信息/消除广告
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
我现在用的是vercel一键部署的,感觉也还好(/ω\)
还行吧,多种方案。主要是RSShub这个应用给力啊!