RSSHub 开源的RSS订阅源搭建

52 min read

RSSHub 是一个开源的RSS订阅源生成器,它可以为各种内容生成RSS订阅源,包括但不限于社交媒体、新媒体、论坛等。RSSHub的特点是简单易用、易于扩展,它利用开源社区的力量快速发展,目前已经适配了数百家网站的上千项内容

RSSHub的使用者可以通过RSS阅读器、IFTTT、Tiny Tiny RSS及其插件等工具来订阅和阅读通过RSSHub生成的内容。RSSHub的作者DIYgod表示,他最喜欢的RSSHub条目是“RSSHub有新路由啦”,这个条目能够让用户及时了解RSSHub的更新和新功能

此外,RSSHub可以通过Docker容器进行部署,也可以在Vercel等平台上免费部署。用户可以通过官方文档或者镜像站点来了解如何配置和使用RSSHub

RSSHub还支持与浏览器扩展RSSHub Radar以及移动端辅助应用RSSBud(iOS)和RSSAid(Android)配合使用,以便用户在不同设备上发现和订阅内容

开源社区对RSSHub的贡献包括新路由的添加、新功能的开发和bug修复。RSSHub的官方文档提供了详细的使用指南和路由信息,用户可以根据自己的需求找到相应的订阅源

对于那些不想自己部署RSSHub的用户,还可以选择使用其他人搭建好的RSSHub服务

rsshub 如何生成 rss 订阅源

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以为各种内容生成 RSS 订阅源

生成订阅源:例如,如果你希望订阅 Twitter 上一个名为 DIYgod 的用户的时间线,根据 Twitter 用户时间线路由的文档,路由为 /twitter/user/:id,把 :id 替换为用户名,得到路径为 /twitter/user/DIYgod,再加上域名 https://rsshub.app,一个订阅源就生成了:https://rsshub.app/twitter/user/DIYgod。然后你可以把 https://rsshub.app/twitter/user/DIYgod,添加到任意 RSS 阅读器里来使用

通用参数:RSSHub 支持很多实用的参数,比如内容过滤、全文输出等。所有通用参数可以使用 & 连接组合使用,效果叠加。例如,可以使用 filter 参数过滤内容,使用 limit 参数限制最大条数,使用 mode 参数来开启自动提取全文内容功能

如果你需要自定义订阅源规则,可以在服务器自行搭建 RSSHub 服务,通过对 RSSHub 源码进行修改就可以实现自定义规则的 RSS 订阅源。RSSHub 是用 Javascript 写的,因此要修改源码,必须要具备 Javascript 编程知

自行部署 RSSHub

使用到docker-compose , dockker 和 docker-compose的安装 参见

version: '3.9'

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
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'  # marked
            ACCESS_KEY: cHthEdScE85LMW
        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

    warp-socks:
        image: monius/docker-warp-socks:latest
        privileged: true
        restart: always
        volumes:
            - /lib/modules:/lib/modules
        cap_add:
            - NET_ADMIN
            - SYS_MODULE
        sysctls:
            net.ipv6.conf.all.disable_ipv6: 0
            net.ipv4.conf.all.src_valid_mark: 1
        healthcheck:
            test: ["CMD", "curl", "-f", "https://www.cloudflare.com/cdn-cgi/trace"]
            interval: 30s
            timeout: 10s
            retries: 5

volumes:
    redis-data:

配置nginx

nginx的安装和配置参见

配置路径为: /etc/nginx/sites-available/rss.conf

server {
    server_name rss.x.com;  # 请根据实际情况修改你的域名

    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/rss.x.com.crt;
    ssl_certificate_key /etc/nginx/ssl/rss.x.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    

    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
        try_files $uri =404;
    }

    location / {
        client_max_body_size 64m;
        proxy_http_version 1.1;
        proxy_pass http://localhost:1200;  
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Accept-Encoding gzip;
        proxy_read_timeout 300s;
    }
}

server {
    server_name rss.x.com;  # 请根据实际情况修改你的域名

    listen 80;
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
        try_files $uri =404;
    }
    location / {
        return 301 https://$host$request_uri;
    }
}

使用当前配置可用

sudo ln -s /etc/nginx/sites-available/rss.conf /etc/nginx/sites-enabled/rss.conf

nginx 配置完成后使用 nginx -t 进行检查 然后再使用 nginx -s reload加载配置

其中 ssl 相关的密钥生成方法如下

acme.sh --issue -d example.com -w /var/www/letsencrypt

acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com.key  \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--ca-file        /etc/nginx/ssl/example.com.ca.crt \
--reloadcmd     "systemctl restart nginx"

注意需要提前在nginx 中配置验证url