玩转 RSS(自建 RSSHub 篇)

本文将介绍如何自行搭建 RSSHub,利用 Watchtower 开启 Docker 容器自动更新,以及启用 Https 访问。

玩转 RSS(自建 RSSHub 篇)
Photo by RSSHub

Telegram 频道 Telegram 群组 membership

一、前言

最近 follow 火了起来,其内置了多个 RSS 源(包括 RSSHub 源)。

但是,由于 RSSHub 的公开实例有 60-120 分钟的缓存时间,相信有不少人可能会想要自建 RSSHub 来减少缓存时间以加快抓取频率(包括我),于是写下了这边文章。

正在摸索如何编写 RSSHub 路由,如有更新会在这里添加新文章的链接。

1.1、什么是RSS,它可以做什么?

RSS 的全称是「简易内容聚合」(Really Simple Syndication),你可能还听过它的另一个称呼:聚合内容。它是一种订阅信息内容的协议。

你可以通过以下两篇文章,深入了解。

RSS - 高效率的阅读方式 - 少数派
RSS是什么RSS的全称是「简易内容聚合」(ReallySimpleSyndication),是一个能让你在一个地方订阅各种感兴趣网站的工具。一个网站支持RSS,就意味着每当它新发布一篇新文章,就会往…
I have special RSS usage skills - DIYgod
Everyone knows that RSS is a format specification used for message aggregation, with advantages such as higher reading efficiency, better…

RSSHub开发者撰写,标题:我有特别的 RSS 使用技巧。文章可选中文/英语

1.2、为什么要用 RSS?

简单来说:摆脱算法精准推送,从而慢慢形成信息茧房。避免信息过载

信息过载(英语:information overload),又称信息肥胖症(英语:infobesity),是指接受太多信息,反而影响正常的理解与决策,它往往于日常信息过多有关。
2023 年为什么我们还要使用 RSS?探索、聚合和专注 - 少数派
什么是RSSRSS,ReallySimpleSyndication(简易信息聚合),是一种订阅信息内容的协议。与博客一同流行于2000–2013年之间,后来大家开始习惯使用社交媒体(如微博)和聚合阅读…

需要注意的是:RSS 不是所有人的最优解。即使开始使用 RSS,信息获取和阅读的逻辑如果跟以前一样,反而会变成负担。


二、关于 RSSHub

1. RSSHub是什么

RSSHub 是一个开源的 RSS 生成器,它可以帮助用户从几乎任何网站生成 RSS feeds,即使这些网站本身不提供 RSS 功能。RSSHub 通过解析网页内容、API 接口或其他公开数据,自动生成符合 RSS 标准的内容订阅源,方便用户通过 RSS 阅读器订阅和阅读更新。

2. RSSHub 的主要特点

  1. 支持广泛的网站:
  • RSSHub 支持多种类型的网站,包括社交媒体(如 Twitter、Instagram)、新闻网站、博客、论坛、视频平台(如 YouTube)、电商平台(如淘宝、京东)等。即使某些网站不提供官方的 RSS feed,RSSHub 也可以帮助生成。
  1. 模块化设计:
  • RSSHub 采用模块化设计,支持社区贡献的多种路由。用户可以根据需要定制路由,从特定站点抓取内容生成 RSS。
  1. 开源和自托管:
  • RSSHub 是一个开源项目,用户可以根据自己的需求自托管服务,或使用官方或社区提供的公共服务。
  1. 强大的定制功能:
  • 用户可以根据自己的需要配置请求参数,例如过滤关键词、排序等,以获得个性化的订阅内容。
  1. 隐私友好:
  • RSSHub 通过自托管方式让用户可以掌控数据抓取过程,避免隐私泄露风险,适合对隐私有较高要求的用户。

3. RSSHub 的常见应用场景

  • 订阅没有官方 RSS 功能的网站,例如一些新闻门户或博客。
  • 整合不同社交媒体平台的内容,方便统一在 RSS 阅读器中查看。
  • 通过过滤或排序功能,自动获取符合特定需求的更新内容,例如电商平台的折扣通知等。

使用示例:

