0%

本地图书管理:通过calibre-web打造个人在线书城!

导语

上一期,跟大家介绍了本地音乐管理,今天带来的是本地图书管理——打造个人在线书城。

其实与其说是教程,这篇文章更像是作者打造方案的一个记录。虽然可能硬件环境和作者不同,但配置方面还是有很大的参考价值。

本文尽可能通俗,但部分内容仍有一丢丢硬核。 如果想完全参照本教程,需要拥有基础的linux和docker基础,以及一台云服务器。

本系列文章主要包含一下内容:

  • 实现效果一览
  • 整体架构图示
  • 安装配置calibre管理图书
  • 安装配置calibre-web打造在线书城(可选)
  • 实现一键传书到kindle(阅读器或客户端都可)(优雅)
  • 安卓端静读天下配置

预警: 本文大概5000字,且图片较多。

实现效果

  1. 在线封面墙&在线搜索

图示1

  1. 在线下载、一键传送到kindle

图示2

  1. 用户管理及登陆控制

图示3

  1. 手机端一键下载并加入书库

整体架构图示

拓扑结构图

一点说明

  1. 在构建在线书城的过程中,NAS和云服务器并不是必须的。NAS因为长期开机可以确保web服务的正常访问。云服务器为了方便随时随地获取想看的图书。事实上,下载到设备上的图书不需要连接到书库也可以阅读。没有云服务器也可以在局域网内快速检索和下载图书。
  2. 作者将本地书库和calibre客户端分布在两个设备上。目的在于,calibre-web服务可以更加容易的访问到本地书库和数据库以便于提供服务。而相较于通过web端管理书籍,显然客户端功能更强大、更易用。

安装配置calibre管理图书

下载calibre

官方地址:https://calibre-ebook.com/download

根据你的系统下载所对应的版本。

安装配置

安装过程除了安装目录之外,一路下一步就好。安装好后会弹出一个窗口让你填入书库地址。这个地址会建一个图书的数据库以及存放你导入的图书文件。

  1. 如果你和我一样通过NAS管理,建议把数据库地址放到NAS所处的网络地址上。
  2. 如果你有一个磁盘容量和带宽比较可观的云服务器,也可以直接把书库放到云服务器上。
  3. 甚至该服务还支持把书库挂载到google drive云盘上,不过考虑到延迟和通信开销,并不是很建议这样做。
  4. 以上都不是,就放在本机上就好了。机械硬盘就可以,因为基本只是存放文件。

注: 如果后续要打造在线书城的话,启动calibre-web的主机必须和书库所在的主机是同一台。

导入图书

image-20220218110343017

点击左上角添加图书,根据你的需要选择三种使用情形去添加。

注: 如果使用第二个文件夹和子文件夹添加的时候,会弹出一个英文提示。大意为”假设你同一个文件夹的图书都是同一本书的不同版本吗“。根据你的实际情况选择YES或NO。一般这个回答都是NO。

刮削图书信息

在网络上下载的图书,有的图书信息是不全的。可能缺少封面或者作者、出版社等其他信息。为了方便归纳、搜索,也为了在WEB界面可以展示漂亮的封面墙,我们需要刮削图书信息。

点击左上角第二个图标“编辑元数据”。

刮削

如果需要手动修改某一本书,就点击第一个。不过推荐使用第三个,calibre会根据书籍的信息自动在网络数据库中匹配元数据并下载。

不过有一说一,自从豆瓣关闭数据搜索接口之后,只有其他国外接口可用,刮削速度一言难尽。

阅读

待刮削完成后,可以通过左侧的作者语言等分类对书籍进行归纳,搜索也更加精准。

双击图书即可打开了,如果使用其他阅读器,也可打开路径使用你喜欢的阅读器打开。

开启内容服务器(可选)

内容服务器

点击右上角图标“连接共享”,“启用内容服务”即可启用。

启用后,在浏览器输入软件提示的“IP:8080”即可实现web访问。

