This page looks best with JavaScript enabled

RSSHub | 利用Docker-compose搭建RSS生成器

开源、简单易用、易于扩展,可以给任何奇奇怪怪的内容生成RSS订阅源。

 ·  ☕ 3 min read

前言

正逢女权主义播客【海马星球】被墙,同为社科播客的【小声喧哗】在微博中呼吁:

播客的用户朋友们,有一句话可能你已经听到各种播客重复了无数遍:

请使用泛用性播客客户端定阅播客

RSS feed是一个有一些古老的互联网技术;在没有智能手机、没有app、没有微信和社交媒体的时候,RSS feed是一条简单的电子流,将我们手里的麦克风和你们耳朵里的震动连起来。

你们喜欢的播客大多会在shownotes中提供RSS feed;拷贝这个feed就可以在你喜欢的泛用性客户端(比如overcast,google podcast,pocketcast或者苹果自带的客户端)找到通过RSS订阅的入口。

在我们手里的数字空间已经被各种app、🧱占地为王的情况下,越多人使用泛用性客户端订阅,播客主的表达就能越勇敢。拜托大家了。

@小声喧哗Loud_Murmurs

意识到RSS的重要性,我搭了这个RSSHub。Docker-compose操作很简单,这里记录一下我的搭建过程。

注意:
本教程省略了一些与Docker&Docker compose相关的知识。如果没有安装,请参考这里安装。

搭建过程

看了一下RSSHub项目docker-compose.yml,有那么一丢丢的不满意:

version: '3'

services:
    rsshub:
        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'
        depends_on:
            - redis
            - browserless

    browserless:
        # See issue 6680
        image: browserless/chrome:1.43-chrome-stable
        restart: always
        ulimits:
          core:
            hard: 0
            soft: 0

    redis:
        image: redis:alpine
        restart: always
        volumes:
            - redis-data:/data

volumes:
    redis-data:

emmm,这样的话需要额外创建volume持久化Redis缓存,后续不好维护,可以直接把volume固定以文件形式存在。又参考了sleele的博客使用watchtower更新容器和镜像,最后内容如下:

version: '3'
 
services:
    rsshub:
        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'
        depends_on:
            - redis
            - browserless
 
    browserless:
        image: browserless/chrome:1.43-chrome-stable
        restart: always
 
    redis:
        image: redis:alpine
        restart: always
        volumes:
            - ./redis:/data
 
    watchtower:
        image: containrrr/watchtower
        container_name: watchtower
        restart: always
        environment: 
            - TZ=Asia/Shanghai
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        command: rsshub_service.rsshub_1 --cleanup --interval 1200

把以上内容写入docker-compose.yml中,保存,然后运行docker-compose up -d就搭好了。

Nginx反向代理

如果你没有域名,可以跳过这步。

首先去DNS服务商添加一条指向服务器ip,内容为域名的A记录,然后回到服务器运行以下命令:

sudo -i   #切换至root用户
apt install nginx -y    #安装nginx
apt install snapd
snap install core   #安装snap
snap install certbot --classic  #使用snap安装certbot

运行nano /etc/nginx/conf.d/rsshub.conf,内容如下:

server {
    listen 80;
    server_name 你的域名;       
    location / {
                proxy_pass http://localhost:1200;
                proxy_redirect off;
                proxy_set_header        Host    $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

测试配置文件是否有错误(试运行):

nginx -t

若没有错误,生效新的配置文件并运行 Nginx,开机启动:

nginx -s reload
systemctl start nginx
systemctl enable nginx

运行sudo certbot --nginx获取SSL证书。

使用

如果此时访问你的域名(没有域名则访问https://服务器ip:1200/)显示这个页面:

那么恭喜你,你已经有了自己的RSSHub了。如何使用你的RSSHub请看官方文档,按照官方文档的路由格式替换订阅信息,将示例域名https://rsshub.app直接替换为你自部署的域名即可。如有问题请看常见问题

后记

关于女性主义播客的推荐,这个豆瓣帖有列出九个质量不错的播客。为了防止此帖也404(可能有点杞人忧天),而Archive也不能备份豆瓣内容,所以我手动备份到了Github Issue上,操作方式参考这里

blobsignok 万物皆可 RSS!


Roelxy
WRITTEN BY
Roelxy
新世紀摸魚戰士