假设你想订阅某个新闻网站的特定分类,而该网站没有提供 RSS feed,你可以通过 RSSHub 来获取,例如通过以下 URL:

https://rsshub.app/nytimes/technology

这将生成纽约时报技术板块的 RSS 订阅源。

总结来说,RSSHub 是一个功能强大且灵活的工具,特别适合希望整合和定制多平台信息的用户,它能够显著提升内容获取的效率。

🔔
以上内容由 ChatGPT 总结

三、为什么要自行部署 RSSHub?

3.1、提高可用性

  • 虽然 RSSHub 提供免费的官方实例,但 rsshub.app 已被墙导致国内无法直连使用,如果你没有24小时开启科学上网的习惯,用起来可能会有点麻烦;
  • 由于官方实例使用的人很多,时不时被一些有严格的反爬策略的网站屏蔽(如微博、知乎等),需要自行部署以提高可用性。

3.2、自定义程度高

  • 部分人群使用官方实例后感觉有些地方不太满意,这时候就需要部署适合自己的 RSSHub 配置,
例如:官方实例默认有 60-120 分钟的缓存时间,如果你希望有更短的缓存时间(更快的更新内容),则需自行部署
  • 适合有控制欲的人群,希望一切掌握在自己手里;
  • 希望对特定的网页编写自定义规则
  • 其他更多可自定义的配置(可选项,用默认配置部署也可以做到开箱即食)。
可选的自定义配置


四、部署 - Nas 端

由于我个人并没有购置 Nas,请参考以下文章进行搭建。

  1. 结合内网穿透实现无公网IP远程访问 rsshub
  2. 在群晖使用 Docker 部署 RSSHub
  3. NSA下搭建RSSHub

五、部署 - 一键部署到免费托管平台

RSSHub 支持多种部署方式,你可以部署到购买的 Linux 服务器、本地、NAS 甚至是树莓派。

也可以一键部署到免费托管平台,例如 Railway、Heroku、Zeabur、Vercel、Fly.io、Sealos、PikaPods

你只需要从上述任意方案中,选择一个最合适你的方案。

RSSHub 为所有部署方式都编写了文档,其中一键部署可以从这里开始阅读。

优势:

  • 只需要注册托管平台以及 GitHub 的帐号,然后一键搭建即可。
  • 服务器打理交给平台,你只需要专注 RSSHub 本身的使用即可。(适合不喜欢折腾的)

缺点:

  • 托管平台的免费套餐一般都有请求数/流量的限制。
⚠️
如果你认为免费套餐不足以满足你的需求,可以考虑付费升级套餐,或自行部署到服务器端(参考下文)。

六、部署 - 自托管(Self-Hosting)

下文将以 Ubuntu 系统为例,并使用 Docker Compose 部署。

无需担心!即便你是小白,只需要跟着教程一步步复制粘别也能顺利完成安装!
💡
如果你是 Linux 系统方面的小白,我更推荐使用全新的系统环境操作,否则后续可能出现一些你不知道如何修复的迷之报错。

6.1、准备步骤

  1. 服务器一台,Docker 镜像支持以下架构;
  • linux/amd64
  • linux/arm/v7
  • linux/arm64
  1. ssh 连接工具,例如:XshellFinalShell 、Termius 、Mac 终端 等;
  2. 域名一个(可选,不绑定域名也能通过ip直接访问)。
  3. 安装 Docker 以及 Docker-compose
💡
纯小白推荐使用 FinalShell,支持中文,可以通过 UI 交互新增/修改文件。

6.2、连接 ssh 并更新软件包

💡
以下内容可以直接复制黏贴并运行,系统会自动忽略带#那栏的内容。

如果你看不懂我在说什么,那么请依次复制不带#的命令行 即可。

系统询问可能会占用xxxMB,y/n?请输入 y 然后回车

首先,我们需要通过 ssh 连接工具进入服务器

# 通过终端连接SSH
ssh root@你的服务器ip

非终端请忽略此步骤(在 ssh 连接工具内填写连接信息)

更新软件包,以确保软件包列表和已安装的软件包是最新的。

# 更新系统软件包
sudo apt update && apt upgrade -y

6.3、安装 Docker 以及 Docker-compose

