0%

VPSTOOLBOX高级组件篇--RSSHUB + Tiny Tiny RSS + Fever API实现多设备同步

VPSTOOLBOX高级组件篇–RSSHUB + Tiny Tiny RSS + Fever API实现多设备同步

本文将讲解VPSTOOLBOX中的高级组件之RSS套件。

本文将展示从零开始自己搭建一个RSSHUB + Tiny Tiny RSS伺服器,开启Fever API并实现多设备同步以及一些优化的方法,确实,RSS高级用法很多,因此限于篇幅以及本人的知识水平,我会展示我所学会的,欢迎各位在评论区交流。


一。 前情提要

问一: 为什么用RSSHUB ?

答: 因为很多网站不直接提供RSS Feed,需要RSSHUB抓取并生成Feed。

问二: Tiny Tiny RSS有什么用 ?

答: RSS阅读器,用于阅读,管理,新增,分类订阅等。

问三: RSSHUB+TT-rss对新手友好吗?

答: 一般般。


二。 准备工作

  1. 一台有独立公网ip的非中国大陆LINUX伺服器/VPS以及一个非中国大陆域名

  2. 确保你阅读并理解了本站的NGINX篇以及PHP-FPM篇,相关内容本文不再重复,请自行阅读。


三。 开始搭建RSSHUB

  1. 连接伺服器,我不想教这个,SSH教程请自己搜。

  2. 我个人不使用Centos,因此本教程只涉及Debian/Ubuntu,想看Centos的可以关掉本页面了。

    安装依赖

    RSSHUB我使用Docker安装是因为直接npm install有时候会出错。

    1
    apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

    添加APT源,本文不涉及编译,故deb-src不需要。

    Debian

    1
    2
    3
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    apt-key fingerprint 0EBFCD88
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

    Ubuntu

    1
    2
    3
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    apt-key fingerprint 0EBFCD88
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

    安装DOCKER。

    1
    2
    apt-get update
    apt-get install docker-ce docker-ce-cli containerd.io -y
  3. 至此,Docker安装完成,接下来我们需要安装RSSHUB。

1
2
docker pull diygod/rsshub
docker run -d --restart unless-stopped --name rsshub -p 127.0.0.1:1200:1200 diygod/rsshub

RSSHUB安装完成!

注:你确实可以直接apt install docker-ce,但这样的话就不会是最新版,因此我选择使用上述安装方法。


四。 开始搭建Tiny Tiny RSS

  1. 安装MariaDB。

    安装依赖: Tiny Tiny RSS依赖PHP-FPM以及MariaDB,PHP-FPM部分本站已有,故不再重复讲解。

1
2
3
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
apt-get install mariadb-server -y
apt-get install python-mysqldb -y
1
mysql_secure_installation

mysql_secuer_installation请照抄这里

MariaDB安装完成!

禁止MariaDB外网访问,此项为安全设置,你可以选择不修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    cat > '/etc/mysql/my.cnf' << EOF
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf

[client]

default-character-set = utf8mb4

[mysqld]

character-set-server = utf8mb4 #默认使用utf8mb4字符组以防止中文字符乱码
collation-server = utf8mb4_unicode_ci
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
# Import all .cnf files from configuration directory
!includedir /etc/mysql/mariadb.conf.d/
bind-address=127.0.0.1 #禁止外网访问

[mariadb]

userstat = 1
#tls_version = TLSv1.2,TLSv1.3
#ssl_cert = /etc/certs/${domain}_ecc/fullchain.cer
#ssl_key = /etc/certs/${domain}_ecc/${domain}.key
EOF

新建Tiny Tiny RSS数据库以及对应的用户

1
mysql -u root

${password1}请换成你自己的。

1
2
3
4
5
CREATE DATABASE ttrss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
create user 'ttrss'@'localhost' IDENTIFIED BY '${password1}';
GRANT ALL PRIVILEGES ON ttrss.* to ttrss@'localhost';
flush privileges;
EXIT;
  1. 安装Tiny Tiny RSS

在阅读此章节之前,请自行完成NGINX篇中的内容。

git clone tt-rss到本地

1
2
cd /usr/share/nginx/
git clone https://git.tt-rss.org/fox/tt-rss.git tt-rss

配置TT-rss

1
2
rm -rf /usr/share/nginx/tt-rss/config.php
sudo nano /usr/share/nginx/tt-rss/config.php

在config.php中放入以下内容,注意将变量替换成你自己的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
// *******************************************
// *** Database configuration (important!) ***
// *******************************************

define('DB_TYPE', 'mysql');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'ttrss');
define('DB_NAME', 'ttrss');
define('DB_PASS', '${password1}');
define('DB_PORT', '3306');
define('MYSQL_CHARSET', 'UTF8');

// ***********************************
// *** Basic settings (important!) ***
// ***********************************

define('SELF_URL_PATH', 'https://${domain}/${password1}_ttrss//');
define('SINGLE_USER_MODE', false);
define('SIMPLE_UPDATE_MODE', false);

// *****************************
// *** Files and directories ***
// *****************************

