之前写过一篇文章,介绍怎么利用Vultr的VPS搭建SS服务科学上网。但如果仅是自用的话,即使是最便宜的一档($2.5/月),也绰绰有余。那每个月白白浪费的带宽和流量,可以如何利用起来呢?比如说,你可以自建一个RSS服务。
自从Google Reader下线以来,RSS似乎再也没有一家独大的服务商了。Inoreader、Feedly可以称得上是其中的明星产品。一些高级功能如关键词高亮、自定义过滤规则等,也一应俱全。只不过,都需要不菲的订阅费用,而且免费用户的订阅文章里,会带上「狗皮膏药」式的广告,有碍观瞻。
自建服务除了能实现RSS服务商的付费功能外,还有隐私与安全方面的优势。何况,上述这些不受监管的境外RSS服务,指不定哪天就404
了。
1 为什么推荐Miniflux
从成熟服务商迁移的前提,自然是自建服务能覆盖或超出前者所提供的能力。除了订阅和阅读功能以外,个人对RSS服务的基本需求有如下几点:
- 界面简洁,设计符合直觉
- 订阅源同步及时
- 服务稳定,能持续更新迭代
- 支持全文搜索订阅文章
- 自定义规则过滤订阅源
- 对只输出摘要的订阅源,能抓取全文
- 移动/桌面客户端支持全面
- 支持保存文章到稍后读应用
1.1 TTRSS/FreshRSS/Miniflux
在一番调研后,我从目前成熟且轻量的开源解决方案中,选择了三个:Tiny Tiny RSS、FreshRSS、Miniflux。为了找到最优解,我把三者都安装试用了遍,并就上面提出的基本需求,做了下横向比较。
结论是,FreshRSS不太能满足我的需求,没有吸引力;Miniflux很优秀,但缺少自定义规则过滤功能;而TTRSS则是功能最齐全的。
由此来看,似乎TTRSS才是最优解,那为什么最终要转而推荐Miniflux呢?因为由PHP写成的TTRSS,实在是太「重」了。我在安装和使用的过程中,遇到不少疑难问题。而整个项目似乎也「岌岌可危」——最近一个稳定版本是1年前。
1.2 极致优雅的Miniflux
与TTRSS相对,Miniflux不仅有活跃的开发者、近乎每月一更的稳定版本,而且功能不依赖任何插件,使用起来令人非常安心。
至于为什么会没有插件呢?作者在文档中回答说,因为Miniflux是一种极简的解决方案。插件一方面会增加其复杂度,另一方面,人们通常不会长期去维护插件。
Miniflux的界面可以说是做到了极致简洁,与著名的稍后读应用Pinboard在设计理念上可以说是异曲同工。没有多余的元素,不加载多余的JS,追求轻量和快速,打开就能直接阅读。同时使用响应式的设计,能适配各种屏幕(移动端还支持滑动标记已读)。
而它目前最大的缺点——「不支持自定义规则过滤订阅源」,也有一种另辟蹊径的解决办法,具体可参考下文「使用指南」部分。
2 安装使用Miniflux
这里主要介绍如何在Docker上安装使用Miniflux,因为使用这种方式,安装和卸载对本身Linux系统影响都较小。当然,你也可以参考官方文档安装使用。
2.1 配置环境
首先,利用ssh连接VPS。如果你不知道怎么做,或者没有VPS,可以参考我之前写的教程,或者直接使用我的推荐链接注册。
根据自己所使用的Linux系统,使用以下命令安装相关环境。
#Debian/Ubuntu系统
apt-get -y install git make nano curl
#CentOS/RHEL系统
yum -y install git make nano curl
输入下方第一条命令安装Docker,这里需要耐心等待一会。等安装完成后,再输入第二条命令启动服务。
curl -sSL https://get.docker.com/ | sh
service docker start
下一步是安装Docker Compose,一个可以一次安装多个Docker容器的工具。
curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
2.2 程序安装
安装好Docker Compose后,接下来需要新建配置文件docker-compose.yml
。
nano docker-compose.yml
然后在nano编辑器中编辑基本的安装和环境信息,下面有一个配置案例:
version: '3'
services:
miniflux:
image: miniflux/miniflux:2.0.16
ports:
- "80:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- POLLING_FREQUENCY=60
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=test123
restart: unless-stopped
db:
image: postgres:10.1
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
volumes:
- miniflux-db:/var/lib/postgresql/data
volumes:
miniflux-db:
关于配置文件,其中ports:- "80:8080"
中的80
是默认对外开放的端口,也就是输入VPS的IP地址即可使用和访问Miniflux。如果改成了其他端口,则需要用http://<ip地址>:<端口号>
来访问。
image: miniflux/miniflux:2.0.16
代表你想安装的miniflux镜像。2.0.16
是当前最新的版本,后期如果有更新(发布页面),也只需要替换此处重新执行docker-compose
命令即可更新。
environment
项下配置的是环境变量,可以根据自己的需求增加或删除一些配置。其中ADMIN_USERNAME
及ADMIN_PASSWORD
为登陆时的管理员账号密码。POLLING_FREQUENCY
为抓取feed的时间间隔(单位为分钟)。所有支持的环境变量,可以参考官网文档。
配置完成保存后。最后一步,用Docker Compose按照配置,安装和运行docker镜像。
docker-compose up -d
2.3 开始使用
安装完成后,可以使用以下命令,查看dokcer正在运行的容器。检查miniflux的容器是否正常运行。
docker ps -a
如果miniflux不处于启动状态,你可以通过以下命令手动启动它。注意将命令中的 <container-id>
替换为miniflux的id。
docker start <container-id>
此时打开浏览器,通过访问http://<ip地址>:<端口号>
就可以进入界面,使用配置文件中填写的账号密码即可登陆了。
2.4 域名和HTTPS支持
完成上述步骤后,已经可以正常使用了。如果你有域名的话,解析到该地址后就可以直接通过域名访问了。当然,这并非必要步骤。
域名的购买和解析这里就不再赘述了。如果只是自用的话,推荐去Namecheap买.win
域名,40-50元5年,很划算。
有了域名怎么添加SSL使其支持HTTPS呢?这里推荐使用Caddy服务,安装和使用都很省心。这里使用@ToyoDAdoubi的一键安装脚本。
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
然后新建配置文件。
nano /usr/local/caddy/Caddyfile
将配置内容粘贴进去,注意替换尖括号中的项目。
https://<解析到该ip的域名> {
tls <你的邮箱>
proxy / <ip地址:miniflux对外端口> {
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}
}
log /var/log/caddy.log
gzip
}
保存退出后,重启Caddy就可以用https
访问域名了。
/etc/init.d/caddy restart
3 使用指南
现在,你已经可以毫无障碍地使用Miniflux了。不过,「客户端支持」与「自定义过滤」这两项,还需要一些额外的工作。
3.1 客户端支持
虽然网页版的Miniflux足够轻便快速,但是习惯了原生应用的体验后,很难再回到「简陋」的网页了。好在Miniflux本身就支持与Fever集成,可以通过它的API在Reeder、Unread等客户端中使用。
这里以Reeder为例。首先,在Miniflux界面上设置好Fever的用户名和密码。
然后打开Reeder添加账户,类别选择Fever。在Server栏填入http://<ip地址或域名>:<端口号>/fever
,用户名和密码填写上面配置好的,打开信任证书选项,点击登录即可。
3.2 过滤神器SiftRSS
对我而言,Miniflux目前最大的短板,就是不支持自定义规则过滤订阅源。而SiftRSS就是为了解决这一需求而生的工具。
SiftRSS支持根据订阅文章标题或描述中的关键词,对订阅源进行过滤,然后重新生成订阅地址。你可以选择包含或排除关键词,另外它也支持正则表达式过滤。利用正则表达式,你可以模糊匹配或者屏蔽多个关键词。这里列了几个可用于过滤的实用运算符,以供参考。
3.3 RSSHub获取订阅源
RSSHub是@DIYgod同学主导的开源项目,口号是「万物皆可RSS」。目前已支持将Bilibili、微博、即刻、公众号、知乎、简书等内容更新,作为RSS订阅源输出。如果你已经在用RSS却不知道RSSHub的话,强烈推荐关注使用。
你可以自行将其部署到服务器上,也可以使用项目所提供的rsshub.app
域名直接订阅RSS源。目前这个项目的开发很活跃,如果有任何想新增的源,也可以去他们的GitHub issue中提需求。
4 One More Thing
最后,一个忠告:RSS虽好,精简的订阅源和日清的行动力才是关键。
另外,FOMO (Fear of Missing out) 始终是种病态。