Tiny Tiny RSS

Php 5.6, Postgresql or MySQL

Docker 安装,虽然 ttrss 官方给了自己的解决方案,但似乎刚刚起步,而 linuxserver/tt-rss 的镜像因为拿不到 tt-rss tarball 所以也停止更新了。所以最后折中的方案就是用了 这个镜像

QNAP 下的 PostgreSQL

App store 中可以直接安装,但实际上 QNAP 只是帮用户默认用 docker-compose 安装好了,不过也还行了,连 phpPgAdmin 也安装了。

查看下文件内容:

version: '3'

services:
  db:
	image: postgres:11.4
	restart: on-failure
	ports:
	  - 5432:5432
	volumes:
	  - ./data:/var/lib/postgresql/data
	environment:
	  - POSTGRES_PASSWORD=postgres

  web:
	image: edhongcy/phppgadmin:latest
	restart: on-failure
	ports:
	  - 7070:80
	  - 7443:443
	depends_on:
	  - db
	environment:
	  - PHP_PG_ADMIN_SERVER_DESC=PostgreSQL
	  - PHP_PG_ADMIN_SERVER_HOST=db
	  - PHP_PG_ADMIN_SERVER_PORT=5432
	  - PHP_PG_ADMIN_SERVER_SSL_MODE=allow
	  - PHP_PG_ADMIN_SERVER_DEFAULT_DB=template1
	  - PHP_PG_ADMIN_SERVER_PG_DUMP_PATH=/usr/bin/pg_dump
	  - PHP_PG_ADMIN_SERVER_PG_DUMPALL_PATH=/usr/bin/pg_dumpall

	  - PHP_PG_ADMIN_DEFAULT_LANG=auto
	  - PHP_PG_ADMIN_AUTO_COMPLETE=default on
	  - PHP_PG_ADMIN_EXTRA_LOGIN_SECURITY=false
	  - PHP_PG_ADMIN_OWNED_ONLY=false
	  - PHP_PG_ADMIN_SHOW_COMMENTS=true
	  - PHP_PG_ADMIN_SHOW_ADVANCED=false
	  - PHP_PG_ADMIN_SHOW_SYSTEM=false
	  - PHP_PG_ADMIN_MIN_PASSWORD_LENGTH=1
	  - PHP_PG_ADMIN_LEFT_WIDTH=200
	  - PHP_PG_ADMIN_THEME=default
	  - PHP_PG_ADMIN_SHOW_OIDS=false
	  - PHP_PG_ADMIN_MAX_ROWS=30
	  - PHP_PG_ADMIN_MAX_CHARS=50
	  - PHP_PG_ADMIN_USE_XHTML_STRICT=false
	  - PHP_PG_ADMIN_HELP_BASE=http://www.postgresql.org/docs/%s/interactive/
	  - PHP_PG_ADMIN_AJAX_REFRESH=3

看到了默认密码了吧,QNAP 官方的页面都不写一下,让别人一键安装的去哪里找,还不如直接贴这个让用户自己到 Container 里面自己建呢。

如果安装后发现用默认的用户名:postgres 和默认密码:postgres 登录不了,尝试重启一下服务,然后 netstat -tupln 看看服务 5432 端口有没有启动。

/etc/init.d/postgresql.sh restart

然后就开始安装 ttrss:

docker run -d --name ttrss --restart=unless-stopped \
-e SELF_URL_PATH=http://<your-nas-ip>:181 \
-e DB_HOST=<your-nas-postgresql-host> \
-e DB_PORT=5432 \
-e DB_NAME=ttrss \
-p 181:80 \
wangqiru/ttrss

安装的时候有个坑,启用时遇到如下错误:

PHP Fatal error: Uncaught PDOException: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "ttrss_version" does not exist LINE 1

我一般习惯 MySQL 的做法,先到数据库中新建了一个 DB,新建一个用户,然后再用 -e DB_USER=user -e DB_PASS=password 来创建 Docker 容器,没想到遇到了 Bug,首次初始化的时候脚本里有着判断,如果 db 已经存在了就不初始化 sql 了,所以到数据库中把新建的数据库删掉,然后再来一次就好了。

