群晖

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

波比AI · 5月2日 · 2025年本文共6326个字 · 预计阅读22分钟6次已读

RSS(聚合内容),一种 “古老” 的消息来源格式,古老到连著名的 RSS 聚合器兼阅读器 Google Reader 都快停止服务十年了。但近几年随着开源项目 RSSHub 发布极大程度上丰富了可订阅内容,加之 RSS 本身无算法、纯用户主导(须用户主动订阅)的特性和对各互联网公司的算法推荐的唾弃,让 RSS 这一古老协议焕发了第二春。我也是从那时候开始重新依赖 RSS 获取信息。

想要使用 RSS 作为自己的信息获取工具,就一定需要一个 RSS 聚合工具,将你所感兴趣的信息源全部集中到一处,通常可以使用下面的几种方案:

  • 本地应用程序(如 Reeder),但这种方案无法原生多设备同步,订阅源和阅读状况只在单台设备内存储,必须配合商业网络服务或自建服务来跨设备同步内容。
  • 商业订阅服务(如 Feedly、Feedbin),但大多数需要每月支付一定的订阅费用。
  • 自建服务(如 FreshRSS、tt-RSS、Miniflux),需要花一定的心思自行搭建,大多需要自行准备服务器,同样需要一定的物质(金钱)成本。

RSS聚合软件对比

今天我们要讨论的是第三种方案,目前常用的自建 RSS 聚合器框架主要有:

  • FreshRSS,功能强大、易于使用,基于 PHP 和 SQL 数据库
  • Tiny Tiny RSS(tt-RSS),功能非常强大、扩展性极强,基于 PHP 和 SQL 数据库
  • Miniflux,极度简约但应有的功能一个不缺,基于 Go 语言

可以看出,前两个框架虽然功能上更强大且搭建起来比较简单(可以使用 Docker,或者直接使用 PHP 虚拟主机搭建)但受限于 PHP+SQL 的组合,整个框架都显得比较 “重” 或者慢,且无法做到真正的 0 成本。因部署在自己群晖服务器,追求极致性能体验。所以本文部署的是 tiny tiny rss(tt-RSS).

FreshRSS TTRSS
优点 1、界面UI简洁,好看,很容易习惯; 2、安装简单,无需繁琐的配置; 3、支持自主搭建LNMP环境安装服务; 4、支持sqlite数据库,简单不用配置; 5、出现订阅失败的网站可以强制订阅。 1、主题不多,但还算简洁,跟freshrss差不多; 2、订阅推送时间正常; 3、订阅失败能找到原因; 4、火狐浏览器导出备份正常; 5、听说有手机app支持,我没试过。
缺点 1、像上面说的,突然出现无法订阅的情况,也不清楚什么原因; 2、订阅推送的时间貌似不太对,不知道是不是我配置的问题,一直没找到原因; 3、火狐浏览器导出备份出现错误,chrome内核的浏览器正常; 1、安装复杂,我是折腾了很久才搞定的; 2、订阅失败的网站不能强制订阅; 3、不支持自主搭建LNMP环境安装;

TT-RSS部署

docker-compose.yml如下:

services:
  service.rss:
    image: wangqiru/ttrss:latest
    container_name: ttrss
    labels:
      com.centurylinklabs.watchtower.enable: true
    environment:
      SELF_URL_PATH: http://192.168.1.4:8999 # please change to your own domain
      DB_PASS: ttrss # use the same password defined in `database.postgres`
      PUID: 1026
      PGID: 100
    ports:
      - 8999:80
    volumes:
      - ./feed-icons:/var/www/feed-icons/
    networks:
      - public_access
      - service_only
      - database_only
    stdin_open: true
    tty: true
    depends_on:
      - rsshub
      - service.mercury
      - service.opencc
      - database.postgres
    restart: always

  service.mercury:
    # set Mercury Parser API endpoint to `service.mercury:3000` obobyain TTRSS plugin setting page
    image: wangqiru/mercury-parser-api:latest
    labels:
      com.centurylinklabs.watchtower.enable: true
    networks:
      - public_access
      - service_only
    restart: always

  service.opencc:
    # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
    image: wangqiru/opencc-api-server:latest
    labels:
      com.centurylinklabs.watchtower.enable: true
    environment:
      NODE_ENV: production
    networks:
      - service_only
    restart: always

  rsshub:
    image: diygod/rsshub
    restart: always
    labels:
      com.centurylinklabs.watchtower.enable: true
    environment:
      PORT: 80
      NODE_ENV: production
      CACHE_TYPE: redis
      REDIS_URL: 'redis://database.redis:6379/'
      PUPPETEER_WS_ENDPOINT: 'ws://service.browserless:3000'
    networks:
      - public_access
      - database_only
    depends_on:
      - database.redis
      - service.browserless

  service.browserless:
    image: browserless/chrome
    labels:
      com.centurylinklabs.watchtower.enable: true
    restart: always
    ulimits:
      core:
        hard: 0
        soft: 0

  database.redis:
    image: redis:alpine
    restart: always
    labels:
      com.centurylinklabs.watchtower.enable: true
    volumes:
      - ./redis:/data
    networks:
      - database_only

  database.polaoxiongb2cstgres:
    image: postgres:13-alpine
    labels:
      com.centurylinklabs.watchtower.enable: true
    environment:
      - POSTGRES_PASSWORD=ttrss # feel free to change the password
    volumes:
      - ./postgres/data:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
    networks:
      - database_only
    restart: always

  utility.watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_POLL_INTERVAL=86400
    restart: always

