Docker系列 利用RSShub搭建个人RSS源 从此万物皆RSS
本文最后更新于 442 天前,如有失效请评论区留言。

本博客由Faconhost大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!

日志

  • 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界大名鼎鼎的项目——RSShubRSShub在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即可):

msedge_q1Kh7j5ktY

我当时获得的最新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

这里的WHITELISTACCESS_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中加反代,无特殊。配置如下:

image-20220430184057229

直接访问https://example.com。如果你的服务安装成功,可以看到下面的内容:

image-20220430180101651

RSShub使用

使用说明:https://docs.rsshub.app/

比如,我比较喜欢看人民网的报道。RSShub的文档是如此建议订阅人民网的:

image-20220430182155578

你可以用自己的地址替换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是怎么来的呢?按文档的描述:

Code_atz4ZIWkts

其实就是2个字符串组合后生成md5码。在Linux Shell中,你可以用以下命令:

# 仔细体会字符串的结构。在本例中,由路由/people和盐值wikWJAYTsq组成
target='/people'; salt='wikWJAYTsq';
echo -n ${target}${salt} | md5sum | cut -d ' ' -f1 

日常使用时,只要替换对应的targetsalt的值即可。比如,你要使用路由/geekpark/breakingnews,则令target='/geekpark/breakingnews'即可。自己试试在TTRSS中添加一个自建的RSShub地址吧!

在实际使用中,我们很少自己计算,一般是通过RSSHub Radar自动生成带有code的RSS订阅地址。

RSSHub Radar使用

如果你是一个RSS重度用户的话,使用RSShub Radar会更加方便!

具体的方法自己去官方Github Repo查吧!我这里贴一下它的安装介绍。我平时使用是将RSShub Radar当作Chrome插件用的:

image-20220501120352949

这里我主要讲一下RSShub Radar的设置:

chrome_vXz2cd3ooc

注意:如果你用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,就可以有一些自定义的选项。非常方便!

image-20220501120948065

小结

RSShub的安装和使用还是比较简单的。而且你也不需要用duplicati去备份它的目录,因为你其实不需要本地的任何数据。比较傻瓜式!配合TTRSS、RSShub Radar,RSS订阅的体验还是非常好的!

另外,群里有个小伙伴 @Slark 分享了自己的自建RSShub,大家也可以尝试一下: https://hub.slarker.me。不过,这种第三方RSShub的稳定性都是不能保证的!

我还发现,像知乎这种新媒体还是支持RSS的,可能它是一个比较开放和极客的平台吧!不管怎么说也要给它点赞了!头条系就比较封闭,基本上不支持RSS。

其实RSShub可能也不能完全解决你的问题。对于某些很难获得的源,你可以看看拓展阅读的内容,或者请教一下大神们,要怎么做。有条件的话,你可以加入RSShub的Telegram群或者去Github提issue获得社区帮助。你也可以学习一下怎么写属于自己的订阅源

总之,完美的RSS体验还是需要自力更生的。不过,如果你真的折腾通了的话,那么个人阅读的环境将会非常干净和惬意。加油,少年!

参考

拓展阅读

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

感谢Faconhost的友情赞助 (ฅ´ω`ฅ) 本博客基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. jd
    Windows Chrome 107.0.0.0
    2 年前
    2022-12-07 15:46:04

    我现在用的是vercel一键部署的,感觉也还好(/ω\)

    • 博主
      jd
      Windows Edge 107.0.1418.62
      2 年前
      2022-12-07 16:08:32

      还行吧,多种方案。主要是RSShub这个应用给力啊!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