自建 RSSHub,打造你的专属信息聚合神器!

本文着重讲讲根据 Docker 如何自建 RSSHub。

当然,根据官网文档,使用 npm/Vercel 的方式也是可以的,也很简单。

先声明下:

  • 如果没有编程基础的话,搭建起来会有点麻烦,这没关系,每天学习一点,慢慢搭建,总能成功的。
  • 网上有不少一键部署的教程,Vercel 一键部署 RSSHub
  • 如果你实在不想动手,那就用我上一篇博客提到的 RSSHub 镜像实例,搭网友的便车。

什么是 Docker

如果你不了解什么是 Docker,可以看看我写的 Docker 教程:https://www.peterjxl.com/Docker,看前几篇文章就行。

Docker 其实不是很复杂,能安装、启动、了解一些常用命令就可以完成日常的使用了。

如果你觉得我的博客比较难懂,也可以去看其他人写的教程,网上有很多。

官网文档

可以先简单看看官网文档(访问不到的话可以看看镜像站):

关于镜像的问题

默认的镜像是:diygod/rsshub

但我推荐使用 diygod/rsshub:chromium-bundled​,该镜像还包括了 puppeteer​,这是一个 Node 库,有些 RSS 源需要它。

例如,我原先使用的是 diygod/rsshub​,在订阅 B 站用户动态的时候,就遇到报错:

Error: Could not find Chrome (ver. 123.0.6312.86). This can occur if either 1. you did not perform an installation before running the script (e.g. `npx puppeteer browsers install chrome`) or 2. your cache path is incorrectly configured (which is: /app/node_modules/.cache/puppeteer). For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.

经过这些参考的 issue,才知道换一个镜像,后续就没报错了:

Docker Compose

我这里使用 Compose 方式,就不用下载镜像后再配置了。新建 docker-compose.yml 文件,内容如下:

services:
    rsshub:
        # two ways to enable puppeteer:
        # * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
        # * (consumes more disk space and memory) leave everything unchanged
        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'  # marked
        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

volumes:
    redis-data:

PS:该文件来自官网 https://github.com/DIYgod/RSSHub/blob/master/docker-compose.yml,我这里仅仅是修改了镜像为 diygod/rsshub:chromium-bundled

创建 volume 持久化 Redis 缓存:

docker volume create redis-data

启动(加了 -d​ 是后台启动的意思。如果不加则是前台启动,一关闭终端就会停止):

docker compose up -d

停止:

docker compose down

然后我们就可以开始订阅啦~

订阅 bilibili

订阅的时候,注意有些路由是要做配置的,原因在之前的博客讲“RSS 的没落”的时候也讲过。

例如,订阅 B 站需要 Cookie(可以理解为登录后的凭证,感兴趣的可以看我的另一篇博客:Cookie 笔记

官网文档是这样说的:

我觉得这个步骤有点太简单了,我折腾了好久、查了很多 issue 才达到这个功能,接下来就详细说明下如何操作。

首先登录 bilibili,然后打开 https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8

然后按 F12 键打开浏览器的控制台,切换到 Network (网络)面板:

再次刷新网页,并且查找 dy 开头的网络请求,然后找到请求标头里的 Cookie 字段:

然后可以双击该字段,就会全选,然后按下 Ctrl + C 复制(注意 Cookie 是一个很长的字符串,这里我截图只截了一部分,此外不同路由需要的字段也不尽相同,具体请参考官网文档)

然后我们在 docker-compose.yml 的同级目录下,新建 rsshub.env 文件(新建 txt 后,然后改后缀名),文件内容格式为:

BILIBILI_COOKIE_{UID}=[Cookie]

例如我的文件内容如下:

BILIBILI_COOKIE_12345678 = buvid3=6049693D-979D-D59F-D0EF-02E96541F39075143...

注:

  • 这个文件是 Docker​ 的环境变量文件
  • 关于文件名:env​ 是后缀,不能改;而 rsshub​ 是应用的名字(在 docker-compose.yml​ 里配置的)。
  • 如果只命名为 .env​,会因为“. 开头的文件和目录被视为隐藏文件”而读取不到
  • UID 随便填,填个 123456 都行

然后重启 RSSHub 即可,这样后续就可以订阅 B 站动态了。

注意:cookie 会更新,更新后原本的就会失效,导致 rsshub 抓取失败。所以需要定期更新,并且重启 docker。如果不提供 Cookie 或者 Cookie 已经失效了,那么订阅时会提示:

Error: 503 Service Unavailable

一些方案:

  • 方法一:在浏览器无痕模式(隐身模式)下登录后获取相应的 Cookie。因为用户通过浏览器访问才会触发 Cookie 刷新,所以可以用该方法规避,能极大地延长 Cookie 有效时间。
  • 方法二:使用 CookieCloud 同步 Cookie。这一步较为负责,不展开讲。

我平时用的是 Chrome 浏览器,然后我通过 Edge 浏览器获取的 Cookie,也能用很长一段时间。

参考的 issue:

RSSHub 日常维护

由于我是在 Windows 上使用,因此新建了一个 restart.bat​ 文件,里面的内容是:

docker compose down

docker compose up -d

pause

这样我双击该 bat 文件,即可完成 RSSHub 的重启,而不用动手输命令:

如果你使用的是 Linux,也可以新建一个 shell 脚本完成类似的功能。

——完——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeterJXL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值