自己搭建ttrss

默认分类 · 2019-12-07

发现自己已经好长时间没事就喜欢刷知乎,或者刷豆瓣,而推荐给我的又都是什么结婚后是什么感受,离婚后是什么感受,处对象是什么感受。

这些东西,偶尔看看,能让自己在实际生活中注意,从而避免踩坑,维护家庭和谐当然是有好处的,但是天天看,最重要的作用大概就是杀时间了。

但生命转眼已经快过半,还是得把时间用在更有意义的地方才行。正好最近发现好些写博客的,觉得看了很有收获,那以后就看博客好了,最好是把所有信息都收集起来放在一个app里面看。一搜索,才发现这东西老早就有了,叫RSS,曾经google支持得很好,结果几年前直接把这个给关掉了。现在要用,最好就是自己搭建RSS服务器,找了半天,发现tt-rss应该普遍反映不错,不过官方文档写得实在儿戏,于是网上有了一堆乱七八糟的博客教怎么搭建tt-rss的。不过每个人安装tt-rss的时间不同,遇到的问题不同,总结的结论也不同,所以就有了这篇造轮子的文章。

这个安装大概分为服务器上的安装与安卓端安装,其中服务器端包括安装tt-rss,以及tt-rss的mercury_fulltext插件、fever插件,还有配合mercury_fulltext插件工作的mercury-parser-api,安卓端就比较简单了,只是找了好久也没找到中意的app,最后只能将就用了。

1.安装tt-rss

由于自己的服务器上搭建有博客系统,域名也只有1个,所以网上流传的docker安装方式不太喜欢,按我的理解,如果用docker在我的服务器上安装,大概得用不同的端口,这个让我很是不喜欢,于是就自己折腾怎么在nginx下面加一个location来解决,结果活活折腾了我两晚,要不是在外面出差,估计都不可能有两晚时间给我折腾。

好了,言归正传,还是说怎么安装折腾的吧。

1.1 服务器基本情况


ubuntu 18.04

nginx

typecho blog 系统,采用的nginx+php+sqlite

1.2 在服务器上安装php

此处的php指的是typecho 不需要而ttrss需要的各种模块,不过不管了,照着tt-rss的PhpCompatibilityNotes来安装就好。有一点小改动,我把其中的版本号去掉了,不然ubuntu18.04安装不过去。


sudo apt install php-cli php-curl php-mbstring  php-json php-intl php-gd php-pgsql php-xml php-opcache

1.3 设置php

安装好之后发现是php7.2版本,然后还要稍微设置一下。


sudo vim /etc/php/7.2/fpm/php.ini

然后找到php.ini中的opcache部分,更改为下面这样就行


[opcache]

 ; Determines if Zend OPCache is enabled

opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP

opcache.enable_cli=0

1.4安装postgresql


sudo apt-get install postgresql

然后更改ubuntu系统中postgres用户的密码,更改postgresql数据库中管理员postgres的密码,然后在postgresql数据库中新建一个role,这个role的名字最好和运行php、nginx的ubuntu系统中的用户名相同(如果不同会有什么问题不太清楚,会不会有问题也不太清楚),然后把这个role的密码也修改了,然后用这个role创建一个数据库。具体流程命令如下。

  • 更改ubuntu系统中postgres用户的密码

sudo passwd postgres

[sudo] password for ubuntu: 

Enter new UNIX password: 

Retype new UNIX password: 

passwd: password updated successfully
  • 更改postgresql数据库中管理员postgres的密码

sudo su postgres -c psql

postgres=# \password postgres

Enter new password: 

Enter it again:

上面的postgres=#是输入命令的提示符。

  • 在postgresql数据库中新建一个role,此处role叫ttrss

postgres=# CREATE ROLE "ttrss" WITH CREATEDB LOGIN;

CREATE ROLE

然后是更改ttrss的密码,与前面一样。

  • 用ttrss这个role创建一个数据库ttrss

我的搞法是这样的,先在ubuntu系统中创建一个ttrss用户,然后用这个用户登录到ubuntu,然后在命令行输入


createdb ttrss

1.5 配置nginx

我的nginx配置文件为/etc/nginx/sites-available/default,我的default文件如下。


## for ttrss

server {

       listen 127.0.0.1:181;

       root /var/ttrss;

       index index.html index.htm index.php;

       location ~ .*\.php(\/.*)*$ {

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

if (!-f $document_root$fastcgi_script_name) {

return 404;

}

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

fastcgi_index index.php;

include fastcgi.conf;

include fastcgi_params;

           }

}

# Default server configuration

#

