作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。
介绍
calibre 是一个免费的开源电子书管理器,以其跨平台桌面应用程序而闻名。您可以使用 calibre 在单个设备上管理您的电子书库,但该应用程序还包括一个强大的服务器组件。设置电子书服务器允许您:
- 从世界任何地方访问您的图书
- 轻松将您的图书传输到移动设备
- 与您的朋友和家人分享书籍
calibre 内容服务器包括一个用于为您的图书提供服务的后端和一个用于搜索您的图书馆、下载单个标题甚至直接通过 Web 浏览器阅读您的图书的基本前端。该服务器还提供了一个基本的移动界面,适用于各种设备,包括许多电子墨水阅读器(如 Kindle 和 Kobo)附带的基本浏览器。
在本教程中,您将在 Ubuntu 20.04 上设置和使用 calibre 内容服务器。具体来说,您将下载并安装 calibre 服务器,将 calibre 配置为一项服务,以便在您的服务器重新启动时自动启动,并使用命令行工具将书籍添加到您的图书馆。您还将遇到设置 cron 作业以自动将新书从特定目录添加到您的图书馆的选项,向您的服务器添加身份验证以便只有您可以访问它,并添加一个免费的 SSL/TLS 证书以通过HTTPS 以提高安全性。
警告:与所有创意内容一样,尊重与他人创作的材料相关的版权许可非常重要。本教程使用从Project Gutenberg合法下载的公共领域书籍,该项目拥有 60,000 多本免费电子书。
先决条件
- 运行 Ubuntu 20.04 的服务器,带有 sudo 用户和防火墙。您可以按照我们的初始服务器设置指南获取说明。
- 步骤 7 包括使用 SSL 证书保护您的 calibre 内容服务器的选项。如果您希望这样做,您将需要一个具有可用 A 记录的域名。如果您使用的是DigitalOcean Droplet,您可以按照我们的指南[如何从公共域注册商指向 DigitalOcean 域名服务器](digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common -domain-registrars) 以获取说明。
步骤 1 — 下载并安装 calibre Content Server
尽管 calibre 存在于 Ubuntu 的软件存储库中,但那里的版本通常落后于最新版本。因此,官方 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。
现在我们已经安装了 calibre,我们可以开始探索它的功能。
第 2 步 — 创建图书馆并添加您的第一本书
要探索 calibre 的功能,让我们下载.epub
或.mobi
电子书。我们将以古腾堡计划中查尔斯狄更斯的圣诞颂歌为例。古腾堡计划维护着一个庞大的免费公共领域文献库,是电子书的重要资源。
运行以下命令将本书下载到您的服务器:
- 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 Content Server 并查看您的库
安装 calibre 并下载一本书后,我们准备好探索应用程序的用户界面。但是在我们在 Web 浏览器中访问 calibre 内容服务器之前,我们需要确保我们的服务器可以接受端口上的流量8080
,这是 calibre 的默认端口。如果您遵循先决条件部分中的初始服务器设置指南,那么您启用了ufw
或简单防火墙。您现在需要允许端口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
在您的本地机器上,访问your_server_ip:8080
(替换您服务器的 IP 地址),您将看到默认的口径屏幕。单击calibre-library,您将看到您在上一步中添加的书。
点击Ctrl+C
以停止您启动的手动服务器进程。
这种运行 calibre 内容服务器的方法效果很好,但您可能希望您的库一直运行,即使在您关闭与服务器的 SSH 连接之后也是如此。为了确保它始终运行,即使在重新启动服务器之后,让我们将 calibre 内容服务器转换为服务。
第 4 步 – 为 calibre Content Server 创建服务
为了提高 calibre 内容服务器的可用性,让我们将手动服务器进程替换为将在启动时启动的服务。
首先,calibre-server.service
在目录中创建一个名为的文件/etc/sytemd/system/
:
- sudo nano /etc/systemd/system/calibre-server.service
现在添加以下配置,这将在启动时启动 calibre 内容服务器。确保用您的用户和组替换突出显示的文本:
## 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
在启动服务器时使用该标志。当服务器运行时,您不能calibredb
像我们直接在圣诞颂歌中那样使用该命令添加书籍。相反,您必须“通过”正在运行的服务器来执行此操作,我们稍后会看到,这意味着服务器需要将新文件写入磁盘的权限。只要它在本地接收到请求,这个标志就允许它这样做。
保存并关闭文件。
现在启用服务并启动它:
- sudo systemctl enable calibre-server
- sudo systemctl start calibre-server
重启你的服务器:
- sudo reboot
等待几分钟,然后在本地 Web 浏览器中再次访问,以确保 calibre 内容服务器自动启动。http://your_server_ip:8080
现在让我们为我们的应用程序添加一些身份验证。
步骤 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
将新书下载到此目录中。使用以下命令从古腾堡计划下载爱丽丝梦游仙境:
- wget https://www.gutenberg.org/ebooks/11.epub.images -o alice.epub
现在打开你的 crontab:
- crontab -e
在这里,我们将设置一个脚本,将此目录中的所有文件添加到 calibre 中,然后将其删除(将书籍添加到 calibre 会在您的图书馆目录中创建文件的副本,因此我们可以在添加后删除原件。)
添加以下内容:
*/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 流量的默认端口)上的请求,将请求代理到本地运行的 calibre 服务器上:8080
,并将这些透明地提供给最终用户,这样他们就无需担心指定端口号。然后,我们将443
使用 SSL 证书保护端口上的所有流量。
安装 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 服务器:
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
在浏览器中访问以验证 calibre 内容服务器是否加载。Apache 现在正在为您的站点提供服务。http://your_domain
安装 Certbot 并配置 SSL 证书
最后一步,让我们使用 Certbot 保护我们的所有流量。
首先,安装 Certbot:
- sudo snap install --classic certbot
现在运行 Certbot:
- sudo certbot --apache
Certbot 程序将引导您完成安装证书的一系列提示。
- 出现提示时输入您的电子邮件地址
A
出现提示时输入以同意条款和条件- 选择
Y
或N
当提示与 EFF 共享您的电子邮件地址时 1
在提示您想要证书的域时选择(应该只有一个)
完成后,您将看到一条祝贺消息。
您现在可以安全地访问您的图书馆。https://yourdomain
结论
在本教程中,您将设置一个 calibre 电子书服务器。您将它变成了一项服务,以便它在您的服务器启动时启动,添加了一个 cron 作业来自动查找新书并将其添加到您的图书馆,并设置身份验证和 SSL 证书来保护它。
要扩展该项目,您可以从您的个人图书馆或Project Gutenberg、Standard Ebooks或其他地方添加更多书籍。请记住始终遵守与您的内容库相关的任何版权法。