请按照顺序安装 Docker 以及 Docker-compose

6.3.1、安装 Docker

原文来自 DigitalOcean
# 安装几个先决条件的软件包,这样apt就可以通过 HTTPS 使用软件包:
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 然后将官方 Docker 仓库的 GPG 密钥添加到您的系统中:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 将 Docker 仓库添加到 APT 源中:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 请再次更新您现有的软件包列表,以便能够识别新增内容:
sudo apt update

# 安装 Docker
sudo apt install docker-ce

Docker 现在应该已经安装好了,进程守护也已启动,并且设置为开机自动启动。检查一下它是否在运行:

sudo systemctl status docker

control/CTRL + Z 退出检查

输出的内容应该与下面的格式类似,显示服务处于激活和运行状态:

Output
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-10-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 7854 (dockerd)
      Tasks: 7
     Memory: 38.3M
        CPU: 340ms
     CGroup: /system.slice/docker.service
             └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

如果你正在使用非 root 用户,请参考原文的 步骤 2 — 在不使用 Sudo 的情况下执行 Docker 命令(可选)


6.3.2、安装 Docker-compose

原文来自 DigitalOcean
理论上,上面的 Docker 安装脚本已包含了 Docker Compose。

仅在输入 docker compose version 命令后未得到版本号时,执行以下操作。

为了确保你获得最新稳定版本的 Docker Compose,你需要从它的官方 Github 仓库下载这个软件。

首先,确认他们发布页面上的最新版本。在撰写本文时,最新的稳定版本是2.29.7

使用以下命令下载:

# 创建目录
mkdir -p ~/.docker/cli-plugins/

# 下载 Docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

请将第二个命令版本号(v2.29.7)修改为当前的最新版本。

接下来,设置正确的权限,使 docker compose 命令可以执行:

chmod +x ~/.docker/cli-plugins/docker-compose

要验证安装是否成功,您可以运行:

docker compose version

您会看到类似这样的输出:

Output
Docker Compose version v2.29.7

6.4、安装 RSSHub

# 或通过命令行下载 docker-compose.yml
wget https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml
  • 检查有无需要修改的配置
vi docker-compose.yml  # 也可以是你喜欢的编辑器

填写完毕后在英文模式下,输入冒号wq 保存文件 :wq ——Linux学习—退出vi编辑模式

推荐添加 container_name 以指定容器名称

services:
    rsshub:
        image: diygod/rsshub
        # 添加 container_name 以指定容器名称
        container_name: "rsshub"
  • 启动
# 运行 RSSHub 
docker compose up -d

在浏览器中打开 http://你的服务器ip:1200,enjoy it! ✅

注意:1200为默认端口,如果你有修改过请填写修改后的端口号。

尝试使用 http 访问时,托管在 Cloudflare 的域名,加密模式不能为 完全 或更高级别。

你可以临时调整为灵活,或临时将域名的 DNS 解析状态从Proxied (云图标橙色) 改为 DNS only (灰色),来尝试是否配置成功。

如有必要, 你还可以使用这些命令检查容器的运行情况:

# 开放 1200 端口
sudo ufw allow 1200
sudo ufw reload

如果你使用了 防火墙(ufw、iptables) 或 云服务的安全组(如 阿里云、AWS、GCP),请确保1200 端口是开放的

# 查看运行状态
docker ps -a

# 查看运行日志(如果你没有指定容器名,可能有所不同,参考下面的「自动更新RSSHub」章节)
docker logs rsshub

6.5、自动更新 RSSHub

参考自 Bensz

这里我们需要使用到 Watchtower,一个经典的用于自动更新 Docker 容器的工具。

# 创建一个文件夹
mkdir -p ~/Watchtower

# 进入文件夹
cd ~/Watchtower

# 创建 docker-compose.yml
vi docker-compose.yml  # 也可以是你喜欢的编辑器

填入以下配置

version: "3"
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: rsshub  --cleanup --schedule "0 0 6 * * *"
    
    # 在command中可以添加多个容器名,例如:
    # command: rsshub watchtower  chatgpt-proxy-server-warp  bitwarden wallabag ttrss alist --cleanup --interval 3600

