cdhigh / KindleEar

Aggregates RSS and web content(Calibre recipe), sends to Kindle, and includes an e-ink optimized online reader.
http://cdhigh.github.io/KindleEar/
MIT License
2.71k stars 631 forks source link

如果购买个VPS,最低需要怎样的配置? #673

Closed opptimus closed 4 months ago

opptimus commented 4 months ago

首先感谢大佬这么多年一直运营这个项目,最近又进行了重构和脱胎换骨的升级! 近期打算购买个国外的VPS专门跑这个kindleear,请问: 1.我要抓取的网页很多都是墙外的,阿里云那种机房在国内城市的,是不是IP就是国内的,肯定抓取不了? 2.假设我使用ubuntu+docker方案,每两天需要抓取280个RSS源,每两天共计生成150M左右的多个epub文件,大概需要多少大小系统盘 SSD Size?以及需要多大的内存?能否从这个页面推荐一台VPS:https://cws-docs.pages.dev/zh/support/vps.html 3.再次感谢大佬

cdhigh commented 4 months ago

CPU: KindleEar没有特别复杂的CPU计算需求,主要耗时在网络请求上,所以CPU单核即可,并发只用到多线程,暂时没有使用多进程,购买多核就是浪费。

内存: 如果使用磁盘缓存(默认配置,config.py里面的KE_TEMP_DIR),内存需求不大,一般300M以下,所以1G内存足以。

磁盘: 至于磁盘大小,应用代码占用空间不大,KindleEar的Docker镜像解压后大约200M,加上docker本身的空间大约300M(蒙的),再加日志文件之类的,我认为1G足以。 剩下的就是生成电子书过程中的临时文件,临时文件不好计算,文本还好,大小有数,但是如果你抓取的原始图像文本本身很大,就会特别占用临时空间(KindleEar最终将其压缩为设备屏幕分辨率大小,可能从几M甚至几十M压缩到几十k或几百k)。

给个估算,临时封顶按最终epub文件大小的10倍左右吧,一般会少一些。 这个是每个epub的单独封顶计算,如果推送的是多个epub,则按一个最大的尺寸计算即可,因为生成每个电子书后这个电子书的临时文件就马上被删除了。

这么说来,2G磁盘空间足够用的了。

结论: 按照现在的VPS价格,如果只需要部署KindleEar,不需要有配置焦虑,买入门的即可,有钱任性除外~

cdhigh commented 4 months ago

我又仔细考虑了你这个问题,我之前的答复浅薄了,用我的小农思维丈量工业化大生产了。

既然你有几百个RSS,则必须需要多进程,否则什么时候能爬完? 不过好消息是KindleEar本身的架构是支持多进程的,只是我默认提供的Docker镜像不支持而已。 需要你修改配置即可启用多进程,最简方法就是使用redis代替内存队列即可到gunicorn.conf.py或default.conf配置文件里面启用多进程。

在有效分割RSS的情况下,多进程可以有效的提高爬取效率,每个进程一次爬一本电子书,每个线程一次爬一篇文章。

所以照你这个情况,多核还是很有必要的,一旦多进程,则内存需求也会相应增加。

还有,要在网页上管理几百个rss可能也是一个灾难,建议使用脚本进行管理,已经有一些api接口了(用于AJAX),但是可能不够,如果你需要,可以提一些建议甚至pull request.

opptimus commented 4 months ago

1.再次感谢大佬回复 2.我去研究下如何启用多进程的参数,但愿仅仅是改个布尔值,而不是让我写一段代码 3.实际上我之前用的旧版kindleear是采用七八个账户分类跑这几百个RSS源,同时避免单一epub文件超过30M,否则超出最大收取大小,亚马逊的kindle服务也不收纳 4.实际上这百个RSS大部分是公众号订阅源,并且是付费转换的,由于懒惰和无能,一直没能学会爬公众号转换成订阅源,把技术掌握在自己手中

opptimus commented 4 months ago

在:https://github.com/cdhigh/KindleEar/blob/master/docker/gunicorn.conf.py 这个文件中,找到了workers = 1和threads = 3 两个参数 是不是我把这两个数改的稍稍大一些,就可以变成多线程

cdhigh commented 4 months ago

改进程数量。

  1. 如果使用gunicorn
    改gunicorn.conf.py里面的行
    workers = 1 将1改成你需要的数量就行,还需要博士学位吗~

  2. 如果使用 nginx 默认配置一般是自动 (auto),一个核心跑一个进程,如果不是,可以修改配置文件。
    worker_ processes 1;
    还是改里面的数字

  3. 如果使用Caddy 进程数量是自动的,一个核心一个进程,好像不能设置具体跑多少个进程,但是可以设置进程上限,我也是之前配置Caddy时看了一遍其文档而已,不知理解是否正确。

还有,老版本的KindleEar的opml导出功能对xml字符的转义和新版本的不一致(老版本是我臆想的转义方式,现在我发现其他的rss阅读器都不那样做), 可能导出导入会有一些问题。 如果你会写脚本,本地处理一下,就是使用unquote()转换一下里面的链接。

(算了,我稍后还是添加一个脚本好了,转换老版本的opml到新版本格式)

opptimus commented 4 months ago

感谢大佬的积极回复,我尽快试验一下

cdhigh commented 4 months ago

在:https://github.com/cdhigh/KindleEar/blob/master/docker/gunicorn.conf.py 这个文件中,找到了workers = 1和threads = 3 两个参数 是不是我把这两个数改的稍稍大一些,就可以变成多线程

是的,workers是进程数,threads是线程数,
记得如果要改成多进程,同时要修改TASK_QUEUE_BROKER_URL为除memory以外的配置,否则你会发现推送失败。