信息源转 RSS 框架 – source2RSS 的安装步骤

source2RSS 计划成为通用的「信息源转 RSS」的 Python 框架,目前支持三大类信息源:

  1. 网站爬虫。参考项目中已有的抓取器,继承抽象基类编写抓取器,将作为插件供主程序调用,提供网站的信息流。
  2. 主动上传信息流。透过 API 传输合法格式的 JSON 数据,可以用来将 RSS 作为提醒的渠道以及分布式场景。
  3. 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

必须在项目安装目录运行脚本,作用:

  1. 创建虚拟环境和安装包
  2. 复制示例配置文件到 config_and_data_files 下
  3. 在安装目录生成 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 交流依文章步骤遇到的问题。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