server {

listen 443 ssl default_server;

listen [::]:443 ssl default_server;

        root /var/typecho;

index index.html index.htm index.php;

server_name sanzhou.live;

ssl on;

ssl_certificate /etc/private/ttrss.crt;

ssl_certificate_key /etc/private/ttrss.key;

ssl_prefer_server_ciphers on;

ssl_dhparam /etc/certs/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ".........";

keepalive_timeout 70;

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

location / {

try_files $uri $uri/ =404;

}

        #for ttrss

location ^~/ttrss/ {

proxy_pass http://127.0.0.1:181;

proxy_set_header  Host                $http_host;

proxy_set_header  X-Real-IP           $remote_addr;

proxy_set_header  X-Forwarded-Ssl     on;

proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;

proxy_set_header  X-Forwarded-Proto   $scheme;

proxy_set_header  X-Frame-Options     SAMEORIGIN;

client_max_body_size        100m;

client_body_buffer_size     128k;

proxy_buffer_size           4k;

proxy_buffers               4 32k;

proxy_busy_buffers_size     64k;

proxy_temp_file_write_size  64k;

}

       #for typecho blog php

location ~ .*\.php(\/.*)*$ {

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

if (!-f $document_root$fastcgi_script_name) {

return 404;

}

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

fastcgi_index index.php;

include fastcgi.conf;

include fastcgi_params;

}

}

要注意3点,一是配置里面很多是我自己服务器对应的东西,需要对应修改,第二是里面的各个location顺序不能乱,第三个是"location ^~/ttrss/"中的^~这两个符号不能省略,这个和nginx中loation的执行顺序关系很大。后面两个注意点就是让我自己熬2个通宵的原因。

1.6 初始化ttrss

访问https://sanzhou.live/ttrss,第一次访问会直接到ttrss的安装界面,根据提示输入postgresql的用户名、密码,创建的数据库等,然后点初始化就可以了。

完了就可以登录了,访问https://sanzhou.live/ttrss,用户名输入admin,密码输入password,进去之后建议先修改密码。

到这一步基本就算完成了ttrss的安装过程,剩下的就是自己遇到有意思的rss往里面放就行了,也可以直接导入opml文件。

1.7 让ttrss自动隔1小时抓取一次rss内容


sudo crontab -u ttrss -e  

#插入以下字符,路径按照你的实际路径修改,作用是每小时刷新一次RSS。

* */1 * * * php /home/wwwroot/ttrss.tstrs.me/update.php  --feeds  > /dev/null

sudo service cron restart

2.安装ttrss的插件

2.1 安装mercury-parser-api

按我的理解,这是一个可以将任何网上文章结构化抓取下来的一个网络服务,本来想直接在ubuntu下安装,发现各种错误,毫无头绪,后来就直接安装了docker,再用docker来安装运行这个网络服务了,整个命令如下:


sudo apt-get install docker docker-compose

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

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


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

测试了下,这个docker 运行3000端口似乎只有本机能访问,应该还是比较安全的。

2.2 安装mercury_fulltext插件

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

安装也简单,直接cd进入ttrss文件夹的plugins,然后输入这个命令


cd /var/ttrss/ttrss/plugins

git clone https://github.com/HenryQW/mercury_fulltext

完成了之后从浏览器登入https://sanzhou.live/ttrss,然后启用mercury_fulltext这个插件,完了在feeds的mercury_fulltext填上139.162.77.179:3000,然后对需要使用该插件的rss源右键进入编辑,然后插件选择使用mercury_fulltext就可以了。

2.2 安装fever插件

这个插件据说是为了在多个rss reader终端上能同步处理rss内容,意思就是在安卓看了某篇rss文章后,我再到windows下看的时候,这篇文章已经自动标记为已读。

这个也简单,按如下命令设置即可


cd /var/ttrss/ttrss/plugins.local

git clone https://github.com/DigitalDJ/tinytinyrss-fever-plugin

然后用浏览器登入https://sanzhou.live/ttrss,然后启用fever插件,具体启用、配置密码等过程见这里

然后从客户端登录fever的时候,记得登录的地址是https://sanzhou.live/ttrss/plugins.local/fever

3.安装客户端

3.1 ubuntu客户端

本来想安装安卓和ubuntu两种客户端,然后发现ubuntu下没找到支持fever的客户端,只找到了支持ttrss的客户端,叫liferea,安装也简单。


sudo apt-get install liferea

由于不支持fever,我也就没用。

3.2安卓客户端

安卓支持ttrss的客户端有好几款,试了feedme,还有Readably,最后柑橘还是ttrss自家出品的安卓客户端比较好使,直接在apkpure下载的。

但有个提醒说是trial mode,7 days left,估计是试用期仅7天?7天之后呢,不知道了,先用着吧。

不过如果是用这个客户端,其实倒不用安装fever插件了,它自己能跟服务器同步。

