如果你是一个 RSS 使用者,你一定会被两个问题所困扰,

  • 问题一:网站没有提供 RSS Feed。
  • 问题二:没有一个合适的 RSS 阅读器。

对于问题一, 你可以使用 RSSHub 项目,将知乎、微博这些不提供 RSS Feed 的网站转换为 RSS Feed。

如何搭建一个 RSSHub?你可以参考我之前的文章

对于问题二,你可以选择本地 RSS 阅读器,比如说 Akregator。你也可以选择 FeedlyInoreader 这样的在线阅读器。

二者各有利弊,对于阅读器选择,你可以参考维基百科上的这个表格


Tiny Tiny RSS (TT-RSS) 是一个基于web的开源、新型Feed(RSS/Atom)阅读器。

如果你不愿意使用 Feedly、Inoreader,TT-RSS 将会是一个合适的替代品。

本文将以 Debian 9 系统为例,演示如何在自己的服务器上搭建 TT-RSS。

所需列表

  • 服务器一台(Digitalocean 每月5美元的云服务器就可以了)
  • 域名一个(可以注册免费域名

步骤零:更新系统

sudo apt update && sudo apt upgrade

步骤一:安装 PHP

sudo apt install php7.0-cli php7.0-curl php7.0-mbstring \
php7.0-json php7.0-gd php7.0-pgsql php7.0-xml \
php7.0-opcache php7.0-fpm

步骤二:安装、配置 PostgreSQL

安装

sudo apt install postgresql

配置

sudo -u postgres psql
postgres=# CREATE USER "www-data" WITH PASSWORD 'yourpasshere';
postgres=# CREATE DATABASE ttrss WITH OWNER "www-data";
postgres=# \quit

yourpasshere 替换为你自己的密码,建议使用密码生成器产生的高强度密码。

步骤三:安装 tt-rss

cd /var/www/
sudo -u www-data git clone https://tt-rss.org/git/tt-rss.git tt-rss

运行上述命令之前,请确保 /var/www/ 目录已经建立,并属于 www-data:www-data

步骤四:安装 Caddy

Caddy 是一个用 Golang 写成的 Web 服务器,相较于 Nginx,Caddy 的配置文件相当简单,而且 Caddy 可以自动签发 Let’s Encrypt 证书,对于新手相当的友好。

如果想更多的了解 Caddy 可以阅读这篇博文

安装 Caddy

安装 Caddy 以及服务

curl https://getcaddy.com | sudo bash -s personal http.git,http.cache

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy
sudo touch /etc/caddy/Caddyfile

sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

允许 Caddy 绑定低位端口:

sudo setcap cap_net_bind_service=+ep $(which caddy)

如果上述命令出错,尝试 sudo apt install libcap2-bin

重载服务

sudo systemctl daemon-reload
sudo systemctl enable caddy.service

配置 Caddy

example.com { #你的域名
gzip
cache
tls [email protected] #你的邮箱,用于申请 Let’s Encrypt 证书
root /var/www/tt-rss
ext .html .htm .php
git https://tt-rss.org/git/tt-rss.git #自动更新 tt-rss
fastcgi / /run/php/php7.0-fpm.sock php
status 404 { #保护敏感文件
  /.editorconfig
  /.git
  /.gitignore
  /.gitlab-ci.yml
  /CONTRIBUTING.md
  /README.md
  /COPYING
  }
}

将上述内容写入 /etc/caddy/Caddyfile, 确保域名指向本机后(不要开启 CDN),启动服务。

sudo systemctl start caddy.service

自动更新 Caddy (可选)

由于 Caddy 不在官方仓库中,可以通过创建服务实现 Caddy 自动更新。

# /etc/systemd/system/upgrade_caddy.service
[Unit]
Description=Upgrade Caddy

[Service]
Type=oneshot
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/bin/bash -c "curl https://getcaddy.com | bash -s personal http.git,http.cache && systemctl restart Caddy.service"
# /etc/systemd/system/upgrade_caddy.timer
[Unit]
Description=upgrade caddy

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

创建上述文件,然后重载服务,Caddy 将每周检查一次更新。

sudo systemctl daemon-reload
sudo systemctl enable upgrade_caddy.timer
sudo systemctl start upgrade_caddy.timer

步骤五:配置 TT-RSS

访问 https://example.com/

你将会看到如下的配置界面。

../../images/tt-rss/TT-RSS-Installer.png

TT-RSS 配置界面

如上图进行配置:

Database type: PostgreSQL
Username: www-data
Password: yourpasshere
Database name: ttrss
Host name:
Port: 5432
RSS URL: https://example.com/

步骤六:配置 Feed 更新服务

# /etc/systemd/system/ttrss_backend.service
[Unit]
Description=ttrss_backend
After=network.target mysql.service postgresql.service

[Service]
User=www-data
ExecStart=/var/www/tt-rss/update_daemon2.php

[Install]
WantedBy=multi-user.target

创建上述文件,重载服务。

systemctl daemon-reload
systemctl enable ttrss_backend.service
systemctl start ttrss_backend.service

到此 TT-RSS 就已经搭建成功了。

再次访问你的域名 https://example.com/,使用 username: admin, password: password 登录 TT-RSS ,修改密码,根据需求创建帐户。

你还可以根据需求启动插件,建议启动 af_readability 插件,对于 RSS Feed 不提供全文输出的网站(如: VICE中国),可以使用该插件转换为全文。

../../images/tt-rss/Plugin_1.thumbnail.png

在设置页面,启动 af_readability 插件

../../images/tt-rss/Plugin_2.thumbnail.png

在需要转换的 Feed 设置中启用插件

步骤七:Enable PHP 7 OPcache (性能优化,可选)

打开 /etc/php/7.0/fpm/php.ini 文件。

做出下面的调整:

To enable the OPcache, change to the following lines of your php.ini file:

;opcache.enable=0
;opcache.memory_consumption=64
;opcache.max_accelerated_files=2000
;opcache_revalidate_freq = 2

Change to:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache_revalidate_freq = 240