command 中的容器名而不是镜像名。如果你没有指定容器名,那么每个人容器名的都是不一样的

  • --cleanup:更新镜像后自动删除旧镜像。
  • --interval 3600:每3600s(1h)检测更新1次。
  • --schedule "0 0 6 * * *"代表每天6时0分0秒进行一次检测。
💡
每个人的容器名不一样,请使用 docker ps -a 命令查看
NAMES 一栏为容器名(修改前)

如果你想将它更改为 rsshub,参考以下命令:

# docker rename 原容器名  新容器名
docker rename rsshub-rsshub-1  rsshub
NAMES 一栏为容器名(修改后)

如果你想要在更新后收到通知,可以在这个位置添加以下内容(参考 Watchover 文档)

..。省略
    restart: unless-stopped
    environment: 
      TZ: Asia/Shanghai
      WATCHTOWER_NOTIFICATION_TITLE_TAG: Oracle01 # 邮件抬头
      WATCHTOWER_MONITOR_ONLY: 'false'
      WATCHTOWER_NOTIFICATIONS: email
      WATCHTOWER_NOTIFICATION_EMAIL_FROM: hwb2012@qq.com # 发送邮件
      WATCHTOWER_NOTIFICATION_EMAIL_TO: huangwb886@gmail.com # 接收邮件
      # SMTP帐号信息
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER: smtp.qq.com
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: 465
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: hwb2012@qq.com
      WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: xxxxxxxx # 按需改密码
      WATCHTOWER_NOTIFICATION_EMAIL_DELAY: 2
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
....省略

smtp 可以是任何支持的邮箱,包括 Gmail、Yandex 等等。

配置说明以及更多自定义请参考 Watchover 官方文档

最后,运行 Watchtower

# 运行 Watchtower
docker compose up -d

# 查看运行状态
docker ps -a

# 查看运行日志(容器名可能有所不同)
docker logs watchtower

  • 如果你希望 watchtower 自动更新全部 docker 容器的相关镜像,不指定任何容器即可。或者运行以下指令(与上面的方法二选一)
# 自动更新全部 docker 容器
docker run --detach \
    --name watchtower \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

默认为 24 小时检查一次


七、部署后-配置域名并开启 Https(可选)

只需要下列方式中选择最适合自己的一种即可,非公开实例(自用)不开也行。

如果你不配置域名直接使用 ip 访问也是可行的,但是域名应该会比 ip 更容易记住。

你还可以参考 7.2 中的 可选项 中的 3.为 docker 项目配置反向代理 章节,实现 ip/域名(不带端口号)访问

如果你尚未了解过相关知识,请从 7.1 开始阅读。

7.1、通过 CloudFlare 直接开启 HTTPS

在 CloudFlare 开启全站 Https
本文将介绍如何注册 Cloudflare,并将域名托管在 Cloudflare,最后利用 CloudFlare 的「灵活模式」开启全站 Https。

利用 CloudFlare 的灵活模式,免证书开启 Htpps

7.2、使用 Google Trust Service 证书,开启 Htpps,同时启用ECC+RSA双SSL证书

申请 Google Trust Service 证书,启用 ECC+RSA 双证书开启 Https,支持证书自动续期
本文共分为三步,分别是:获取EAB密匙,利用 acme.sh 申请证书,设置 Nginx 跳转

利用 ACME 脚本申请证书


八、实用技巧

搭配 RSSHub Radar 使用,它可以自动检测网页是否已经支持RSS。 并直接提取订阅 RSS 的链接

RSSHub Radar - Subscribing to an RSS feed shouldn’t be this difficult. - DIYgod
If you ask me whether RSSHub can change the fate of RSS, I don’t know, but what I know is that not accepting fate is the fate of RSSHub…

标题:RSSHub Radar — 订阅一个 RSS 源不应该这么难


Telegram 频道 Telegram 群组 membership

目录
很好! 下一步, 完成电子邮件的验证以获得 Yummy's Blog 的完全访问权限.
“欢迎回来!您已成功登录
您已成功订阅 Yummy's Blog.
成功!您的账户已经完全激活,您现在可以访问全部内容了。
您的账单信息已更新!
您的账单信息需要更新!