Calibre-web 个人图书库搭建记 8 开始准备改代码

因为上周末在腾讯云上搭建了Calibre-web 程序。为了节省服务器硬盘,为了以后书库扩容方便,自己把书库文件通过腾讯云的对象存储挂载到云主机的方式存放的。

开始主要是想用腾讯云免费的50G对象存储(cos)空间,但后来发现用户对象存储好像天热比较适合这种固定且读写不频繁的图书库场景。

但用对象存储挂载到云服务器上发现读写瓶颈非常明显,基本上只要一更新calibre的数据库就会把 Calibre-web的程序搞崩溃。自己开始不知道是对象存储当磁盘挂载的读写造成的。结果反复的尝试和研究calibre-web的驱动方式与挂载磁盘的关系,一个劲的重启、删除数据库、重装来测试。

最后才发现原来是对象存储当磁盘使用不能把对象文件当数据库来使用。仔细研究了一下calibre管理图书的原理,发现书库的索引库放在了跟图书源文件一个目录,这行好处是可以配置一个数据库文件地址,就能按照数据相对索引到图书文件。

但用在我搭配的这个方案上直接就是瓶颈了,只能考虑需要程序了。因为查找图书文件需要根据索引数据库(metadata.db)的相对位置寻找,所以calibre-web只有一个配置metadata.db目录的选项。自己考虑将metadata.db这个索引数据放到服务器本地磁盘上去,这样可以与图书文件分离开来。程序中单独再配置一个数据库位置,读写索引数据库都通过本地磁盘进行,手动管理本地书库和云书库索引文件。

因为对python编程不熟悉,自己只是先简单的在代码中改造了一下图书索引数据库的连接位置。这样配合系统配置的索引库目录还能继续找到真正数据文件存放的目录,类似于换了一个数据,但静态文件还继续从原来文件夹读取。

一换本机磁盘上的图书索引数据库地址,接着程序就流畅的运行了起来,不在频繁程序崩溃了。这也就基本把这个calibre-web程序在腾讯云上跑稳了。

只等域名备案解析了吗?

不是的,其中在搞处修改的时候好需要考虑很多未来升级的问题,我的计划是直接按照开源的玩法,直接提交一个代码可单独配置什么图书索引数据库和图书文件目录的选。但自己也是摸索着看python的程序代码,基本上一头雾水,也就不敢随便改动一个功能点进行代码提交主链。

因为这个功能比较小众,不知道主链能不能接受单独分离索引数据库与图书文件的方案,这个方案与calibre生成数据库的方式相违背。另外希望修改这个功能还有个私心,我希望后面的书库在对象存储的文件能直接外网访问。服务器既不占带宽,用户又能获得一流的下载体验。这也需要更大范围的改动代码和增加独立书库资源链接的配置选项。

因为cos对象存储挂载到本地磁盘的文件可以设置在本地硬盘有个缓存目录,我直接把calibre-web程序中的数据库接到了缓存目录,测试发现读写的cos对象存储缓存目录的文件就无法同步更新了。本地缓存成了个独立文件,metadata.db 对象存储的修改无法同步下来,程序修改metadata.db也无法同步更新对象存储的数据。

最近看搜索引擎有人搜索如何修改calibre-web得语言,其实默认语言也有改源码。不过系统自带给用户修改语言的功能,需要每个注册用户自己修改语言偏好。calibre-web本身设计的是登录后才能操作的。但有个开放注册和允许任何人可以浏览的设置。而游客模式居然是设置了一个叫Guest的系统用户,未登录默认为此账户权限,所以系统开启任何人可以浏览后会自己在用户列表创建一个guest的用户,关于游客的权限和默认语言就通过后台修改guest用户的偏好设置即可。

设置默认中文修改:cps/ub.py 文件
locale = Column(String(2), default=”en”)
改为:
locale = Column(String(2), default=”zh_Hans_CN”)

现在书库主要程序有了,还想着有个地方能标注一下书库的使用说明,比如如何发送到kindle、如何新建并下载图书。如何选择并上传书籍。

今天又折腾着测试了一下更新本地的图书索引库到云端,然后在后台点了重新连接calibre数据库。结果就是前台500错误。自己又尝试了多次重启,修改都无果,不知道是不是又要清空代码重新配置后台的程序。这个更新数据库程序就要挂掉的问题太折磨人了。自己要仔细研究一下这个更新书库索引的方式和方法。发现每次同步上去的书库或多或少都有些问题。需要仔细测试下本地索引数据库metadata.db和线上数据库如何才能正常运行。

经过反复的测试,我将metadata.db 文件单独放到服务器的其他目录中了,然后修改 cps/db.py 文件中的语句,让程序能访问到单独制定的bd文件。经过多次删除重新部署代码的测试结果,个人认为在本机的calibre 打开的情况下不要上传 metadata.db 文件,只有在关闭本地Calibre 软件后,确保 metadata.db 文件没有被读写的情况下再通过FTP或COS上传工具上传到服务器的自定义目录。

另外本地编辑过calibra的图书目录后建议在calibre 的calibre-书库维护-检查书库,然后关闭calibre 后再上传。

现在还在线上遇到几个问题,因为是从网上下载的图书文件,所以图书的分类、作者、书名这些都非常诡异,分类基本上是一本书一个,作者也基本是一本书一个,名字又有很多有营销标题党,有些还没有缩略图。急需找到一种方式可以通过程序对整个数据的分类、缩略图、作者进行规范。现在接近13000本电子书的书库如果单靠一个人去精修基本会累哭。还是需要借助程序来进行维护,找找看看能不能从豆瓣进行一些数据整理,先把有 isbn号码的数据进行一些整理,对于一些网文和文档类的再进行细分。

在calibre-web端有太多的分类和作者,在分类页、作者页、高级搜索页一分钟都感觉加载不完,体验不好,服务器也浪费资源。根本无法通过分类和作者来索引图书了。

折腾来,折腾去,开始有兴趣按照现在的calibre-web版本进行功能修改了。了解到 calibre 软件本身的连接/共享-启用内容服务也内置了比较好用的web端书库浏览功能,如果你是windows、linux桌面版服务器,或者不想折腾只想在内网共享图书馆,可以考虑直接使用calibre 的内容共享功能,简单易用,功能同样强大。

Calibre-web 部分截图:
0000


这一系列文章并没有什么具体的技术细节,开了个QQ交流群(72239907),方便大家交流读书、技术问题、图书资源共享。如果有什么软件安装等问题也可以加 calibre 交流群的QQ群(72239907)进行交流。
点击链接加入群聊【爱读书 读好书 calibre】:https://jq.qq.com/?_wv=1027&k=5vYWQsV