该内容服务器可以实现局域网内在线阅读和下载,但界面过于简单,功能也太过单一,无法实现文章开头所描述的功能。这不是我们想要的。

安装calibre-web打造在线书城

注: 下面所述的方法适用于linux或者群辉系统,如果需要在windows上实现请参照下文中出现的项目(实在不行也可参考本文使用docker安装)。

作者使用docker安装,docker作为个人服务的运维工具不是一般好用。

安装Docker和docker-compose

  1. 安装docker

    参考www.runoob.com/docker/ubuntu-docker-install.html

    打开网址后侧边栏有不同系统安装docker的具体方法

  2. 安装docker-compose(可选)

    docke-compose是一个适用于docker的工具。可以通过配置文件启动/关停容器。比起命令行启动更方便。

    参考https://www.runoob.com/docker/docker-compose.html

通过docker启动calibre-web

安装好docker后,其他开发者已经构建好的calibre-web镜像我们就可以直接拿来用了。

最开始尝试了如下的两个镜像:

但启动容器的时候,需要下载一些资源。由于网络连接性的原因,下了几次没能成功。于是作者使用的下面这个镜像。

该镜像最近一次更新是在2022.2.15。经测试可用,功能也比较丰富。

下面提供启动命令和docker-compose文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# docker cli
sudo docker run \
--name=calibre-web \
-p 8083:8083 \
-p 8080:8080 \
-v /配置文件位置:/config \
-v /书库:/library \
-v /自动添加文件夹:/autoaddbooks \
-e UID=1000 \
-e GID=1000 \
-e USER=用户名 \
-e PASSWORD=用户密码 \
--restart unless-stopped \
johngong/calibre-web:latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# docker-compose.yaml
---
version: "2.1"
services:
calibre-web:
image: johngong/calibre-web
container_name: calibre-web
environment:
- PUID=1000 # 按需修改(可选)
- PGID=1000 # 按需修改(可选)
- USER=用户名 # 需要修改
- PASSWORD=密码 # 需要修改
- TZ=Asia/Shanghai # 按需修改(可选)
volumes:
- /配置文件位置:/config # 需要修改
- /书库:/library # 需要修改
- /自动添加文件夹:/autoaddbooks # 需要修改
ports:
- 8083:8083 # 按需修改(可选)
- 8080:8080 # 按需修改(可选)
restart: unless-stopped

注: calibre的内容服务端口默认是8080,因为运营商网络是不开放8080端口的,可以将容器的8080端口映射到宿主机其他可用端口,按需修改。(不重要,如果配置了calibre-web,这个端口用不太到)

另外需要注意的是,“/书库 :/library” 冒号前的目录必须指向第一步安装calibre时填入的书库地址!!(重要)

命令行和docker-compose的使用就不赘述了。比较简单,参见菜鸟教程 https://www.runoob.com/docker/docker-tutorial.html。相信使用NAS或者云服务器的,应该上手很简单。

一点说明

由于豆瓣关闭了获取数据的接口,该镜像可配合另一个第三方获取豆瓣数据的镜像fugary/simple-boot-douban-api进行刮削。但在我测试后似乎不太可用。该镜像能够正确的获取并返回数据,但在calibre-web页面中依然提示失败。

不过还是把docker-compose.yaml的内容放上来,需要的可以自行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
---
version: "2.1"
services:
calibre-web:
image: johngong/calibre-web
container_name: calibre-web
environment:
- PUID=1000
- PGID=1000
- USER=your_username
- PASSWORD=your_password
- TZ=Asia/Shanghai
- DOUBANIP="douban-api:8085"
volumes:
- /path/to/calibre/config:/config
- /path/to/calibre/books:/library
- /path/to/calibre/autoaddbooks:/autoaddbooks
ports:
- 8083:8083
- 8084:8080
restart: unless-stopped

douban-api:
image: fugary/simple-boot-douban-api
container_name: douban-api
ports:
- 8085:8085
restart: unless-stopped