4.参考网站

  • 1.https://wzfou.com/tt-rss/

  • 2.https://yorkchou.com/tt-rss.html

  • 3.https://sleele.com/2019/06/16/tiny-tiny-rss-%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B/

  • 4.https://libertyleadingnetwork.blogspot.com/2019/03/dockertiny-rssmercurymercury-parser.html

  • 5.https://tstrs.me/1451.html

  • 6.https://wzfou.com/tt-rss/

    5.题外话

    觉得这个ttrss挺好,想着给捐赠十块八块的,结果点进去发现只能通过paypal来捐赠,或者通过信用卡或者银行卡,想想还是算了,要是有微信或者支付宝捐赠渠道倒是可以考虑考虑。

    6.更新

    2019.12.11日更新
    由于有的博客都没有rss,有的rss又只有摘要,干脆一发狠,直接上了huginn,然后取消了full text插件。
    折腾huginn实在是费劲,不过总算折腾好了,大概记录遇到的几个问题。

  • huginn必须要作为server运行,不能放到某个location下面,没办法,只好用了一个新的server,用了一个新的端口。

  • huginn设置好web agent后点击run总是不能运行,一直显示的no working,后来google了半天,原来要用sudo bundle exec foreman start。如果用sudo bundle exec rake production:export启动了之后还要用sudo bundle exec rake production:stop停止,再用前面的foreman来启动。

  • huginn设置好web agent后点击run出现Broken pipe @ io_write 这种错误,没找到原因,后来通过更改.env文件,把postgres的pool数量改为了30,然后用sudo service postgresql restart 把postgresql服务重启,用sudo bundle exec rake production:export更新设置,用sudo bundle exec rake production:stop停止服务,再用sudo bundle exec foreman start启动,就好了。

2019.12.26日更新
huginn的jobs总是显示红色not working,自己用python自己diy了一个烧制rss源的,现在已经改用自己diy的这个rss-from-web了。

技术
  1. hantutu 2021-06-08

    我在阿里云上用docker部署的huginn,遇到了broken pipe的问题,请问也可以通过您说的更改.env文件的方式来改吗?不知道.env文件放到哪里了。。

    1. 苏三州 (作者)  2021-06-08
      @hantutu

      太长时间没用huginn了,都搞忘位置了,不过你可以在三个地方找一找,1./etc,2.你的用户名登录时的home目录,3.安装huginn的目录

      1. hantutu 2021-06-08
        @苏三州

        解决了老哥,需要重新登陆终端,docker关闭再开启higinn容器,再登陆huginn,运行才能正常。我看也有其他人也遇到了这个问题,他是在腾讯云上挂的huginn,关闭终端或者长时间连接自动关闭后,也会出现broken pipe的问题,也是关闭容器再重启变好的。

        1. 苏三州 (作者)  2021-06-26
          @hantutu

          嗯,没有broken pipe,那解决rss还有什么问题呢?我印象中huginn解决rss也是用的xpath吧?你用python或js用的不是xpath吗?

        2. 苏三州 (作者)  2021-06-09
          @hantutu

          我当时解决了,过几天又broken pipe,不知道你还遇到这个问题没有?

          1. hantutu 2021-06-25
            @苏三州

            特意用了两三周再来回复。目前还木有再出现过broken pipe的问题,有时会有"working 是no的状态",这种可能是有一段时间没有信息更新了,它就判断这个不能用了?等到有信息更新了它就好了。。一般等一两天它自己就好了能接着用了。。
            不过我现在也感觉huginn对于制作rss来说有点局限性,我现在在学习使用python或者js在阿里云上制作rss

        3. 苏三州 (作者)  2021-06-09
          @hantutu

          解决了就好!

    2. hantutu 2021-06-08
      @hantutu

      不好意思 网卡了 发了三遍 不知道怎么删除重复的评论。。

  2. hantutu 2021-06-08

    我在阿里云上用docker部署的huginn,遇到了broken pipe的问题,请问也可以通过您说的更改.env文件的方式来改吗?不知道.env文件放到哪里了。。

  3. hantutu 2021-06-08

    我在阿里云上用docker部署的huginn,遇到了broken pipe的问题,请问也可以通过您说的更改.env文件的方式来改吗?不知道.env文件放到哪里了。。

  4. Otis 2021-04-12

    请问Huginn的Broken Pipe问题怎么解决的呀我找了好多资料一直没找到解决方案快疯了:(

    1. 苏三州 (作者)  2021-04-12
      @Otis

      哎,总觉得huginn各种bug,换方案吧

  5. AboutRSS 2020-02-08

    谢谢,已推荐到我的频道。

    1. 苏三州 (作者)  2021-02-13
      @AboutRSS

      评论有邮件通知了,重新回复下,谢谢推荐哈。
      另外,重新弄了个fanyihui.net,算类rss网站,不知道能不能推荐下呢?谢谢哈

    2. 苏三州 (作者)  2020-02-25
      @AboutRSS

      哈哈,谢谢推荐

  6. Ayanami 2019-12-28

    Ubuntu可以试试FeedReader

    1. 苏三州 (作者)  2020-01-11
      @Ayanami

      哎,不早说啊

Theme Jasmine by Kent Liao