使用云服务器与calibre-web构建自己的在线书架(2022年版)
写在前面
本文介绍,在云服务器上安装calibre-web,以达到可以通过公网在移动端或者其他电脑,预览、访问整理好元数据的书籍。
背景
常用电脑已有一百余本整理好元数据的书籍,但当我想要在公司电脑或者移动端查看这些书籍时,只能提前下载到终端,十分不便。
目标
将已经整理好的数据上传云服务器,方便在其他端阅读。访问方法为:
使用云服务器公网ip 端口号访问资源,以calibre-web的用户登录。
配置
项 | 版本 |
---|---|
服务器类型 | 腾讯云轻量应用服务器,CPU 2核 - 内存 4GB - 系统盘 50GB |
操作系统版本 | Ubuntu Server 20.04 LTS 64bit |
docker | Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1 |
linuxserver/calibre-web | calibre-web的镜像,版本选择最新即可 |
其他有用工具 | winscp(相对于VSCODE上传文件,在我这里winscp工具断连机率更小) vscode(记录操作步骤、查看日志等) putty(远程连接服务器) Portainer(docker的可视化管理) |
说明:
- 其他有用工具不影响安装,个人使用习惯而已。
- 查阅问题时,请注意各项的版本。
- 不同于参考链接中使用
technosoft2000/calibre-web
镜像,由于作者本人已经无精力继续维护该项目,所以我选择了官方镜像linuxserver/calibre-web
风险提示
- 请注意所在地区出版业、信息系统管理、备案的有关法规风险。本文只适用于本人整理书籍,以方便本人使用,请勿以此参考,进行经营性活动
- 请注意安装calibre-web后的信息安全。暴露端口和ip访问都是带有风险的行为,个人使用云服务器时应进行有关安全配置,本文没有涉及,请按实际情况自行处理
主要参考链接
https://blog.mokeedev.com/2022/06/1113/
https://zhuanlan.zhihu.com/p/366373896
注意:不同于部分参考中使用technosoft2000/calibre-web
镜像,由于作者本人已经无精力继续维护该项目,所以我选择了官方镜像linuxserver/calibre-web
准备工作
一、docker
下载、运行docker网上已有详细操作,不赘述
验证:
sudo docker -v
显示docker版本即为安装成功
sudo systemctl status docker
显示状态为active即为运行成功
二、linuxserver/calibre-web镜像
下载linuxserver/calibre-web镜像
sudo docker search calibre
查看镜像列表,选择star最多的那个就行,是官方源
sudo docker pull linuxserver/calibre-web
下载此官方源。注意根据网络情况,可能会有中断、耗时很长的问题。多试几次,或者妥善使用代理进行网络加速。
验证:
sudo docker images
查看已下载的镜像列表,linuxserver/calibre-web
在列表中即为成功
三、新建calibre-web的文件夹
在服务器合适的位置创建两个文件夹data
和library
mkdir -p data
mkdir -p library
注意对文件夹进行授权,可以使用chmod -R 777 文件
的方式,也可以管理用户组进行授权。
注意这两个文件夹的绝对路径,后续步骤要使用。我这里是:/home/ubuntu/online_books/data
/home/ubuntu/online_books/library
四、上传metadata.db文件
打开本地calibre软件,查找书库位置。可以选中一本书,右键,打开所在目录。
一本书源文件所在目录的上级是作者目录,作者目录的上级是Calibre Library,这个文件夹下有文件metadata.db
。很明显,这是一个SQLite数据库文件。把metadata.db
复制到上一步的,服务器的library
目录下,
注意.db
文件的授权
正式安装过程
一、运行calibre-web容器
执行指令:
sudo docker run -d --name=book-calibre-web -e TZ=Asia/Shanghai -e DOCKER_MODS=linuxserver/calibre-web:calibre -p 15010:8083 -v /home/ubuntu/online_books/data:/config -v /home/ubuntu/online_books/library:/books --restart unless-stopped linuxserver/calibre-web
说明:
sudo docker run -d
后台运行容器指令。也就是说退出shell(例如我用putty正常退出,shell会发出hup信号,进程结束),进程继续进行--name=book-calibre-web
容器重命名为book-calibre-web。可根据需要修改-e TZ=Asia/Shanghai
指定时区。如果不指定时区会引发calibre-web某个插件的错误,导致无法启动容器-e DOCKER_MODS=linuxserver/calibre-web:calibre
固定写法-p 15099:8083
指定访问端口。这里设置访问路径为云服务器公网ip 15099端口。8083是不需要修改的,如果想用别的端口,例如9020端口访问,写作-p 9020:8083
-v /home/ubuntu/online_books/data:/config
calibre-web的配置路径。替换在1 准备工作 3. 新建calibre-web的文件夹的绝对路径-v /home/ubuntu/online_books/library:/books
calibre-web的藏书路径。替换在1 准备工作 3. 新建calibre-web的文件夹的绝对路径--restart unless-stopped
设置容器退出时重启。可以根据需要指定别的参数,参考 https://blog.csdn.net/REX1129/article/details/110115211linuxserver/calibre-web
固定写法
耐心等待,首次启动时间很长。当容器的日志输出以下时,启动完成:
…… services.d starting services
iservices.d done.
使用Portainer工具可以查看容器日志。
二、访问站点,初始化配置
访问站点为http:{云服务器公网ip}:端口号
端口号为上步设置的端口,此例为15099。如果需要账户密码,默认账户admin 默认密码admin123。
需要配置:
- 进入配置,设置Calibre数据库路径为
/books
,在功能配置中,启用上传 - 修改admin用户登录密码,增加各项权限
三、初始化上传书籍文件
步骤一 停止calibre-web容器
首先找到calibre-web容器id
sudo docker ps -a
然后停止
sudo docker stop {docker_id}
步骤二 上传书籍文件
按照1 准备工作 4. 上传metadata.db文件的方式,找到本地书库。将所有书籍文件上传到服务器calibre-web的藏书路径。其实calibre-web和普通单机calibre的结构相同,本地文件能读取的,同样的存放结构下,calibre-web也能读取。
上传完后,服务器library
目录下,类似这样
|-- library
|-- 各个作者名称的文件夹,该文件夹下保存该作者的各本书。各本书的文件夹里面是书的源文件、封面图片、`.odf`格式的元数据文件
|-- metadata.db
注意上传完书籍文件之后,同样要进行文件的授权。
四、重新启动calibre-web容器
验证:
登录calibre-web后,能看到所有书籍,能浏览或者下载格式合适的书籍,且能对书籍编辑元数据,保存成功。
常见问题
- 卡在applying linuxserver/calibre-web:calibre files to container 如果你使用Portainer查看容器日志的话,会发现第一次运行时卡在以上提示很久。 参考 https://github.com/linuxserver/docker-calibre-web/issues/105,简单来说就是等着吧。我在这一步大约用时2小时。
- 时区问题
某些资料在运行calibre-web容器,没有写明时区,或者将时区写作
-e TZ=Asian/Shanghai
/-e TZ=Asia/Beijing
,在我这里都是不行的,-e TZ=Asia/Shanghai
是成功的 - 无法保存书籍元数据 保存时提示如下:attempt to write a readonly database
一般都是权限的问题。如果data
和library
下的所有文件都是777
权限,可以试试重启容器
其他
- 无法预览pdf文件 谷歌浏览器无法浏览pdf文件,试试把嗅探下载资源的软件都排除嗅探。例如,我这里IDM会自动接管pdf文件的下载,把这种接管功能在对应的下载软件里面关闭即可。
- 无法在线格式转换 我也没搞明白。但我也不怎么用这个功能,如果有朋友指导一下,不胜感激。