如何在Ubuntu18.04上创建calibre电子书服务器
作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
calibre 是一个免费的开源电子书管理器,以其跨平台的桌面应用程序而闻名。 您可以使用 calibre 在单个设备上管理您的电子书库,但该应用程序还包括一个强大的服务器组件。 设置电子书服务器允许您:
- 从世界任何地方访问您的书籍
- 轻松将您的书籍传输到移动设备
- 与您的朋友和家人分享书籍
calibre 内容服务器包括一个为您的图书提供服务的后端和一个用于搜索您的图书馆、下载单个标题,甚至直接通过网络浏览器阅读您的图书的基本前端。 该服务器还提供了一个基本的移动界面,适用于各种设备,包括与许多电子墨水阅读器(如 Kindle 和 Kobo)一起提供的基本浏览器。
在本教程中,您将在 Ubuntu 18.04 上设置和使用 calibre 内容服务器。 具体来说,您将下载并安装 calibre 服务器,将 calibre 配置为服务,以便在服务器重新启动时自动启动,并使用命令行工具将书籍添加到您的图书馆。 您还将遇到设置 cron 作业以自动将新书从特定目录添加到您的图书馆的选项,向您的服务器添加身份验证以便只有您可以访问它,并添加免费的 SSL/TLS 证书来为您的图书馆提供服务HTTPS 以提高安全性。
警告: 与所有创意内容一样,尊重与他人创作的材料相关的版权许可非常重要。 本教程使用从 Project Gutenberg 合法下载的公共领域书籍,其中包含 60,000 多本免费电子书。
先决条件
- 运行 Ubuntu 18.04 的服务器,带有 sudo 用户和防火墙。 您可以按照我们的初始服务器设置指南获取说明。
- 第 7 步包括使用 SSL 证书保护 calibre 内容服务器的选项。 如果您希望这样做,您将需要一个带有可用 A 记录的域名。 如果您使用的是 DigitalOcean Droplet,您可以按照我们关于 如何从公共域注册商 指向 DigitalOcean 名称服务器的指南获取说明。
第 1 步 — 下载和安装 calibre 内容服务器
尽管 Ubuntu 的软件存储库中存在 calibre,但那里的版本通常落后于最新版本。 因此,官方 calibre 文档建议您从托管在其网站上的二进制文件中安装它。
首先,安装一些必要的依赖项:
sudo apt update && sudo apt install -y libfontconfig libgl1-mesa-glx
现在下载并安装 calibre 服务器。
wget https://download.calibre-ebook.com/linux-installer.sh
检查脚本的内容:
less linux-installer.sh
您可以使用 k
和 j
键上下滚动,完成后点击 q
返回终端。
现在执行脚本来安装 calibre:
sudo sh linux-installer.sh
calibre 需要一个桌面环境,但它不会在无头服务器上找到一个,所以你会看到一些关于桌面集成失败的警告。 忽略这些是安全的,因为我们将完全通过其命令行工具和 Web 界面控制 calibre。
安装后,确保将 ~./config/
文件的所有权设置为您的用户和组,而不是 root
。 这对于 calibre 正常运行很重要。
更改所有权,将突出显示的文本替换为您的 sudo
用户和组:
sudo chown sammy:sammy ~/.config/
现在我们已经安装了 calibre,我们可以开始探索它的功能了。
第 2 步 — 创建图书馆并添加您的第一本书
要探索 calibre 的功能,让我们下载 .epub
或 .mobi
电子书。 我们将使用来自 Project Gutenberg 的 Charles Dickens 的 A Christmas Carol 作为示例。 Project Gutenberg 维护着一个庞大的免费公共领域文献库,并且是电子书的绝佳资源。
运行以下命令将本书下载到您的服务器:
wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi
现在创建一个 calibre 可以用作您的电子书库的目录:
mkdir calibre-library
并使用 calibredb
命令将您刚刚下载的书添加到新图书馆:
calibredb add *.mobi --with-library calibre-library/
您将看到以下输出:
OutputAdded book ids: 1
将一本书添加到您的图书馆后,您现在可以启动 calibre 并探索该应用程序。
第 3 步 — 运行 calibre 内容服务器并查看您的库
安装 calibre 并下载一本书后,我们就可以探索应用程序的用户界面了。 但在我们在网络浏览器中访问 calibre 内容服务器之前,我们需要确保我们的服务器可以接受端口 8080
上的流量,这是 calibre 的默认端口。 如果您按照先决条件部分中的初始服务器设置指南进行操作,那么您启用了 ufw
或 Uncomplicated Firewall。 您现在需要允许端口 8080
通过防火墙。
使用以下命令打开端口8080
:
sudo ufw allow 8080
检查 ufw
的状态以确保端口已打开:
sudo ufw status
你会看到这样的输出:
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8080 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8080 (v6) ALLOW Anywhere (v6)
现在运行以下命令来启动 calibre 内容服务器:
calibre-server calibre-library
calibre-server
是用于启动我们的服务器的命令,calibre-library
是我们之前创建的目录的名称,并告诉 calibre 用作我们的库。
你会看到这样的输出:
calibre server listening on 0.0.0.0:8080 OPDS feeds advertised via BonJour at: your_server_ip port: 8080
在您的本地计算机上,在 Web 浏览器中访问 your_server_ip:8080
(替换您的服务器的 IP 地址),您将看到默认口径屏幕。 点击calibre-library,你会看到你在上一步添加的书。
点击 Ctrl+C
停止您启动的手动服务器进程。
这种运行 calibre 内容服务器的方法效果很好,但您可能希望您的库一直工作,即使在您关闭与服务器的 SSH 连接之后也是如此。 为了确保它始终运行,即使在重新启动服务器后,让我们将 calibre 内容服务器转换为服务。
第 4 步 — 为 calibre 内容服务器创建服务
为了提高 calibre 内容服务器的可用性,让我们将手动服务器进程替换为将在启动时启动的服务。
首先,在目录 /etc/sytemd/system/
中创建一个名为 calibre-server.service
的文件:
sudo nano /etc/systemd/system/calibre-server.service
现在添加以下配置,这将在启动时启动 calibre 内容服务器。 确保将突出显示的文本替换为您的用户和组:
口径-server.service
## startup service [Unit] Description=calibre content server After=network.target [Service] Type=simple User=sammy Group=sammy ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write [Install] WantedBy=multi-user.target
这里我们告诉我们的服务在启动服务器时使用 --enable-local-write
标志。 当服务器运行时,您不能像我们在 A Christmas Carol 中那样使用 calibredb
命令添加书籍。 相反,您必须通过正在运行的服务器来执行此操作,这意味着服务器需要权限才能将新文件写入磁盘。 只要它在本地接收请求,此标志就允许它这样做。
保存并关闭文件。
现在启用服务并启动它:
sudo systemctl enable calibre-server sudo systemctl start calibre-server
重启你的服务器:
sudo reboot
等待几分钟,然后在本地 Web 浏览器中再次访问 http://your_server_ip:8080
以确保 calibre 内容服务器自动启动。
现在让我们为我们的应用程序添加一些身份验证。
第 5 步 - (可选)将用户身份验证添加到 calibre 内容服务器
您现在拥有一个功能齐全的 calibre 内容服务器,您可以从任何设备访问它。 但是,目前,任何知道您服务器 IP 地址的人都可以访问您的电子书。 你可能不想要这个。 相反,让我们配置 calibre 的内置用户管理系统,以便您可以强制访问者使用用户名和密码进行身份验证。
首先,SSH 回到您的服务器并停止 calibre。 这将允许我们直接操作 calibre 的数据库:
sudo systemctl stop calibre-server
现在启动 calibre 的用户管理脚本:
calibre-server --manage-users
出现提示时,选择添加新用户。 然后选择用户名和强密码。 您将看到如下所示的最终输出消息:
OutputUser mycalibreuser added successfully!
现在我们需要对我们的服务进行一个小的编辑。
重新打开 calibre-server.service
:
sudo nano /etc/systemd/system/calibre-server.service
要启用身份验证,请将 --enable-auth
标志添加到以 ExecStart
开头的行的末尾。 它应该如下所示:
. . . ExecStart=/opt/calibre/calibre-server /home/sammy/calibre-library --enable-local-write --enable-auth . . .
保存并关闭文件。
刷新服务守护程序以重新扫描服务文件,并再次启动 calibre 服务器:
sudo systemctl daemon-reload sudo systemctl start calibre-server
如果您再次访问您的图书馆,它现在应该在允许您访问之前提示您输入用户名和密码。
有更多方法可以向我们的 calibre 内容服务器添加功能。 在下一步中,我们将添加一个 cron 作业以自动将下载的书籍添加到我们的 calibre 库中。
第 6 步 - (可选)自动将书籍添加到您的 calibre 图书馆
设置一个 cron 作业来监视特定目录并将找到的任何书籍添加到您的 calibre 库中会很有用。 这样,您可以将书籍下载或上传到此文件夹,它们将通过 calibre 网络界面自动变为可用。
在您的主目录中创建一个名为 books-to-add
的文件夹并在其中导航:
mkdir ~/books-to-add cd ~/books-to-add
将一本新书下载到此目录中。 使用以下命令从 Project Gutenberg 下载 Alice in Wonderland:
wget https://www.gutenberg.org/ebooks/11.epub.images -o alice.epub
现在打开你的 crontab:
crontab -e
在这里,我们将设置一个脚本,将该目录中的所有文件添加到 calibre,然后删除它们(将书籍添加到 calibre 会在您的图书馆目录中创建文件的副本,因此我们可以在添加后删除原件)。
添加以下内容:
/var/spool/cron/crontabs/your_username
*/5 * * * * calibredb add /home/sammy/books-to-add/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/sammy/books-to-add/*
保存并关闭文件。
这将每 5 分钟运行一次,因此您不必等待很长时间即可让您的新书出现在 Web 界面中。 等待几分钟,然后在本地 Web 浏览器中重新加载库。 您的新书将出现在 A Christmas Carol 旁边。
第 7 步 - (可选)安装 Apache2 并通过 HTTPS 为您的库提供服务
您需要用户名和密码才能访问您的库,但这并不安全,因为您通过 HTTP 提供服务,并且每次进行身份验证时都以未加密的方式发送用户名和密码。 更安全的选择是确保所有流量都使用 HTTPS 加密。 如果您拥有一个域名,您可以将其指向您的服务器并使用 Let's Encrypt 安装免费的 SSL 证书。 (您也可以使用 ebooks.your_domain
之类的子域。)
安装和配置 Apache2
我们将使用 网络服务器 Apache2 作为 calibre 的反向代理。 以前,当我们访问我们的库时,我们必须附加端口号 :8080
,因为这是运行 calibre 的默认端口。 我们现在将 Apache2 设置为侦听端口 80
(HTTP 流量的默认端口)上的请求,代理对 :8080
上本地运行的 calibre 服务器的请求,并将这些请求服务到最后用户透明,这样他们就不必担心指定端口号。 然后,我们将使用 SSL 证书保护端口 443
上的所有流量。
安装 Apache2 并使用以下命令启用我们需要的代理模块:
sudo apt install -y apache2 sudo a2enmod proxy proxy_http
现在确保您的服务器允许端口 80
和 443
上的流量。 也关闭端口 8080
:
sudo ufw allow 'Apache Full' sudo ufw delete allow 8080
接下来,在 /etc/apache2/sites-available/your_domain.conf
创建并打开一个文件:
sudo nano /etc/apache2/sites-available/your_domain.conf
添加以下配置,这会将您的域链接到 calibre 服务器:
/etc/apache2/sites-available/your_domain.conf
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so <VirtualHost *:80> ServerName your_domain AllowEncodedSlashes On ProxyPreserveHost On ProxyPass "/" "http://localhost:8080/" </VirtualHost>
最后,启用这个新的站点配置:
sudo a2ensite your_domain.conf systemctl reload apache2
在浏览器中访问 http://your_domain
以验证 calibre 内容服务器是否加载。 Apache 现在正在为您的站点提供服务。
安装 Certbot 并配置 SSL 证书
作为最后一步, 让我们使用 Certbot 保护我们所有的流量。
首先,安装 Certbot:
sudo snap install --classic certbot
现在运行 Certbot:
sudo certbot --apache
Certbot 程序将引导您完成安装证书的一系列提示。
- 出现提示时输入您的电子邮件地址
- 出现提示时输入
A
以同意条款和条件 - 当提示您与 EFF 共享您的电子邮件地址时,选择
Y
或N
- 当提示您想要证书的域时选择
1
(应该只有一个)
完成后,您将看到一条祝贺消息。
您现在可以在 https://your_domain
上安全地访问您的库。
结论
在本教程中,您将设置一个 calibre 电子书服务器。 您将它变成了一项服务,以便它在您的服务器启动时启动,添加了一个 cron 作业来自动查找新书并将其添加到您的图书馆,并设置身份验证和 SSL 证书来保护它。
要扩展项目,您可以从您的个人图书馆或 Project Gutenberg、Standard Ebooks 或其他地方添加更多书籍。 请记住始终遵守与您的内容库相关的任何版权法。