群晖 Calibre-Web 折腾记
这些年书没看几本,到处搜刮整理的电子书资源却达到了惊人的 1T 多,检索和查找书籍成了一个头疼的问题。书可以不看,但不能没有,于是开启了庞大的电子书整理之旅。
1. 下载
所有书籍资源都存放在百度网盘里,想靠百度那点小水管不知道要下载到何年马月,于是充值了 SVIP,期间却因为各种文件名过长、违规资源等等导致了很多文件下载失败,修复路径以及在线解压再下载等手段,陆陆续续花了 2 天时间才下载好,但也舍弃了不少“违规”资源,多少还是有一点遗憾。
2. 解压和清理
下载完后用 C# 写了个控制台应用递归遍历解压了各类 zip 以及清理了空文件夹和脏文件(比如百度网盘生成的 .downloading 文件),然后利用 dupeGuru 扫描清理了重复文件。
3. 导入 Calibre
Calibre-Web 的运行依赖于 Calibre 生成 metatde.db 的数据库配置文件,所以先在电脑上安装 Calibre,然后在群晖里新建一个文件夹用于 Calibre 应用目录,最后作为远程文件夹挂载到本机供 Calibre 使用,切记赋予这个文件夹 Everyone 读写权限。
所有书籍导入 Calibre 是一个极度漫长的过程,耗时数十个小时,因为每本书都需要读取元数据生成封面等信息,暂时没有找到快速导入的方法。此外在以 从文件夹和子文件夹添加书籍 方式批量导入书籍时,提示 多文件图书?
对话框,不同的选项,结果也不同:
原始文件夹如下,共 6 本书籍,其中 3 本是包含多种格式(mobi + epub + azw3):
- 选择 是,导入了 4 本
- 选择 否,成功导入了 6 本
从结果看,选择“否”之后导入了全部书籍,是我们想要的结果,官方是这样描述这个功能的:
Calibre 假设每个文件夹包含一本书。一个文件夹中的所有电子书文件都假定是同一本书,只是格式不同。
4. 安装 Calibre-Web
网上流行的一些教程都是推荐 technosoft2000/calibre-web 这版 Docker 镜像,功能全面。但经过我安装测试后发现了一些问题,比如单独进行格式转换或者邮件推送 Kindle 是没问题的,但是两者一旦结合,转换并推送 Kindle 时就会失败,翻看了源码,发现在处理邮件发送时,获取待发送的书籍路径多了一层,导致找不到文件。此外还有豆瓣获取元数据的 API 失效,经常卡死,镜像作者也指出没有时间维护了,遂放弃。最终选择了 linuxserver/calibre-web,并完美解决了各种问题。
群晖 Docker 创建容器很简单,基本一路 Next 就可以跑起来了,也可以参考这篇教程。
linuxserver/calibre-web 前期使用正常,除了每次启动容器有点慢,整体还是可以的,后期随着 calibre 升级到 v6,群晖内核不支持了,导致格式转换报错,于是选择了 johngong/calibre-web,一个国人维护的版本,很多功能都集成了,开箱即用。
5. 添加格式转换功能
linuxserver/calibre-web 版本镜像没有书籍转换功能,需要在创建容器时新增环境变量 DOCKER_MODS=linuxserver/calibre-web:calibre
,切记一定是创建容器时添加,如果创建后再添加,大概率会失败。
启动后登录 Calibre-Web,在权限管理
-> 扩展程序配置
-> Calibre 电子书转换器路径
填写 /usr/bin/ebook-convert
,保存即可。
johngong/calibre-web 版本自带,无需额外设置。
6. 设置正确的时区
新增环境变量 TZ=Asia/Shanghai
重启容器即可。
johngong/calibre-web 版本自带,无需额外设置。
7. 添加新的豆瓣 API
新版 Calibre-Web(0.6.14)移除了 douban-api,国内不科学上网的话无法搜索书籍的元数据,网上找到一个解决方案:calibre-web-douban-api,复制 src/NewDouban.py
到 calibre-web/cps/metadata_provider/
目录下,重启项目即可。
也可以直接下载后通过 Docker 的卷映射挂载到 /app/calibre-web/cps/metadata_provider/NewDouban.py
目录即可,效果是一样的。
如果遇到搜索元数据时容器卡死,可以删除 /app/calibre-web/cps/metadata_provider/
下其他源,只保留我们新增的这个豆瓣源,然后重启容器即可。
Ps. johngong/calibre-web 版本设置 ENABLE_DOUBAN_SEARCH=true 环境变量即可。
最新版 johngong/calibre-web 需要把 usr/local/calibre-web/app/cps/metadata_provider
下所有搜刮器删除然后使用新的豆瓣搜刮器,执行下 wget -P /usr/local/calibre-web/app/cps/metadata_provider https://raw.githubusercontent.com/fugary/calibre-web-douban-api/main/src/NewDouban.py
或者也可使用上面提到的卷映射,效果是一样的,最后重启容器即可。参考
8. 开启在线阅读功能
linuxserver/calibre-web 版本默认没有开启该功能,前往 权限管理
编辑对应用户权限,勾选 查看书籍
选项即可。
johngong/calibre-web 版本自带,无需额外设置。
9. 配置 Kindle 推送
首先进行 SMTP 邮件服务器设置,具体可以参考邮箱服务商的帮助文档,比如我用的 QQ。然后前往亚马逊,管理我的内容和设备
-> 首选项
,获取对应设备的 Kindle 邮箱地址,并设置发件人白名单。最后在 Calibre-Web 里 接收书籍的Kindle邮箱地址
填写即可。
Ps. 国内的推送服务还能使用 2 年,到时候估计得切到美区了。
10. 更新的注意事项
所有版本的 calibre-web 都不推荐在网页内自动更新程序,可能会出现莫名其妙的问题。其实更新容器也很简单,我们只要导出容器设置文件(端口设置、环境变量等都会保留),然后删除容器,更新镜像后通过导入配置文件重新创建容器,所有资料和配置都还在,分分钟就搞定了,当然也可以使用 Watchtower 来自动更新 Docker 镜像与容器。
11.database disk image is malformed
更新元数据时不当的操作可能会导致数据库损坏,后续所有的保存都会提示 database disk image is malformed ......
,此时可以尝试使用 SQLite Expert Professional 5 对 metadata.db
进行修复,然后使用修复后的 db 文件覆盖替换就行。