source2RSS 计划成为通用的「信息源转 RSS」的 Python 框架,目前支持三大类信息源:
- 网站爬虫。参考项目中已有的抓取器,继承抽象基类编写抓取器,将作为插件供主程序调用,提供网站的信息流。
- 主动上传信息流。透过 API 传输合法格式的 JSON 数据,可以用来将 RSS 作为提醒的渠道以及分布式场景。
- Newsletter 转 RSS。
source2RSS 将按配置定期和在请求时运行抓取器获得信息流,并更新对应的 RSS 源;或在 API 收到数据后,保存其数据,并生成 RSS 源。可以前往此网页查看已有的 RSS 源: source2RSS。
项目地址: AhFeil/source2RSS: 一个信息源转 RSS 的 Python 框架,专注简化数据抓取后到 RSS 实际可用这一过程 (github.com)
指标 | 描述 |
---|---|
适用系统 | Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可 |
走通流程时间 | 20 分钟 |
(仅)对于 Python 新人,尤其是对爬虫感兴趣的,相信这个项目很适合用作参考借鉴
原生安装 source2RSS
程序依赖 MongoDB 作为数据库
前置准备
推荐使用普通用户,这里假设用户名为 vfly2
,并在家目录下的 pythonServe
放项目工作目录。
安装环境和依赖( Python versions 3.8+ )
sudo apt update && sudo apt install python3 python3-venv -y
创建目录 /home/vfly2/pythonServe :
mkdir -p ~/pythonServe/ && cd ~/pythonServe/
拉取仓库:
git clone https://github.com/AhFeil/source2RSS.git && cd source2RSS
运行初始化部署脚本
bash ./setup4host.sh
必须在项目安装目录运行脚本,作用:
- 创建虚拟环境和安装包
- 复制示例配置文件到 config_and_data_files 下
- 在安装目录生成 systemd 配置文件,默认将以当前用户身份运行程序
如果出现 "Host system is missing dependencies to run browsers. Please install them with the following command:",就按照提示安装依赖:sudo .env/bin/playwright install-deps
。
配置 MongoDB: [[15MongoDB#创建用户]]
use source2rss
db.createUser(
{
user: "try",
pwd: "password",
roles: [ { role: "readWrite", db: "source2rss" } ],
authenticationRestrictions: [
{ clientSource: ["127.0.0.1", "1.2.3.5"] }
]
}
)
连接一下查看是否成功
mongosh mongodb://try:password@127.0.0.1:27017/source2rss
配置
根据注释自定义(用户级)配置文件,尤其要填写 MongoDB 的相关信息
cd ~/pythonServe/source2RSS && vim config_and_data_files/config.yaml
这个(程序级)配置文件一般不必修改,可以看看内容
cd ~/pythonServe/source2RSS && vim config_and_data_files/pgm_config.yaml
先运行一下,测试是否正常工作
测试抓取器是否能正常调用
.env/bin/python -m src.crawler
测试完整程序是否能正常运行(访问 http://ip:8536/source2rss 查看已有的 RSS,初次为空)
.env/bin/uvicorn main:app --host 0.0.0.0 --port 8536
使用 Systemd 守护进程
可以看一下 Systemd 的配置文件,一般无须修改
cat source2RSS.service
更改权限
chmod 644 source2RSS.service
开机自启并立即运行
sudo systemctl enable --now $PWD/source2RSS.service
查看状态
sudo systemctl status source2RSS.service
如有修改 Systemd 的配置文件,使用下面命令刷新
sudo systemctl daemon-reload
方便用户使用
sudo systemctl stop source2RSS.service
sudo systemctl start source2RSS.service
sudo systemctl disable source2RSS.service # 关闭开机自启
journalctl -u source2RSS --since "1 days ago"
Nginx 反代
Nginx 如果和 source2RSS 在同一个机器上,可以直接用 Nginx 提供 RSS 文件,性能上会更好一点。
为了灵活部署,source2RSS 本身也能返回 RSS 文件,这样 Nginx 可以放在网络好的机器上,source2RSS 放在性能好的机器上。
本节不是必须要做的,可以跳过。下面以分开部署为首要选择。
使用 acme.sh 自动获取和更新证书: [[02acme.sh]] 使用 acme.sh 申请和自动更新证书的完整指南 – 技焉洲
记得修改域名
acme.sh --issue -d rss.vfly2.com --webroot /var/www/html
acme.sh --install-cert -d rss.vfly2.com \
--key-file /etc/ssl/private/rss.vfly2.com.key \
--fullchain-file /etc/ssl/certs/rss.vfly2.com.cer \
--reloadcmd "systemctl reload nginx"
创建缓存目录并设置权限
sudo mkdir -p /var/cache/nginx/rss && sudo chown -R www-data:www-data /var/cache/nginx
在 Nginx 的全局配置中设置缓冲区
sudo vim /etc/nginx/nginx.conf
http {
# ...
proxy_cache_path /var/cache/nginx/rss levels=1:2 keys_zone=rsscache:10m max_size=1g inactive=24h use_temp_path=off;
}
proxy_cache_path 是定义缓存路径和参数:
- levels=缓存目录层级
- keys_zone=缓存区名:内存占用大小(1MB内存可存约8000个key)
- max_size=磁盘缓存空间上限
- inactive=缓存保留未使用时间 60m、24h
- use_temp_path=off 避免临时目录拷贝
自行更改域名和路径
sudo vim /etc/nginx/sites-available/mp_rss
server {
listen 80;
server_name rss.vfly2.com;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location ~ ^/(source2rss|query_rss)/ {
# 启用缓存区
proxy_cache rsscache;
# 定义缓存键
proxy_cache_key "$proxy_host$uri$is_args$args";
# 缓存有效时间设置(当后端无返回缓存头时生效)
proxy_cache_valid 200 302 30m; # 成功和重定向缓存30分钟
proxy_cache_valid 404 5m; # 404缓存5分钟
proxy_cache_valid any 10m; # 其他状态码缓存10分钟
proxy_pass http://23.166.168.41:8536;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 缓存锁定机制(防止多个请求同时更新缓存)
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
# 忽略后端设置的Set-Cookie头(防止私有内容被缓存)
proxy_ignore_headers Set-Cookie;
# 以下情况不缓存:
# 1. POST请求
# 2. 带授权头的请求
# 3. URL包含敏感路径
proxy_no_cache $http_purpose $http_authorization $cookie_sessionid;
proxy_cache_bypass $http_purpose $http_authorization $cookie_sessionid;
}
}
server {
listen 443 ssl;
server_name rss.vfly2.com;
ssl_certificate /etc/ssl/certs/rss.vfly2.com.cer;
ssl_certificate_key /etc/ssl/private/rss.vfly2.com.key;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location ~ ^/(source2rss|query_rss)/ {
proxy_cache rsscache;
proxy_cache_key "$proxy_host$uri$is_args$args";
proxy_cache_valid 200 302 30m; # 成功和重定向缓存30分钟
proxy_cache_valid 404 5m; # 404缓存5分钟
proxy_cache_valid any 10m; # 其他状态码缓存10分钟
proxy_pass http://23.166.168.41:8536;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
proxy_ignore_headers Set-Cookie;
proxy_no_cache $http_purpose $http_authorization $cookie_sessionid;
proxy_cache_bypass $http_purpose $http_authorization $cookie_sessionid;
}
}
sudo ln -s /etc/nginx/sites-available/mp_rss /etc/nginx/sites-enabled/mp_rss
检查配置
sudo nginx -t
重启生效
sudo systemctl reload nginx
更新
先停止运行
sudo systemctl stop source2RSS.service && cd ~/pythonServe/source2RSS
在工作目录下,用 Git 拉取最新版本:
git pull
若有必要,更新 requirements 或配置文件等等
然后重启(如果报错,可能添加了依赖库,或者更改了下载项配置格式,前往主页查看修改)
sudo systemctl start source2RSS.service
sleep 3
sudo systemctl status source2RSS.service
查看日志
journalctl -u source2RSS -n 50
运行一下测试抓取器的功能
.env/bin/python crawler.py
迁移
由于使用 MongoDB 作为数据库,因此程序的迁移也就是数据库的迁移。除此之外,可以保存下 config_and_data_files 目录中的两个配置文件。
Nginx 直接提供本地的 RSS 文件
server {
listen 80;
server_name rss.vfly2.com;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
}
server {
listen 443 ssl;
server_name rss.vfly2.com;
charset utf-8;
ssl_certificate /etc/ssl/certs/rss.vfly2.com.cer;
ssl_certificate_key /etc/ssl/private/rss.vfly2.com.key;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# 下面 alias 的路径改为你设置的 RSS 文件所在目录
location /source2rss/ {
alias /home/vfly2/pythonServe/source2RSS/config_and_data_files/rss/;
autoindex on; # 显示目录
autoindex_format html;
autoindex_exact_size off; # 不显示文件大小
autoindex_localtime on; # 显示文件时间
}
# 显示图片的,方便 B 站的二维码登录
location /s2r4image/ {
alias /home/vfly2/pythonServe/source2RSS/config_and_data_files/images/;
autoindex on;
autoindex_format html;
autoindex_exact_size off;
autoindex_localtime on;
}
}
原文链接: https://yanh.tech/2024/07/deployment-process-for-source2rss/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。