前言
旧闻RSS大名,但是现在的RSS阅读器要么收费,要么功能太简单,因此,自己搭建一个RSS服务再好不过了。我选择了TinyTinyRSS,FreshRSS听说也不错,功能大体都差不多,以前用过TinyTinyRSS就懒得再改了。
安装
代码来源我不是咕咕鸽 –【服务器能干什么】二十分钟搭建一个属于自己的RSS服务
如果没有安装docker和docker-compose,原文有教程,这里不再赘述。
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
|
初始账号: admin
初始密码:password
用Nginx-proxy-manager
配置完反向代理后输入网址,输入账号密码即可进入页面,然后启用两个插件,mercury_full_text
和opencc
,如果要用fever api,则需要在设置中打开API
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
|
配置好反向代理后,输入网址即可看到RSShub页面
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
|
在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:
|