用 Tiny Tiny RSS 搭建自己的 RSS 订阅服务,阅读不再受控

利用 Docker Compose 安装 Awesome TTRSS

文章目录
  1. 0、Docker 和 Docker Compose 分别是什么
  2. 1、Docker Compose 安装 Awesome TTRSS
  3. 2、Nginx 反向代理
  4. 3、Tiny Tiny RSS 的使用
  5. 4、更进一步,安装插件和主题

Tiny Tiny RSS 是一款基于 PHP 的免费开源 RSS 聚合阅读器,但官方似乎已经长期没有更新,于是有人热心网友封装了这个 Awesome TTRSS,一个“一站式容器化”的 TTRSS 解决方案,通过提供简易的部署方式以及一些额外插件,以提升用户体验…简单点理解就是官方套壳。经我测试这安装好的 Awesome TTRSS 和原版的 Tiny Tiny RSS 确实就是同一个东西,只不过稍微优化添加了插件包,另外安装过程相对要简单一点点而已,本文记录 Kevin 本次折腾过程及经验总结,老鸟略过。

话说这“时尚”真是个圈,最近用 RSS 的朋友似乎又慢慢躲起来了…前几天碰巧看到王老师的蚁阅,三栏式分布的界面简洁、清晰又不失实用,甚合我意。恰好我最近有好好阅读的需求,于是也部署了一个试试,但翻遍了设置和文档硬是没找到两栏变三栏的方法(后来请教才得知是他让原作者定制的)。索性更进一步了解了当下流行的自建 RSS,包括圈内大佬开发,长得像微信朋友圈的 Moments;同样简洁而且支持整篇文章下载分享的 Miniflux;轻量且知名的FreshRSS以及尚在服役的 Tiny Tiny RSS。整体对比下来依然觉得 TTRS 稍微好用一些,它完全免费、支持搜索、功能齐全、第三方插件&App 丰富以及有着还不错的界面优化…虽说它反应慢点,不过阅读嘛,又不是玩儿游戏,慢点儿也无所谓喽。

其实早在九年前我就自己安装过 Tiny Tiny RSS,它每天产生的数据让我那会儿的小主机承受不了,索性就卸载转去 Inoreader 了,但因为众所周知的原因和巨量的广告,我打开 Inoreader 的次数屈指可数,平时访问博客和链接全靠收藏夹,虽然麻烦,但时间久了也就习惯了。这不正好前天头热冲了一台 VPS,正好折腾折腾顺便把 Docker 相关最常用的命令学习记录一下,形成此文。

利用Docker Compose安装Awesome TTRSS
九年过去了,Tiny Tiny RSS 界面没啥变化,以及熟悉的 Finle.me 域名,大家还记得么?

0、Docker 和 Docker Compose 分别是什么

Docker 是一种技术,可以让开发者把他们的应用程序和所有需要的东西都打包到一个“容器”里。这个容器可以在任何地方运行,就像一个移动的盒子一样。这样一来,开发者可以确保他们的应用程序在不同的电脑或服务器上都能够一样地运行,而不用担心环境的差异。 除此,Docker 还可以让开发者更容易地分享他们的应用程序,让其他人可以很方便地运行起来。

Docker 常用命令解释

我们经常会看到如下第一行这样的代码,它实际上是完全等于后面几行代码,作为小白的我们在折腾时完全照抄大概率不会出错。但有时候根据环境的不同,或者想稍微自定义一下时,不知其所以然就很容易出错了。

docker run -it --name PostgreSQL --restart always -e TZ='Asia/Shanghai' -e POSTGRES_PASSWORD='shephe.com' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /常用路径/mypgsql/:/var/lib/postgresql -p 55432:5432 -d postgres

// 换成多行更容易阅读
docker run -it \
	--name PostgreSQL \  ###定义容器的名称,容器名允许大小写和空格
	--restart always \  ###定义容器的重启策略,always 意为“停止后马上重启”,我一般选择“on-failure:仅非正常退出时重启”
	-e TZ='Asia/Shanghai' \  ###-e 用于设置环境变量,如时区
	-e POSTGRES_PASSWORD='shephe.com' \  ###同上,环境变量根据不同应用特定的、可选的设置
	-e ALLOW_IP_RANGE=0.0.0.0/0 \  ###定义网络访问范围,一般都是像本行这样设置,意为:为允许所有访问
	-v /常用路径/mypgsql/:/var/lib/postgresql \  ###本地目录:容器内路径
	-p 55432:5432 \  ###本地端口:容器内端口
	-d postgres  ###实用名为“postgres”的镜像来创建本容器

以上命令用于安装“postgres”容器,相对来说里面最重要的是本地目录和本地端口。那行命令意思是将宿主机的/常用路径/mypgsql/目录挂载到容器内的/var/lib/postgresql目录,用于持久化存储数据库数据,以便在容器重启或重新部署时不会丢失数据。我一般将这个目录设置在宝塔定义的/www/dk_project/容器名下,方便记忆、备份和管理。以 Kevin's Memos 为例,考虑到其地址为 https://www.shephe.com/memos/,所以为了方便起见,我直接在本站 WordPress 的根目录下创建了个 memos 文件夹用来持久化存储数据。

