如何在Ubuntu14.04上创建calibre电子书服务器
介绍
Calibre 是一个免费的开源电子书管理器。
尽管 Calibre 可能因其桌面客户端而闻名,但它也可以充当强大的服务器,允许您从世界任何地方访问您的电子书(或与朋友分享您的收藏)。 将您的电子书保存在服务器上非常棒,因为您无需在想阅读时随身携带相同的阅读设备。 如果您去旅行,您无需担心随身携带您的电子书收藏!
该服务器包括一个简单而优雅的浏览器前端,允许您从图书馆搜索和下载书籍。 它还内置了一个适合移动设备的网站,可以轻松地将书籍直接下载到电子阅读器——即使是只有最基本网络功能的阅读器。
例如,Calibre 的浏览器与 Kindle Touch 配合使用,即使该设备只有一个电子墨水显示屏和一个实验性浏览器,它也可以直接下载书籍。
在本教程中,我们将了解如何在 Ubuntu 14.04 服务器上安装、设置和使用 Calibre。 我们还将了解如何使用 calibredb 命令 直接从服务器创建、自定义和维护您的电子书数据库。
对于本教程,我们将介绍:
- 安装口径
- 创建电子书库,或导入现有的
- 使 Calibre 服务器成为后台服务
- 自动将新书添加到图书馆
在本教程结束时,您将拥有一个小的初始图书馆,您可以轻松地向其中添加新书!
先决条件
请确保您具备以下先决条件:
- Ubuntu 14.04 液滴
- 一个 sudo 用户
本教程中的示例显示了运行全新安装的 Ubuntu 14.04 的 Droplet,但它们应该很容易适应其他操作系统。
第 1 步 — 安装 Calibre
Calibre 可从 APT 软件存储库获得,但根据其创建者的建议,最好从其网站上提供的二进制文件中安装。 Calibre 更新非常频繁,并且 repos 中的版本往往落后。
幸运的是,Calibre 的创造者让这件事变得非常简单。 只需在您的服务器上运行以下 Python 命令。 在运行命令之前,请仔细检查 官方 Calibre 站点 以防命令已更改。
安装 Calibre(确保滚动以获取整个命令):
sudo -v && wget -nv -O- https://raw.githubusercontent.com/kovidgoyal/calibre/master/setup/linux-installer.py | sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()"
您会注意到一些有关桌面集成失败的警告,但这些警告可以忽略,因为您正在远程服务器上安装 Calibre。
第 2 步 — 安装依赖项
Calibre 命令行工具 calibredb
用于对 Calibre 库进行各种操作,例如添加或导入书籍,以及获取书籍的元数据和封面。
稍后我们将看看如何使用其中一些命令,但现在我们只安装两个依赖项。 第一个是 ImageMagick,没有它 calibredb
将无法运行; 第二个是 xvfb
,我们将使用它在虚拟 X 显示服务器中运行 calibredb
- 为了避免在非显示环境中运行 Calibre 引起的问题。
要安装这些,只需运行以下命令。
更新您的包裹清单:
sudo apt-get update
安装xvfb
:
sudo apt-get install xvfb
安装 ImageMagick:
sudo apt-get install imagemagick
第 3 步 - 创建库
现在我们几乎可以开始运行服务器了。 然而,我们需要一些书籍来服务。
您可能已经拥有自己的电子书库,因此我们将研究两种方法。
- 直接添加电子书文件; 我们会从古腾堡计划中挑选一对
- 导入现有的 Calibre 库; 如果您已经在运行 Calibre 的桌面版本,则很有用
获取书籍
首先让我们为我们的 Calibre 库创建一个目录。 此示例在用户的主目录中创建目录,尽管您可以将其放置在服务器上的任何位置。 运行以下命令:
mkdir ~/calibre-library mkdir ~/calibre-library/toadd
我们创建了两个目录:第一个,~/calibre-library
是 Calibre 将自动组织的目录,而我们将手动将书籍添加到 toadd
子目录。 稍后,我们将看看如何自动化这个过程。
我们将如何从 Project Gutenberg 中获取一些书籍。 对于本教程,我们将下载 Jane Austen 的 Pride and Prejudice 和 Charles Dickens 的 A Christmas Carol。
切换到 toadd
目录开始。
cd ~/calibre-library/toadd
下载两本电子书:
wget http://www.gutenberg.org/ebooks/1342.kindle.noimages -O pride.mobi wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi
Calibre 在某种程度上依赖文件扩展名来正确添加书籍,因此 wget
命令中的 -O
标志指定了更友好的文件名。 如果您从 Gutenberg 下载了不同的格式(例如 .epub
),那么您需要相应地更改文件扩展名。
将书籍添加到 Calibre 的数据库
现在我们需要通过我们之前安装的 xvfb
虚拟显示器,使用 calibredb
命令将这些书籍添加到 Calibre 数据库中。 为此,请运行:
xvfb-run calibredb add ~/calibre-library/toadd/* --library-path ~/calibre-library
星号表示 Calibre 会将在 toadd
目录中找到的所有书籍添加到图书馆的 calibre-library
目录中。 您可能会看到关于找不到封面的错误(我们选择下载没有图像的 .mobi
文件),但您还应该看到确认书籍已添加到 Calibre 数据库。
样本输出:
Failed to read MOBI cover Backing up metadata Added book ids: 1, 2 Notifying calibre of the change
这就是我们开始看到第一个结果所需要的一切。 让我们测试一下服务器。 跑:
calibre-server --with-library ~/calibre-library
该命令不会产生任何输出,但只会出现在您的终端中。 现在这很好; 稍后我们将研究如何正确地对其进行守护。 现在打开网络浏览器并导航到:
将 your_server_ip
替换为您的 Droplet 的 IP 地址。 您应该会看到库的主页,类似于下面的屏幕截图。
如果单击 All books 链接,您应该会看到我们之前添加的两本书。 您可以点击任一本书下方的获取按钮进行下载。
上传现有的 Calibre 库
如果您已经在运行 Calibre 的桌面版本并且已经设置了库,则可以轻松地将其导入您的服务器。
仔细检查您当前的库文件夹中是否有一个名为 metadata.db
的文件。 如果这个文件存在,那么一切都应该在没有任何额外配置的情况下正常工作。
将整个库文件夹上传到服务器。
然后,运行以下命令:
calibre-server --with-library /path/to/calibre-library
这会将您现有的库完整地添加到服务器中。 您可以通过将书籍文件放在 toadd
目录中来在服务器上添加更多书籍,如本教程中所述。
第 4 步 — 使 Calibre 成为后台服务
我们真的不想让 shell 打开并在其中运行 calibre-server
命令只是为了保持服务器运行。
虽然我们可以将 --daemonize
标志添加到命令中,但还有更好的方法可以做到这一点。 下面我们将看看将 calibre-server
变成一个服务是多么容易,它会在系统重新启动时自动启动,这样我们就可以非常轻松地启动、停止或重新启动该过程。
直到最近,实现这一点的方法是编写复杂的脚本并将它们放在 /etc/init.d/
目录中。 目前推荐的方法是使用一个更简单的 Upstart 脚本,即放置在 /etc/init/
目录下的 .conf
文件。 我们将看看如何做到这一点:
如果服务器仍在运行,请在终端中点击 CTRL + C
以停止它。
现在创建一个新的配置文件:
sudo nano /etc/init/calibre-server.conf
创建 Upstart 脚本,确保替换 red 中标记的变量:
description "Calibre (ebook manager) content server" start on runlevel [2345] stop on runlevel [^2345] respawn env USER='myusername' env PASSWORD='mypassword' env LIBRARY_PATH='/home/user/calibre-library' env MAX_COVER='300x400' env PORT='80' script exec /usr/bin/calibre-server --with-library $LIBRARY_PATH --auto-reload \ --max-cover $MAX_COVER --port $PORT \ --username $USER --password $PASSWORD end script
将其粘贴到您的文本编辑器中并保存。 (CTRL + X,然后 Y,然后 ENTER)。 我们将看看下面每一行的作用:
- 第一行只是帮助您(或其他人)了解脚本功能的描述
- 接下来的两行说明您希望脚本在哪个级别启动和停止,因为 Upstart 允许指定顺序,以便相互依赖的脚本将以正确的顺序启动。 1 级适用于所有基本服务,因此我们将从 2 级开始,到那时我们知道网络和我们需要的任何其他东西都将启动并运行
respawn
表示如果服务意外停止,会尝试重启
下一行是我们传递给 calibre-server
命令的所有变量。 之前,我们只使用了指定 --with-library
选项的最小值,但现在我们可以看到 Calibre 提供了多大的灵活性。 上面,我们已经指定:
- 从 Web 访问库的用户名和密码(请从提供的示例中更改这些)
- 库位置路径,和以前一样
- 书籍封面图像的最大图像大小(这有助于加快页面加载速度)
- 端口号(这里我们将其更改为
80
;如果您已经使用端口 80 来提供标准网页等,请将其更改为其他内容) - 最后,在
script
部分(称为 stanza)中,我们使用exec
运行主命令,并传入所有变量。/usr/bin/calibre-server
部分是可执行文件的路径
保存脚本并关闭编辑器后,启动服务器:
sudo start calibre-server
这次你应该看到这个输出,但是进程号不同:
calibre-server start/running, process 7811
现在使用浏览器导航到服务器的 IP 地址或域名。
您应该会看到一个弹出表单,询问用户名和密码。 这些应该是您添加到 Upstart 脚本的那些。 输入这些,您将像以前一样被带到您的电子书库。
现在可以使用以下命令轻松停止、启动和重新启动服务器:
sudo service calibre-server stop sudo service calibre-server start sudo service calibre-server restart
这使得管理服务器比手动处理守护进程和进程 ID 容易得多!
默认情况下,该网站有一个移动版本,可以很好地与手机和电子阅读器等小屏幕设备配合使用。 如果您从移动设备访问该站点,这应该会自动加载。
第 5 步 — 创建 Cron 作业以自动添加书籍
我们可以编写一个简单的 cron 作业来查看我们的 toadd
目录是否有新书。
每 10 分钟它会在 /home/user/calibre-library/toadd/
目录中查找文件,将其中的任何文件添加到我们的 Calibre 数据库中,然后删除原始文件。 (Calibre 在将文件添加到我们的图书馆时会复制这些文件,因此一旦添加生效,我们就不需要原件。)这意味着,如果您通过 scp、ssh 等传输书籍文件。 从您的主机到此目录,或者直接将它们下载到 toadd
目录,然后它们将自动添加到您的 Calibre 数据库并可以从您的库中下载!
要创建 cron 作业,请执行:
crontab -e
您可能需要选择您喜欢的文本编辑器。
在文件末尾添加以下行:
*/10 * * * * xvfb-run calibredb add /home/user/calibre-library/toadd/ -r --with-library /home/user/calibre-library && rm /home/user/calibre-server/toadd/*
命令的第一部分 (*/10 * * * *
) 表示该命令应该每十分钟运行一次。 第二部分与我们之前手动运行的命令相同。 它将 toadd
文件夹中的所有书籍添加到数据库中,然后删除原始文件。
就是这样。 您现在可以从世界任何地方访问您的电子书。
注意: Calibre 中的搜索结果不按相关性排序,因此如果您输入一个常用术语,您通常会在您要查找的书籍之前找到不相关的书籍。 但是,您可以指定仅按标题或作者进行搜索,这确实很有帮助,并且浏览选项(例如按作者字母顺序浏览)也得到了很好的实现。
结论
关于运行和维护 Calibre 服务器,需要记住一两件事。 我们将简要介绍一下这些内容。
版权
如果您只托管来自 Gutenberg 或类似网站的书籍(即,不受版权保护的书籍),那么没什么可说的。 只要确保您遵守古腾堡服务条款即可。 具体来说,如果您将您的图书收藏权授予他人,请务必阅读古腾堡 TOS 中关于 再分发 的部分。
如果您托管商业购买的书籍,请记住它们可能具有 DRM(数字版权管理),因此只能从您注册的设备上读取。
不用说,您永远不应该在您的电子书服务器上托管盗版或非法书籍。
更新
Calibre 非常频繁地推送更新。 尽管其中大部分是错误修复和功能更新,但有些可能与安全性有关。 因此建议您跟上更新。
如果发布了重要更新,您应该手动更新服务器软件。 (同样,APT 存储库往往落后,因此不建议依赖它们进行更新)。
安全
即使你没有公布你的 Droplet 的 IP 地址,它也可能被扫描开放端口的脚本发现。 由于 Calibre 登录功能不允许在多次错误尝试后自动锁定,因此存在暴力攻击的可能性。 为了减轻这种情况,强烈建议您:
- 不要使用通用用户名,例如 admin、calibre 或 ebooks
- 不要使用普通密码或短密码,绝对不要使用您的用户名作为密码
- 考虑在非标准端口而不是端口 80 上运行 Calibre
这使我们的教程结束。 我们希望您喜欢从任何位置或设备访问您的电子书!