define('PHP_EXECUTABLE', '/usr/bin/php');
define('LOCK_DIRECTORY', 'lock');
define('CACHE_DIR', 'cache');
define('ICONS_DIR', "feed-icons");
define('ICONS_URL', "feed-icons");

// **********************
// *** Authentication ***
// **********************

define('AUTH_AUTO_CREATE', true);
define('AUTH_AUTO_LOGIN', true);

// *********************
// *** Feed settings ***
// *********************

define('FORCE_ARTICLE_PURGE', 0);

// ****************************
// *** Sphinx search plugin ***
// ****************************

define('SPHINX_SERVER', 'localhost:9312');
define('SPHINX_INDEX', 'ttrss, delta');

// ***********************************
// *** Self-registrations by users ***
// ***********************************

define('ENABLE_REGISTRATION', false);
define('REG_NOTIFY_ADDRESS', 'root@${domain}');
define('REG_MAX_USERS', 10);

// **********************************
// *** Cookies and login sessions ***
// **********************************

define('SESSION_COOKIE_LIFETIME', 86400);
define('SMTP_FROM_NAME', 'Tiny Tiny RSS');
define('SMTP_FROM_ADDRESS', 'noreply@${domain}');
define('DIGEST_SUBJECT', '[tt-rss] New headlines for last 24 hours');

// ***************************************
// *** Other settings (less important) ***
// ***************************************

define('CHECK_FOR_UPDATES', true);
define('ENABLE_GZIP_OUTPUT', true);
define('PLUGINS', 'auth_internal, note, fever, af_readability');
define('LOG_DESTINATION', 'sql');
define('CONFIG_VERSION', 26);
define('_SKIP_SELF_URL_PATH_CHECKS', true);

初始化TT-rss数据库

1
mysql -u ttrss -p"${password1}" -D ttrss < /usr/share/nginx/tt-rss/schema/ttrss_schema_mysql.sql

安装Ferver API插件

1
2
3
cd /usr/share/nginx/tt-rss/plugins.local/
git clone https://github.com/DigitalDJ/tinytinyrss-fever-plugin fever
cd ..

配置全自动Feed更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  cat > '/etc/systemd/system/rssfeed.service' << EOF
[Unit]
Description=ttrss_backend
Documentation=https://tt-rss.org/
After=network.target mysql.service

[Service]
User=nginx
ExecStart=/usr/share/nginx/tt-rss/update_daemon2.php
Restart=on-failure
RestartSec=3s

[Install]
WantedBy=multi-user.target
EOF
1
2
systemctl start rssfeed
systemctl enable rssfeed

TT-rss安装完成!


五。开启NGINX反向代理RSSHUB+TT-rss实现HTTPS访问

HTTPS等请看NGINX篇,此处只讲关键配置。

1
sudo nano /etc/nginx/conf.d/default.conf

在NGINX配置文件中添加两个location,请自行修改${password1}为你自己的,且必须和上文的相同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
location /${password1}_rsshub/ {
#access_log off;
client_max_body_size 0;
proxy_redirect off;
proxy_pass http://127.0.0.1:1200/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /${password1}_ttrss/ {
#access_log off;
client_max_body_size 0;
index index.php;
alias /usr/share/nginx/tt-rss/;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}

修改用户组等

1
2
chmod 755 /usr/share/nginx/
chown -R nginx:nginx /usr/share/nginx/

重载NGINX

1
nginx -s reload

此时你访问https://$domain/${password1}_rsshub/以及https://$domain/${password1}_ttrss/应该就没有问题了。

TT-rss默认用户名: admin
TT-rss默认密码: password,记得修改!


六。开启Ferver API实现多设备同步

  1. 访问https://$domain/${password1}_ttrss/,前往偏好设置–>通用–>选中✅允許第三方程式透過API來存取這個帳號–>儲存設定

  2. 偏好设置–>往下看–>Fever Emulation–>设置Ferver API密码,推荐不要和${password1}一样–>点击设置没有反应是正常的,设置已生效。

  3. 下载这个应用,输入Fever API地址https://${domain}/${password1}_ttrss/plugins.local/fever/以及你设置的API密码,用户名默认admin即可开始使用。

注:此应用仅为阅读器,无RSS订阅管理等功能,RSS订阅及管理请使用TT-rss Web主界面。


七。一些小提示

  1. 如果你照抄我的配置,那么全文阅读插件(af_readability)已启用,我个人不推荐抓取的时候直接抓全文,我只在阅读的时候抓取全文,你可以看你自己的喜好而定。

  2. 推荐使用这个浏览器插件RSSHub-Radar,可以全自动发现网站以及RSSHUB的Feed并一键订阅到TT-rss。

  3. TT-rss支援条件过滤,nsfw过滤等其他高级功能,这些就请各位自己研究了,我个人没这种需求。

  4. TT-rss的邮件发送每日头条RSS的功能默认没有开启,如有需要,请自行开启。


八。总结篇

RSS的可玩性很高,还有很多玩法,限于本人的所知以及篇幅有限就请各位自己探索吧,我已经把我会的都教给你们了。