“本地端口”指的是将用到的宿主机的网络端口,此端口须为未使用的、防火墙放通的且相对不那么常见的端口,为了安全起见,在咱们做好了域名反代后可将此端口隐藏。“容器内端口”一般不改动按容器初始化的为准。


在我看来,Docker 就是为了 IT 易用性而生的产物,在部署一些小应用时确实方便(如 Memos),也不会干扰主机上其他的业务。但稍微像样一点的,依赖比较多的业务我个人觉得还是老老实实安装在系统层比较好,若是纯图方便,那就用 Docker Compose。

什么是 Docker Compose

Docker Compose 是一个用于定义和运行多容器应用程序的工具,它通过编写定义一个 YAML 文件来配置多个应用程序的服务、网络和卷等,方便用户轻松拉取、启动、停止和管理多个容器,而无需手动执行多个命令。就比如本文安装 Awesome TTRSS,它除了安装主程序还必须依赖 Postgresql 才能正常运行,如若用普通的 Docker 安装,咱们必须先安装 Postgresql 容器并且创建好数据库,然后再安装主程序。就创建 Postgresql 数据库这操作就够咱小白喝一壶了…所以大牛们发明了 Compose。

基于 Docker Compose,咱普通爱好者拿到其他大神编写好的 YAML 文件,改几个关键控制行一行命令过去,稍等一会儿数个相互依存的应用便安装并且配置好了,十分方便。

1、Docker Compose 安装 Awesome TTRSS

关于 Docker Compose 安装 Awesome TTRSS 的方法,官方文档已经说的非常清楚了。按照上述 1、的原理和我的使用习惯,我简化注释了原始docker-compose.yml文件,仅安装了主程序和数据库,如下:

version: "3"
services:
  service.rss:
    image: wangqiru/ttrss:latest
    container_name: AwesomeTTRSS # 容器名称
    ports:
      - 9981:80 # 我把对外的“本地端口”设为了 9981,部署成功后 http://ip:9981 为 TTRS 前台地址
    environment:
      - SELF_URL_PATH=https://rss.shephe.com # 此地址用于作为 TTRSS 的最终访问地址,必须严格一致
      - DB_PASS=shephe.com # 定义数据库密码,须与 `database.postgres` 相同
      - PUID=1000
      - PGID=1000
    volumes:
      - /www/wwwroot/rss.shephe.com/:/var/www/feed-icons/ # 定义了数据卷的本地目录,但是这行没啥用,按官方默认的就好,因为数据都存在 Postgresql 里边去了
    networks:
      - public_access
      - service_only
      - database_only
    stdin_open: true
    tty: true
    restart: always

#  service.mercury: # set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
#    image: wangqiru/mercury-parser-api:latest
#    container_name: mercury
#    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
#    container_name: opencc
#    environment:
#      - NODE_ENV=production
#    networks:
#      - service_only
#    restart: always

  database.postgres:
    image: postgres:13-alpine
    container_name: PostgreSQL # 容器名称
    environment:
      - POSTGRES_PASSWORD=shephe.com # 定义数据库密码,同上边保持一致
    volumes:
      - /www/dk_project/postgres/data/:/var/lib/postgresql/data # 数据存储在/www/dk_project/postgres/data/
    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:

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

将以上文件放在主机任意目录,通过终端在同目录下运行 docker-compose up -d 后等待部署完成,参考如下:

利用Docker Compose安装Awesome TTRSS
执行完成后,访问 http://服务器 IP:本地端口应该就能访问了

2、Nginx 反向代理

Nginx 域名反向代理是指通过 Nginx 配置,将不同域名的请求转发到不同的后端服务器或应用程序。以宝塔面板为例,常规来讲咱们创建网站绑定域名并解析后,浏览器访问这个域名,系统会默认去查找网站默认目录下的index.php/index.html/default.php...文件作为网站首页。但咱刚刚创建的应用首页默认文件通常在其“容器路径”内,藏在不知道啥地方,要访问这个业务需通过访问外网地址:端口号或者内网地址:端口号(此内网地址指的是服务器内自建的虚拟局域网,仅用于内部业务通信),反向代理正是用于外部地址(域名)连接内网地址的桥梁,某种意义上讲它的功能和端口转换类似。

首先需要知道咱们业务的内网地址和端口号,在上左图容器管理的网络选卡中可轻易查到地址和端口号。然后进入需要做反代的网站,参照上右图设置即可,因 http 协议默认端口为 80,故省略:80。

接着做好域名的 SSL 就可以愉快得访问啦……稍等我出了个错:URL scheme reported by your browser (https) doesn't match server-configured SELF_URL_PATH (http), check X-Forwarded-Proto.浏览器卡在“数据加载中”,但访问 http://域名可以正常打开。