calibre-web配置

启动后,静待几分钟。打开浏览器在浏览器中输入http://ip:8083就可以打开了。地址中的ip是局域网中安装calibre-web的主机的ip地址。

输入默认用户名密码。

用户名:admin

密 码:admin123

登陆后会提示输入书库地址,请填入/library

进入后第一步请点击右上角用户。修改默认管理员用户的用户名和密码,并给予下载和在线阅读的权限。如果你想开放给自己的朋友使用也可以新建用户并把账密告知对方。当然在线书城也支持匿名访问和开放注册,不过个人使用的话并不建议开启。

至此,在线书城的搭建工作就基本完成了。

不过,目前该书城只能在局域网内访问。如果需要随时随地在线阅读,还需要内网穿透到公网上。

首页

公网访问

如果家庭宽带有公网IP,可以通过设置路由器端口映射或者开启DMZ主机实现公网访问。

但如果没有公网,就需要进行内网穿透。可以使用现成的内网穿透服务,也可以购买云服务器通过frp、rathole等工具自行搭建。

因为这部分不是我们的重点,就不展开了。

实现一键传书到kindle

亚马逊账户设置

注: 此处的kindle不只限于墨水瓶阅读器。各平台的客户端也同样支持。

传书所使用的是亚马逊的邮件内容服务。每一个登陆账户的kindle客户端,都会分配一个特定的邮箱,只要把图书文件作为附件通过邮件发送到特定的邮箱,该图书就会通过网络自动同步到对应的客户端中。

首先打开亚马逊平台www.amazon.cn/并登录账户。

点击”我的账户“ - ”管理我的内容和设备”。

登陆亚马逊

点击“首选项” - “个人文档设置”

个人文档服务

如果显示不可用的话可能需要开启上面的两个“自动同步”和“自动更新”服务。

开启后就可以在下面看到你的设备和设置了。

image-20220218170818511

在此可以看到你所有的kindle设备,以及后面设备所对应接受邮件的邮箱。邮箱地址不好记的话也是可以点击编辑修改的。

如果设备过多,各个设备无法区分,该地址也可以在kindle的客户端的设置中查看。

客户端邮箱地址

我们需要做的是编辑网页中“已认可的发件人电子邮箱列表”。这相当于一个白名单,为防止骚扰,kindle只接受列表内的的邮箱发送的邮件。把你在用的邮箱地址输入进去就可以了。

账户设置测试

现在我们需要测试一下该服务是否可用。

打开你的邮箱,写信,收件人填写设备对应的接受邮箱的地址。

然后添加附件,附件添加一本kindle支持格式的书。主题随便填,正文可置空。点击发送。

image-20220218172038430

发送后会收到亚马逊发送的反馈邮件。如果提示“您的个人文件在您的Kindle图书馆中已存档”,则说明发送成功了。这时候打开kindle,图书已经在图书馆里躺着了。

但如果收到的反馈文件是“由非认可的发件人发送的个人文件”,则可能前面的设置有问题,需要返回检查一下。

Calibre-web邮件客户端配置

确定亚马逊邮件内容服务可用后,在打开calibre-web进行配置。即便不使用calibre-web,而只是使用calibre客户端这个服务也是可用的。配置内容大同小异

  • calibre-web打开右上角管理权限。
  • calibre则是点击右上角 “连接共享” - “设置基于电子邮件的书籍共享”

客户端邮箱服务

以下内容以calibre-web为例,客户端设置大同小异。

  1. 点击编辑邮箱服务器设置

image-20220218173205362

  1. 填写对应的内容

image-20220218173243081

上图只是举例。具体填写内容请参考你的邮箱设置。下图以126邮箱为例。

  1. 在网页登录你的126邮箱

  2. 进入设置 - SMTP设置

  3. 开启SMTP服务

  4. 新增设备授权码。

    :为保护账户安全,在第三方客户端登陆邮箱时,使用授权码登陆,而不是邮箱密码。

  5. 查看服务器地址和加密方式

