source2RSS 计划成为通用的「信息源转 RSS」的 Python 框架,目前支持两大类信息源:
- 参考官方自带的抓取器,继承抽象基类编写抓取器,作为插件供主程序调用,提供网站信息流(主要用于为网站生成 RSS)
- API 接收到的合法格式的 JSON 数据(主要用于将 RSS 作为提醒的渠道以及分布式所需)
- (计划)Newsletter 转 RSS
source2RSS 将定期运行抓取器获得信息流,并更新对应的 RSS 源;或在 API 收到数据后,保存其数据,并生成 RSS 源。
项目地址: AhFeil/source2RSS: 一个信息源转 RSS 的 Python 框架,专注简化数据抓取后到 RSS 实际可用这一过程 (github.com)
可以前往此网页查看已有的 RSS 源: Index of /source2rss/ (vfly2.com)
指标 | 描述 |
---|---|
适用系统 | Debian 系发行版,包括 Ubuntu, Armbian,其他发行版稍改命令一般也可 |
走通流程时间 | 15 分钟 |
(仅)对于 Python 新人,尤其是对爬虫感兴趣的,相信这个项目很适合用作参考借鉴
原生安装 source2RSS
程序依赖 MongoDB 作为数据库,依赖 Nginx 提供 RSS 文件的访问
前置准备
推荐使用普通用户,这里假设用户名为 vfly2
,并在家目录下的 pythonServe
放项目工作目录。
创建目录 /home/vfly2/pythonServe :
mkdir -p ~/pythonServe/ && cd ~/pythonServe/
拉取仓库(并创建配置和数据目录):
git clone https://github.com/AhFeil/source2RSS.git && cd source2RSS
# git clone https://git.ahfei.blog/ahfei/source2RSS.git && cd source2RSS
安装环境和依赖( Python versions 3.8+ )
sudo apt update && sudo apt install python3 python3-venv -y
运行初始化部署脚本
bash ./setup4host.sh
作用:
- 必须在项目安装目录运行脚本
- 创建虚拟环境
- 复制示例配置文件到 config_and_data_files 下
- 在安装目录生成 systemd 配置文件,可以根据需要修改其中内容,程序默认将以当前用户身份运行
配置 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 crawler.py
测试定时抓取是否正常
.env/bin/python run_as_scheduled.py
测试完整程序是否能正常运行
.env/bin/uvicorn main:app --host 0.0.0.0 --port 8536
使用 Systemd 守护进程
可以看一下 Systemd 的配置文件,无须修改
sudo vim ./source2RSS.service
更改权限
sudo 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 # 关闭开机自启
Nginx 提供 RSS 文件
使用 acme.sh 自动获取和更新证书: [[02acme.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
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;
}
}
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;
}
}
sudo ln -s /etc/nginx/sites-available/mp_rss /etc/nginx/sites-enabled/mp_rss
检查配置
sudo nginx -t
重启生效
sudo systemctl reload nginx
迁移
由于使用 MongoDB 作为数据库,因此程序的迁移也就是数据库的迁移。除此之外,可以保存下 config_and_data_files 目录中的两个配置文件。
更新
先停止运行
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 100
运行一下测试抓取器的功能
.env/bin/python crawler.py
原文链接: https://yanh.tech/2024/07/deployment-process-for-source2rss/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。