按提示这意思,这大概率是因为我的域名设置了 SSL,而在反代过程中又将实际访问的内容变成了 http://172.*,解决办法是:将命令proxy_set_header X-Forwarded-Proto $scheme;加在反向代理的配置文件中。


如果想要在同一个域名下不同目录指向不同的应用,也就是子目录绑定,则需要启用宝塔网站反向代理的高级功能。这时候需要注意该网站的反向代理中应不存在根目录代理,即“代理目录”处不能为空或“/”的情况。

3、Tiny Tiny RSS 的使用

桌面端的使用和 Inoreader 非常相似,上面也贴了图这里就不详细说了。想体验的朋友进入rss.shephe.com用测试账户shephe.com/shephe.com登录即可。

从 Inoreader 导出 RSS 源到 TTRSS

Tiny Tiny RSS 和 Inoreader 长得极其相似,使用自然是很符合我的习惯的,而且它们的数据是可以相互导入导出的,也很方便。在浏览器登录 Inoreader 后,打开这个地址可将所有 RSS 源保存到本地,然后 TTRSS 右上角进入偏好设置-订阅源-OPML-导入 OPML,选择该文件并确认后即可导入 RSS。

移动端支持(tiny Reader)

首先在偏好设置中启用 API(即允许外部客户端通过 API 来访问该账户),通过对比我推荐使用 tiny Reader(iOS),这是一个第三方轻量级无广告只有几兆大小的 App,其应用界面及交互和苹果原生应用非常相似。功能也足够完善,有内置浏览器、支持收藏、滑动操作等功能。

相对蚁阅的移动端访问效果,tiny Reader确实要好很多
相对蚁阅的移动端访问效果,tiny Reader 确实要好很多

4、更进一步,安装插件和主题

将折腾进行到底!我又安装了全文加载、外部分享、繁简转换插件,并且进一步深入体验了 Tiny Tiny RSS,发现它远比我想象地更强大,更好用!不管是快捷键、搜索、界面自定义、手机 App…我觉着它都不像是个免费的东西,我的 RSS 测试之旅可以就此打住了,毕业!

不过……若是“全文加载”这个插件能更进一步设置,支持可选分类自动离线加载;链接分享能把“全文加载”加载好的全文一起分享那就更好了哇。

Tiny Tiny RSS主界面
Tiny Tiny RSS 主界面,可以在后台更换包括像 Feedly 主体并且自定义添加 CSS。我自己用的时候更改了字号、隐藏了滚动条、隐藏了部分图标,使之看起来更清爽简洁。
1500 1000 Kevin's
「利用 Docker Compose 安装 Awesome TTRSS」有 13 条评论
  • MatrixCore
    05/12/2024 at 09:28 回复

    前几天用软云部署了ttrss,用了一段时间感觉还不错,目前软云小主机还在维护中。我喜欢rsshub+ttrss+feedme/reeder5的组合,但有一个痛点一直好像没咋解决,就是使用fever api的时候,没办法播放视频,但是网页端是可以的。总得来说,ttrss还是非常惊艳的,多次苦于win和android没找到像样的rss,等软云小主机恢复了,再重新上线服务。

    • Kevin
      05/12/2024 at 10:22 回复

      我也是部署在软云上的,,,,不过我重庆联通访问非常的慢,特别是晚上;

      此时此刻闲来无事,我再主站服务器上装了个 miniflux,这玩意儿确实轻量很多哎。。

  • […] 截断 WordPress RSS 输出并添加版权信息,上图为 Tiny Tiny RSS 阅读界面 […]

  • TeacherDu
    04/20/2024 at 00:38 回复

    Docker Compose是真方便啊!

  • […] 利用Docker Compose安装Awesome TTRSS - Kevin's 04/18/2024 at 20:40 回复 […]

  • S
    04/19/2024 at 09:02 回复

    难道又要开始新一轮的折腾。

  • obaby
    04/19/2024 at 08:27 回复

    freshrss +1
    这个看起来也不错

  • xige
    04/18/2024 at 22:24 回复

    我在用freshrss,三栏是可以实现的,选择它的原因是安装简单,更新也迅速,另外修改也方便。三栏测试:https://rss.xigeshudong.com

    • Kevin
      04/23/2024 at 20:34 回复

      我看了你这个demo确实还不错,甚至我还打算另外弄一个,,,不过在安装服务的时候有个php模块老是装不上就算了(我不想docker安装)

      • xige
        04/23/2024 at 20:44 回复

        用php8.0及以上然后安装php扩展fileinfo好像就ok,安装还是和轻松的,我也是喜欢php版,freshrss修改、模板、插件也还行,github更新速度也ok。比较适合喜欢个性化布局的人

        • Kevin
          04/23/2024 at 21:58 回复

          8.2装fileinfo死活装不上,各种编译、直装都不行。。

          • xige
            04/23/2024 at 22:04 回复

            换8.0哈,现在的程序8.0和8.2用起来好像区别不大,目前两个版本我都有用,安装没出现问题

            • Kevin
              04/24/2024 at 18:26 回复

              不折腾了不折腾了。。。

发表评论

请输入关键词…