本文最后一次在 2021 年 10 月 30 日更新,部分内容可能已经过时!

随着我的学生机越来越接近终结时刻,在上面运行的服务不得不要陆续的转移到现如今的服务器上面了。

我的RSS服务就是一个。

但是,现在这个服务器是OVZ的,内核只有可怜的2.x。而Docker要求的最低内核是3.14,所以这个TTRSS要转成普通安装方式来进行。

但毕竟之前一直用Docker,这冷不丁的通过手工部署还真有点儿费劲。所以还是记录一下。


一、新建站点

宝塔中,新建一个站点:

  1. 域名、备注、根目录都随意。比如我使用域名rss.nonickname.garss.bwsl.wang。这样便可以直接访问这个网址来使用RSS服务(当然,域名解析要配置好)
  2. FTP可以不要
  3. 数据库:MySQL
  4. PHP选择7以上的版本
  5. 提交

二、部署站点

  1. ssh到服务器(ttrss的包下载zip会失败,只能用git clone。不知道为什么),输入以下命令克隆文件
cd /path/to/ttrss #进入ttrss网站的根目录
git clone https://git.tt-rss.org/fox/tt-rss.git #克隆文件
  1. 克隆完毕后,可能会多一层文件夹(也就是说,可能/path/to/ttrss/tt-rss/下才有index等等的文件)。将里边的所有文件剪切到网站根目录(/path/to/ttrss)
  2. 因为git到的文件拥有者是ssh登录用户,而不是网页处理的用户。所以退回到上一层(/path/to),修改拥有者为www(记住勾选应用到子目录)

三、安装站点

配置好解析之后,输入网址以启动安装程序。根据要求输入即可。

如果权限正确,这时候应该就可以直接通过默认用户名和密码进行登陆了(admin/password)。一定记得在第一时间修改密码。

四、配置站点

编辑网站根目录的config.php

  • FORCE_ARTICLE_PURGE修改成大于0的数,以自动清理超过这个数字天的文章(星标除外)
  • ENABLE_GZIP_OUTPUT选开。开启可以获得更好的加载速度,但是需要安装php的zlib扩展

保存

五、配置更新feed

不进行这一步是不能刷新Feed的。

1、使用简单模式

编辑config.php,将SIMPLE_UPDATE_MODE改为true,保存。

这种更新方式是指,每当用户使用网页登录ttrss时才进行刷新。通过应用登录无法获得新内容

2、通过定时任务

进入宝塔的计划任务,新增shell脚本。内容为:

sudo -u www php /path/to/ttrss/update.php --feeds --quiet

设定好执行间隔,保存即可。

至此,TTRSS的手工部署过程便完成了。

更多内容,去往ttrss官方查找

六、配置获取全文

虽然限制Feed只能获取部分,一定程度上可以保证提供Feed服务的同时不降低网站流量,但是只能获取部分内容确实让Feed的体验有些差。所以,很多 RSS 服务或客户端将全文获取作为 Premium 订阅的卖点之一。不过,通过 Tiny Tiny RSS,我们同样可以免费实现这一效果。

之前在网络上看到的,都需要去其他api提供网站上先行注册,这对于我这种不喜欢注册账号的人很不舒服。不过,最近发现了一个插件,直接解析网站结构来实现抓取全文,使用起来还是不错的。下面简单介绍。

插件名称:af_feedmod

使用方法:

  1. git clone 上述项目到 ttrss 根目录(会自动放入插件文件夹)
  2. ttrss的偏好设置 - 插件中,启用af_feedmod
  3. 保存后,设置页面多出一个FeedMod标签页,打开
  4. 仿照下述格式输入

    {
    
    "jpmetro.com": {
     "type": "xpath",
     "xpath": "/html/body/section/div[1]/div/article"
    },
    
    "www.linuxidc.com": {
     "type": "xpath",
     "xpath": "//*[@id='content']"
    }
    
    }

手工部署这一次,更让我感受到了一个问题:傻瓜化与繁琐是互斥的,随之而来的是可控与不可控的选择。

因为之前用Docker,所以这次整个过程中,出现了相当多的问题。包括但不限于权限出错、feed不更新等等。

这是一个非常矛盾的选择。

选择了简单、一键、Docker,这在安装时固然便捷了很多,但却有了更多的不可控因素。一旦出现问题,排查过程便是一个极度困难的事情——你并不知道这个一键的背后都做了什么,安装的文件都放在了何处。即使从网上找到了很多的解决方案,但找不到文件在哪儿,本身最简单的事情却成了查错路上最陡峭的一所大山。

就像用宝塔安装的php。它的执行文件并不在默认的/usr/bin/php,而是自定义的/www/server/php/版本号/bin下面。我很庆幸我找到,并且记住了这个位置。如果在我知道这个位置之前便出现了php问题,可能解决错误的唯一方式就是重新安装php了——至少为了知道php在哪儿,我还需要花费额外的时间去论坛询问,或者查阅官方文档。

而选择手工部署,一开始可能需要大量的准备工作。但这样部署的结果,就是我明确的知道哪个文件在哪里,它都能帮助我完成什么任务。这是完全透明的一种操作体验。无论什么地方出现了哪些问题,我至少不会因为找不到文件而搁浅修复的计划。

所以还请好好想一想:当你感觉一个东西应该有一个一键安装包来简化安装的繁琐时,这种简化到底是不是真的对你有帮助?


一个小问题

最近感觉我订阅的很多源都没有更新了。但是到它们的网站上看却是正常的。后来登录到ttrss的设置界面尝试调试一下信息源,发现会统一报一个错误:60 SSL certificate problem

经过一番搜索尝试,发现解决方法很简单:

进入ttrss的目录/includ/functions.php,在大概280行一堆curl_setopt位置加入一行新的

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

保存即可。

已有 3 条评论

  1. 求一个rss账户,谢谢 —— ruson ruson 发表。 回复TA
  2. 非常详细的教程,很棒!推荐一个github上的项目:RSSHub,万物皆可RSS ! 然后也想求一个RSS账户试试和自己搭建的区别,哈哈 —— Roy Roy 发表。 回复TA
  3. 如果不用Docker的话,可以考虑使用FreshRSS。我的树莓派一直运行在Docker环境下,也可以手动安装。
    https://github.com/freshrss/FreshRSS —— 阿卡林刘 阿卡林刘 发表。 回复TA

添加新评论