自建RSShub和TinyTinyRSS
2024-04-07 18:31:02

前言

旧闻RSS大名,但是现在的RSS阅读器要么收费,要么功能太简单,因此,自己搭建一个RSS服务再好不过了。我选择了TinyTinyRSS,FreshRSS听说也不错,功能大体都差不多,以前用过TinyTinyRSS就懒得再改了。

安装

代码来源我不是咕咕鸽 –【服务器能干什么】二十分钟搭建一个属于自己的RSS服务
如果没有安装docker和docker-compose,原文有教程,这里不再赘述。

1. 安装TinyTinyRSS

1
2
# 创建 ttrss 目录并进入
mkdir ttrss && cd ttrss
1
2
# 新建、编辑docker-compose.yml文件
vim docker-compose.yml

填入下面的代码

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
version: "3"
services:
service.rss:
image: wangqiru/ttrss:latest
container_name: ttrss
ports:
- 8002:80
environment:
- SELF_URL_PATH=https://rss.laoda.de/ # please change to your own domain
- DB_PASS=RSS2020 # use the same password defined in `database.postgres`
- PUID=1000
- PGID=1000
volumes:
- feed-icons:/var/www/feed-icons/
networks:
- public_access
- service_only
- database_only
stdin_open: true
tty: true
restart: always

service.mercury: # set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
image: wangqiru/mercury-parser-api:latest
container_name: mercury
networks:
- public_access
- service_only
restart: always

service.opencc: # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
image: wangqiru/opencc-api-server:latest
container_name: opencc
environment:
- NODE_ENV=production
networks:
- service_only
restart: always

database.postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_PASSWORD=RSS2020 # feel free to change the password
volumes:
- ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
networks:
- database_only
restart: always

# utility.watchtower
# container_name: watchtower
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# - WATCHTOWER_CLEANUP=true
# - WATCHTOWER_POLL_INTERVAL=86400
# restart: always

volumes:
feed-icons:

networks:
public_access: # Provide the access for ttrss UI
service_only: # Provide the communication network between services only
internal: true
database_only: # Provide the communication between ttrss and database only
internal: true
1
2
# 启动 Tiny Tiny RSS 服务
docker-compose up -d
1
2
# 打开端口
ufw allow 8002

初始账号: admin
初始密码:password
Nginx-proxy-manager配置完反向代理后输入网址,输入账号密码即可进入页面,然后启用两个插件,mercury_full_textopencc,如果要用fever api,则需要在设置中打开API

2. 安装RSShub

1
2
# 下载 docker-compose.yml
wget https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml
1
2
# 创建 volume 持久化 Redis 缓存
docker volume create redis-data
1
2
# 启动
docker-compose up -d
1
2
# 打开端口
ufw allow 1200

配置好反向代理后,输入网址即可看到RSShub页面

Bilibili风控校验失败和Twitter不能订阅解决

1. Bilibili风控校验失败解决

为了保护我的6级号和大会员,我在某宝买了一个B站小号专门用来RSS订阅使用。官方说明如下

用于用户关注动态系列路由
BILIBILI_COOKIE_{uid}: 对应 uid 的 b 站用户登录后的 Cookie 值,{uid} 替换为 uid,如 BILIBILI_COOKIE_2267573,获取方式:
打开 https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8
打开控制台,切换到 Network 面板,刷新
点击 dynamic_new 请求,找到 Cookie
视频和专栏,UP 主粉丝及关注只要求 SESSDATA 字段,动态需复制整段 Cookie

需要注意的是,在隐私窗口登录哔哩哔哩,获得cookie,填入RSShub的docker-compose文件的environment部分,部分配置文件应该长这样,uid换成B站的uid,cookie换成刚才在https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8 获取的cookie

1
2
3
4
5
6
7
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' # marked
PROXY_URI: 'socks5h://warp-socks:9091'
BILIBILI_COOKIE_uid: cookie

2. Twitter不能订阅解决

在RSShub的docker-compose文件的environment部分填入,三个参数不要加引号

1
2
3
TWITTER_USERNAME: #用户名
TWITTER_PASSWORD: #密码
TWITTER_AUTHENTICATION_SECRET: #Twitter 两步验证 -> 认证应用 -> otpauth://totp/Twitter:@_RSSHub?secret=xxxxxxxxxxxxxxxx&issuer=Twitter 中的 secret 部分

前两个好解决,第三个参数要打开两步验证软件,选择到twitter这个项目,选择编辑一次性密码,就能看到像otpauth://totp/Twitter:@_RSSHub?secret=xxxxxxxxxxxxxxxx&issuer=Twitter的一长串东西,只要把xxxxxxxxxxxxxxxx填入配置文件就行


最后,运行docker-compose down关闭容器,docker volume create redis-data重新创建缓存,docker-compose up -d再次开启容器,多刷新几次,bilibili和twitter应该可以正常订阅了,别的服务应该是一样的套路。

最后整体晒一下配置文件

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
version: '3.9'

services:
rsshub:
# two ways to enable puppeteer:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
image: diygod/rsshub
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000' # marked
PROXY_URI: 'socks5h://warp-socks:9091'
TWITTER_USERNAME: username
TWITTER_PASSWORD: password
TWITTER_AUTHENTICATION_SECRET: auth
BILIBILI_COOKIE_uid: cookie
depends_on:
- redis
- browserless # marked

browserless: # marked
image: browserless/chrome # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked

redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data

warp-socks:
image: monius/docker-warp-socks:latest
privileged: true
restart: always
volumes:
- /lib/modules:/lib/modules
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
net.ipv6.conf.all.disable_ipv6: 0
net.ipv4.conf.all.src_valid_mark: 1
healthcheck:
test: ["CMD", "curl", "-f", "https://www.cloudflare.com/cdn-cgi/trace"]
interval: 30s
timeout: 10s
retries: 5

volumes:
redis-data:

Prev
2024-04-07 18:31:02