volumes:
  feed-icons:
  redis-data:
  postgres-data:


networks:
  public_access: # Provide the access for ttrss UI
  service_only:
    # Provide the communication network between services only
    internal: true
  database_only:
    # Provide the communication between ttrss and database only
    internal: true

watchtower 自动更新

如果使用本地的 RSSHub 服务,有一个小问题是它经常更新…, 如果手动来的话会很麻烦,所以我们可以使用 watchtower 来监控他们进行自动更新.
我们再新建一个叫watchtower的文件夹,然后在里面再创建一个docker-compose.yml文件

mkdir rsshub
cd rsshub
touch docker-compose.yml

然后在里面写如下内容:

versilaoxiongb2con: "3.8"
services:
  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: always
    environment:
      TZ: Asia/Shanghai
      WATCHTOWER_LABEL_ENABLE: "true"
      WATCHTOWER_CLEANUP: "true"
      WATCHTOWER_SCHEDULE: "0 30 4 * * *"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

TT-RSS使用体验

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

再比如,在 Windows 电脑上,也可以通过开源免费的 Fluent Reader ,来连接 FreshRSS 服务。

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

就这款 Fluent Reader,甚至还提供了 macOS、Android 和 iOS 版本,可谓相当好用~!

所以,在手机上也行:

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

RSSHub安装

已整合至上访的 ttrss 中

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
        container_name: rsshub
        ports:
            - '9000: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
        container_name: browserless
        ulimits:
            # marked
            core:
                # marked
                hard: 0 # marked
                soft: 0 # marked

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

volumes:
    redis-data:

插件

mercury-parser-api

按我的理解,这是一个可以将任何网上文章结构化抓取下来的一个网络服务,用docker来安装运行这个网络服务了,整个命令如下:

sudo docker run -p 3000:3000 -d --restart=always  wangqiru/mercury-parser-api

安装完成后,通过curl 188.188.188.188:3000命令能返回下面一行,就算成功了,其中ip地址是我杜撰的自己服务器的IP地址:

{"message":"Welcome to  mercury-parser-api API! Endpoint: /parser"}

mercury_fulltext插件

之所以要装这个插件,是我订阅的rss中,有个大侠的rss只有前面一段短文,不给全篇文章,安装这个之后就可以自动把全篇文章给弄到rss上来了。

安装也简单,直接进入tiny tiny rss 后台,插件选择,启用即可:

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

完成了之后从浏览器登入tiny tiny rss 后台,然后启用mercury_fulltext这个插件,完了在feeds的mercury_fulltext填上 IP:3000

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

然后对需要使用该插件的rss源右键进入编辑,然后插件选择使用mercury_fulltext就可以了:

群晖 Docker系列 —— 搭建 tt-rss与RSSHub

软件

Fever API:http://192.168.1.4:8999/plugins/fever/
想要在 ttrss 中订阅 rsshub 的链接,比如 b 站番剧就是http://rsshub/bilibili/bangumi/media/9192

GitHub – seazon/FeedMe: The documents and forum of FeedMe
GitHub – Ashinch/ReadYou: An Android RSS reader presented in Material You style.

问题

无法从指定的网址下载: cURL error 28

Docker自建Tinytinyrss + rsshub
系统:Ubuntu-22.04云服务器
解决思路:进入tinytinyrss docker容器内部,修改/var/www/classes文件夹下config.php,TIMEOUT数字改成120
解决方法:先找到容器id
docker ps
docker exec -it /bin/sh
cd classes
vi config.php

修改以下四行

Config::FEED_FETCH_TIMEOUT => [ 120, Config::T_INT ],  
Config::FEED_FETCH_NO_CACHE_TIMEOUT => [ 120, Config::T_INT ],  
Config::FILE_FETCH_TIMEOUT => [ 120, Config::T_INT ],  
Config::FILE_FETCH_CONNECT_TIMEOUT => [ 120,

数字全改成120
最后 ufw allow 443 打开端口
我是这样解决的

无法订阅 Rsshub 订阅源

ttrss 禁止非80和443端口feed更新,导致不能订阅自建huginn、rsshub。需要在环境变量中添加ALLOW_PORT=1200,3000 端口。

version: "3"
services:
  service.rss:
    image: wangqiru/ttrss:latest
    container_name: ttrss
    ports:
      - 181:80
    environment:
      - SELF_URL_PATH=http://XX.XXX.com # please change to your own domain
      - DB_PASS=XXXXX # use the same password defined in `database.postgres`
      - PUID=1000
      - PGID=1000
      - ALLOW_PORTS=1200,3000  # 加入这个配置,才能访问rsshub和huginn默认的1200,3000端口

参考

在群晖中使用 docker 搭建 TTRSS+RSSHub 并启用 https | tomin 的个人博客

[Total: 0 Average: 0]
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!