自建 RSS
1 RSSHub
- docker 部署,参考,
docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=30 diygod/rsshub
注意 cache_expire 为 30s,则 30s 以后 RSS 客户端再去请求就会从源站拉取内容
CACHE_EXPIRE 和 CACHE_CONTENT_EXPIRE 的区别解释,来源 tg 群
1
2
3注意第一個是 (文章列表+文章) 的緩存,就算你不斷 F5 ,只要是在這個時間內都不會請求源站
比如說第一次請求到甲站的文章列表有ABC三篇文章, 這時緩存裡記著甲站有ABC及ABC的內容, 只要沒過期你怎樣F5就不會再請求甲站, 都只是緩存返回甲站有ABC
過期後(5分鐘)再一次請求甲站, 發現甲站的文章列表有BCD, 由於CACHE_CONTENT_EXPIRE(1小時)沒過期, 緩存裡有ABC文章自身的內容, 就不會重複請求BC文章, 只會請求D文
2 miniflux
注意 POLLING_FREQUENCY 为刷新频率 1min,这里大于 RSSHub 的 cache_expire 保证每分钟都会触发 RSSHub 的重新查询,即不使用缓存
ADMIN_USERNAME 和 ADMIN_PASSWORD 设置用户密码
ports 改成了一个高位端口 18080
BASE_URL 设置的域名
保存成
docker-compose.yml
,然后docker-compose up -d
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
29services:
miniflux:
image: miniflux/miniflux:latest
ports:
- "18080:8080"
depends_on:
db:
condition: service_healthy
environment:
- POLLING_FREQUENCY=1
- DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=用户名
- ADMIN_PASSWORD=密码
- BASE_URL=https://你的域名
db:
image: postgres:15
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=secret
volumes:
- miniflux-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "miniflux"]
interval: 10s
start_period: 30s
volumes:
miniflux-db:postgres docker 创建例子,
docker run --name my-postgres -e 'POSTGRES_USER=xxxxx' -e 'POSTGRES_PASSWORD=xxxxx' -e POSTGRES_DB=xxxx -d -p 5432:5432 postgres
,目前用这种方法 + miniflux 配置文件的方式,方便更新和调整
3 nginx
acme.sh 申请证书并安装
apt 装 nginx 该配置文件,只是简单的将 http 转成 https
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
46user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
server {
listen 443 ssl http2;
server_name 你的域名;
ssl_certificate ; #证书位置
ssl_certificate_key ; #私钥位置
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://127.0.0.1:18080; # 对应 miniflux 的端口
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
}
}
}
4 发送通知
telegram bot 创建 参考
配合 playwright arm docker,playwright 用于截图,同时共享时区运行
前几个选项都是为了让 rclone 能在 docker 中允许,而 mount 后是 root,所以要添加
--allow-other
,参考rclone 后台运行,接着通过 files 里的文件数量来确定挂载成功后,再启动 node
将 container 中的 mount 共享给 host 和 其它 container 要添加 shared,参考
1
2
3
4
5
6
7
8
9
10
11
12docker run -it --rm \
--cap-add SYS_ADMIN \
--device /dev/fuse \
-v /etc/fuse.conf:/etc/fuse.conf:ro \
-v /usr/bin/fusermount3:/usr/bin/fusermount3 \
-v $(pwd):/app \
-v $(pwd)/files:/app/files:shared \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-w /app \
mcr.microsoft.com/playwright:v1.48.2-jammy \
bash -c "(./rclone --cache-dir=rc_cache --temp-dir=rc_temp mount gd:/code/dynamic_bot/files files --vfs-cache-mode full --allow-non-empty --allow-other &) && (while [ \$(ls -1 /app/files | wc -l) -le 1 ]; do sleep 1; echo 等待挂载; done;) && (node bot.js 2>&1 | tee -a bot_output.log)"
qq bot
playwright arm docker
启动后,再启动这个,读取共享的 rclone mount,即/home/ubuntu/dynamic_bot/files
- NapCatQQ 用 docker 安装,主动 WebSocket 方式(也就是作为客户端连服务器),宿主机 3001 被占用,改成了 3002
- web ui token 从
config/webui.json
找
- web ui token 从
- 映射出
/app/.config/QQ
避免每次新建 docker 后要登录1
2
3
4
5
6
7
8
9
10
11
12docker stop napcat && docker rm napcat && docker run -d \
-e ACCOUNT=机器人qq \
-e WS_ENABLE=true \
-e NAPCAT_GID=$(id -g) \
-e NAPCAT_UID=$(id -u) \
-v /home/ubuntu/dynamic_bot/files:/app/napcat/files \
-v $(pwd)/QQ:/app/.config/QQ \
-p 3002:3001 \
-p 6099:6099 \
--name napcat \
--restart=always \
mlikiowa/napcat-docker:latest - Overflow 使用 方法一 官网一键打包整合包,填入 主动 WebSocket 地址
- 参考 starbot 文档 装 java 环境和 mirai-api-http 插件
- 后台运行
nohup bash start.sh > overflow-output.log 2>&1 < /dev/null &
- 参考 starbot 文档 装 starbot,装 python 和 redis
- 然后激活 venv,pm2 管理
pm2 start main.py
- 用小号测试
- 然后激活 venv,pm2 管理
5 配置和使用
miniflux 取消自动将条目标记为已读
firefox tracking protection 对 rss 阅读器网站要关闭,否则 twitter 不显示图片
添加订阅时,以 twitter 为例
http://本地ip:1200/twitter/user/用户名/showEmojiForRetweetAndReply=1
,本地 ip 不能是 127.0.0.1,那样会指向 miniflux docker 内部更新 docker,以 rsshub 为例
1
2
3
4
5
6
7
8
9docker pull diygod/rsshub
docker image ls
docker ps
docker stop old_container_id
docker rm old_container_id
docker run -d --name rsshub -p 1200:1200 -e CACHE_EXPIRE=30 diygod/rsshub
docker ps
# 删掉旧的 image
docker image prune更新 docker-compose,即 miniflux,参考
1 | docker-compose pull |
6 抓取 Twitter
6.1 模拟浏览器获取通知
- 开发
- 测试
- 简单通知类型的 Selenium 抓取方式
- 两种通知类型的 Selenium 抓取方式
- 在 Chrome devtools 左上角切换到 Service Worker
sw.js
来进行 js 的调试
- arm
- arm 版 Selenium Grid Server
- 代码里 webdriver.Chrome() 改成 webdriver.Remote(),见 Selenium Grid 使用