其他说明:

  • --restart 参数可以换成 --restart=always,这样系统重启容器也能重启
  • SELF_URL_PATH 这里需要和启动时的 URL 配置完全一致,否则 ttrss 启动时会出错

其他插件安装可以参考这里,比如全文输出,主题之类,我只想用 ttrss 来订阅几个我日常关注的博主,其他的订阅源还是 InoReader 所以也就不折腾全文不全文了,不全文输出的也就没有订阅的必要了。不过如果你想要实现全文输出也还是有办法的。

Mercury Parser api

docker run -d --name=mercury-parser-api \
--restart=unless-stopped \
-p 3000:3000 -d wangqiru/mercury-parser-api

FreshRSS

FreshRSS 也是 PHP 编写,基本依赖也就是 PHP 和数据库,MySQL 5.5.3+ MariaDb, SQLite, PostgreSQL 9.5+. 界面也比较简洁大方。

在线预览:https://freshrss.org/

用 Docker 安装也比较方便,可以参考这里

安装

docker run -d \
  --name=freshrss \
  -e PUID=1000 \
  -e PGID=100 \
  -e TZ=Asia/Shanghai \
  -p 6080:80 \
  -v /share/Container/freshrss:/config \
  --restart unless-stopped \
  linuxserver/freshrss

NewsBlur

Python, Django, Celery etc

NewsBlur 的在线预览可以点击这里,界面也还是很不错的。

Selfoss

另一款 PHP 编写的 RSS 阅读器,Selfoss 比较简单,依赖也比较简单,PHP,WebServer,Database(sqlite, mysql, PostgreSQL) 就可以,所以安装起来也比较简单,甚至有环境的基础下,下载 zip, 解压,然后修改一下配置即可。

需要注意的是,config.ini 配置文件中的 password 字段,需要访问 http://ip-selfoss-service/password,然后输入密码生成一个 hashcode,然后将该密码 hash 配置到 config.ini 文件中。

然后访问 http://ip-selfoss-service/opml,可以导入 opml 文件。

Android Reader

总结

Selfoss 相对比较简单,定时抓取也要手工 crontab 来触发,但功能一点也不弱,日常用完全没有问题,并且依赖非常少。

排错

在我配置使用 SQLite 作为数据库时,Selfoss 没出现问题,但是当我配置 MySQL 作为数据库时,在日志中给我报了:

[2020-02-10 16:04:21] selfoss.ERROR: PDOStatement: You do not have the SUPER privilege and binary logging
 is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

网上一查似乎是 MySQL 权限问题,但想想我已经给了 Selfoss 的用户整个 selfoss 数据库的权限了,后来一查看到有人和我相同的情况 1,定位到应该就是 MySQL 中创建 Tigger 的权限不足导致。

[2020-02-10 16:09:03] selfoss.ERROR: PDOStatement: Trigger does not exist

结合这个错误,所以我的解决方法就是在安装时临时给 selfoss 这个数据库用户超级权限,安装好后把权限取消。

  • Selfoss 安装好后会在 phpMyAdmin 中能看到 Selfoss 创建了两个 Trigger,insert_updatetime_triggerupdate_updatetime_trigger, 备份时记得备份,mysqldump --triggers --no-create-info --no-data --no-create-db --skip-opt selfoss > selfoss.trigger
  • 删除 triggers from the selfoss database: drop trigger insert_updatetime_trigger; and drop trigger update_updatetime_trigger;
  • replaced the selfoss user in the exported selfoss.trigger file with root (DEFINER=root@localhost)
  • 导入 mysql selfoss < selfoss.trigger

miniflux

Go 编写,依赖 Postgresql

stringer

Ruby 编写

Leed

Php/MySQL

更多自建的 RSS 可以参考这里 大概还有几十种,不同语言,不同实现。

reference

  1. https://selfoss.aditu.de/forum/index.php?mode=thread&id=895