邮箱账户设置

常见的邮箱SMTP服务器端口如下:

服务器名称

服务器地址

-SSL协议端口

-非SSL协议端口

Gmail

smtp.gmail.com

465

QQMail

smtp.qq.com

465或587

25

163邮箱

smtp.163.com

465或994

25

阿里邮箱

smtp.aliyun.com

465

25

outlook

smtp.live.com

25

其他的邮箱以“126邮箱(例) smtp 设置”为关键词搜索就可以了。一般在邮箱设置中都有相关的文档。按照上述内容填写到你的calibre的邮件服务器设置中。

测试calibre-web邮件客户端配置

在邮件服务器设置中填好后,点击下方保存设置并发送测试邮件。

测试邮箱客户端

在点击右上角任务列表。会看到此次测试任务。如果任务状态显示已完成,则测试成功。此时邮箱也会发件邮箱也会收到一封测试反馈邮件。

:新注册的邮箱或者可能存在其他原因,会导致任务失败。如果碰见失败的情况,可以静待一天再来试试。

测试任务已完成

测试成功后。维护一下账户的接收邮箱。

接受邮箱

然后返回首页,打开任意一本书,点开后点击发送到kindle。

发送到kindle

快去你的kindle看看,是不是同步过来了!

发送到kindle成功

kindle

至此,kindle一键传书功能配置完成,相较于在本机上插数据线传输文件,自然是方便优雅的多。

安卓端静读天下配置

在安卓端,除了kindle客户端还有一个个人认为更加好用的阅读器——静读天下。这个软件不仅对图书格式支持的很全面,而且还支持配置calibre服务器。

静读天下配置calibre服务器

首先下载安装。有的应用商店可能没有,找不到就在搜索引擎上搜索一下。这个软件有免费版和专业版,免费版有少许广告(可关闭),功能上两者一致。

打开软件 - 打开侧边栏 - 点击“网上书库”。

侧边栏网上书城

点击右上角三个点 - 增加新书库。

在表单中输入书库名和书库网址。书库名随意填写,只做标识用。书库网址填写http:\\ip:port。如果做了内网穿透,ip部分填写域名或公网ip。如果没有就填写web服务所在主机的局域网ip,例http:\\192.168.2.121:8083。端口按照你之前设置的端口填写。

:calibre-web的默认端口是8083,calibre客户端内容服务的默认端口是8080。

添加后打开新添加的书库,按提示输入账户密码进行登陆。登陆后的页面和在浏览器上基本是一致的。搜索想看的书籍,点进去点下载。图书就下载到你的手机里了。

静读天下基本设置

这时候点击返回我的书架 - 全部书籍,刚刚下载的图书应该还不在你的书架上。

不要担心,打开设置勾选上自动把主目录的新书籍导入到书架。主目录就是这个选项下面的目录地址sdcard/Books,你下载的书就默认在这个位置。勾选上述选项后,再下载图书,图书就会自己跑到你的碗里去了(误)。

不过,他这个自动扫描似乎不是实时的,如果你发现下载了,书架中还没有,可以手动点击下面的导入书籍进行导入。

我的书架

现在只管大快朵颐吧!!!!

其他阅读器设置

果你使用其他阅读器,且该阅读器不支持calibre也没关系。反正书城是支持在线访问的,只需要在浏览器中打开书城,点击下载。一般默认下载的路径在~/Download,在该路径下找到图书,然后移动到阅读器对应的文件夹下就可以了。有些阅读器即便不移动也可以直接扫描出来。

结束语

本期内容到此就告一段落了。看上去内容很多,实际上配置起来没那么麻烦,只是需要一点docker的知识。但一次配置,省一万次麻烦。身边如果有喜欢看小说的朋友,还能借此装个小逼。

作者不写水文,只写干货。

(本文本来打算首发小黑盒的,可小黑盒的富文本编辑器实在是太难用了,图片也抓不下来。)