如何在 Ubuntu 22.04 上安装 Calibre 电子书服务器
本教程适用于这些操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 下载并安装 Calibre 服务器
- 第 3 步 - 创建 Calibre 图书馆并添加您的第一本书
- 第 4 步 - 启动 Calibre 服务器
- 第 5 步 - 创建 systemd 服务文件
- 第 6 步 - 启用用户身份验证
- 第 7 步 - 自动将书籍添加到图书馆
- 第 8 步 - 安装 Nginx
- 第 9 步 - 安装 SSL
- 第 10 步 - 配置 Nginx
- 结论
Calibre 是一个免费的开源电子书管理器。它作为一个跨平台的桌面应用程序和一个服务器组件一起工作。桌面组件可以在单个设备上管理您的电子书库。服务器组件允许您:
- 从世界任何地方访问您的图书。
- 轻松将您的图书传输到移动设备。
- 与您的朋友和家人分享书籍。
- 直接在网络上阅读电子书。
在本教程中,您将学习在 Ubuntu 22.04 机器上安装 Calibre 服务器。
先决条件
-
A server running Ubuntu 22.04.
-
A non-root user with sudo privileges.
-
The Uncomplicated Firewall(UFW) is enabled and running.
-
A Fully Qualified domain name pointed to the server. For our tutorial, we will be using the domain
calibre.example.com
. -
Everything is updated.
$ sudo apt update && sudo apt upgrade
第 1 步 - 配置防火墙
安装任何包之前的第一步是配置防火墙以允许 HTTP 和 HTTPS 连接。
检查防火墙的状态。
$ sudo ufw status
您应该会看到如下内容。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
允许 HTTP 和 HTTPs 端口。
$ sudo ufw allow http
$ sudo ufw allow https
再次检查状态以确认。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
第 2 步 - 下载并安装 Calibre 服务器
Ubuntu 22.04 附带 Calibre,但最好直接安装它以获取最新版本。
第一步是安装一些依赖项。
$ sudo apt install libopengl0 libxkbcommon-x11-0 libegl1 libfontconfig libgl1-mesa-glx
下载 Calibre 服务器安装程序。
$ wget https://download.calibre-ebook.com/linux-installer.sh
使安装程序脚本可执行。
$ chmod +x ./linux-installer.sh
运行安装程序。
$ sudo ./linux-installer.sh
您会收到一些警告,因为安装程序需要桌面而不是服务器。忽略警告是安全的。
第 3 步 - 创建 Calibre 图书馆并添加您的第一本书
下一步是设置 Calibre 图书馆并向其中添加一些书籍。对于我们的教程,我们将从古腾堡计划下载亚瑟柯南道尔的《夏洛克福尔摩斯历险记》一书。
$ wget http://www.gutenberg.org/ebooks/1661.kindle.noimages -O adventuresofsherlockholmes.mobi
总是从网站上获取这本书的 Kindle 版本。在这里,我们将 Kindle 版本重命名为 filename.mobi
,因为 Kindle 本身支持 Mobi 格式,这就是它在网站上如此命名的原因。它还提供了比 Epub 版本更好的格式化选项。
为 Calibre 库创建一个目录。
$ mkdir calibre-library
使用 calibredb
命令将刚刚下载的书添加到图书馆。我们在命令本身中指定了库的位置。
$ calibredb add adventuresofsherlockholmes.mobi --with-library calibre-library/
Added book ids: 1
您可以通过以下方式一次添加多本书。
$ calibredb add *.mobi --with-library calibre-library/
第 4 步 - 启动 Calibre 服务器
现在我们已经准备好了书籍,是时候启动 Calibre 服务器了。
$ calibre-server calibre-library
命令 calibre-server
将库的位置作为其参数。您应该会看到类似的输出。
calibre server listening on 0.0.0.0:8080
OPDS feeds advertised via BonJour at: your_server_ip port: 8080
这会在端口 8080 上暴露 Calibre 服务器。要查看服务器,您需要先打开该端口。运行以下命令打开8080端口。
$ sudo ufw allow 8080
在浏览器中打开 URL http://
,您将看到以下屏幕。根据您选择的操作系统主题,屏幕将显示为深色或浅色。

单击 calibre-library 链接以查看您在上一步中添加的图书。

在终端上按 Ctrl + C 键关闭服务器。
您可以使用不同的端口来公开 Calibre 服务器。为此,请使用以下命令。您需要确保该端口在防火墙中打开。
$ calibre-server calibre-library --port 7654
第 5 步 - 创建 systemd 服务文件
要使 Calibre 服务器进程持久化并在重启后仍然存在,您需要为其创建一个 systemd 服务文件。
在目录 /etc/sytemd/system/
中创建一个名为 calibre-server.service
的文件并打开它进行编辑。
$ sudo nano /etc/systemd/system/calibre-server.service
将以下代码粘贴到其中。
[Unit]
Description=Calibre Server
After=network.target
[Service]
Type=simple
User=<username>
Group=<username>
ExecStart=/opt/calibre/calibre-server /home/<username>/calibre-library --enable-local-write
[Install]
WantedBy=multi-user.target
--enable-local-write
标志为服务器提供写入权限,以将新书添加到图书馆。这是因为您不能在服务器运行时使用 calibredb
命令添加书籍。
将上面代码中的
替换为您的 Linux 系统用户名。通过按 Ctrl+W 并在出现提示时输入 Y 来保存并关闭文件。
重新加载服务守护进程以激活服务文件。
$ sudo systemctl daemon-reload
启用并启动 Calibre 服务。
$ sudo systemctl enable calibre-server
$ sudo systemctl start calibre-server
检查服务的状态。
$ sudo systemctl status calibre-server
? calibre-server.service - Calibre Server
Loaded: loaded (/etc/systemd/system/calibre-server.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-07-25 07:23:42 UTC; 15s ago
Main PID: 1877 (BonJour)
Tasks: 13 (limit: 2241)
Memory: 53.3M
CPU: 762ms
CGroup: /system.slice/calibre-server.service
??1877 /opt/calibre/bin/calibre-server /home/<username>/calibre-library --enable-local-write
Jul 25 07:23:42 calibre systemd[1]: Started Calibre Server.
Jul 25 07:23:42 calibre calibre-server[1877]: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-<username>'
Jul 25 07:23:42 calibre calibre-server[1877]: calibre server listening on 0.0.0.0:8080
Jul 25 07:23:43 calibre calibre-server[1877]: OPDS feeds advertised via BonJour at: 69.28.84.201 port: 8080
第 6 步 - 启用用户身份验证
您可以向 Calibre 添加用户身份验证,以保护您的图书馆不被任何人使用。首先,停止 Calibre 服务器。
$ sudo systemctl stop calibre-server
Calibre 使用 SQLite 数据库来存储用户凭证。启动 Calibres 用户管理脚本以添加用户。
$ sudo calibre-server --manage-users
您将获得四个选项并要求您做出选择。按 1 添加新用户,并提供用户名和密码以完成添加新用户。
1) Add a new user
2) Edit an existing user
3) Remove a user
4) Cancel
What do you want to do? [1-4]: (Press 1)
Enter the username: howtoforge
Enter the new password for howtoforge:
Re-enter the new password for howtoforge, to verify:
User howtoforge added successfully!
接下来,您需要编辑服务文件以检查身份验证。打开文件进行编辑。
$ sudo nano /etc/systemd/system/calibre-server.service
在以 ExecStart
开头的行末尾添加 --enable-auth
标志以启用用户身份验证。
...
ExecStart=/opt/calibre/calibre-server "/home/<username>/calibre-library" --userdb "/home/<username>/.config/calibre/server-users.sqlite" --enable-local-write --enable-auth
...
通过按 Ctrl+W 并在出现提示时输入 Y 来保存并关闭文件。
重新加载服务守护进程并启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl start calibre-server
如果您打开库 URL,系统将提示您输入用户名和密码,然后才能访问它。输入您的凭据并按登录按钮访问库。

第 7 步 - 自动将书籍添加到图书馆
Calibre 允许您使用 Cron 作业自动将书籍添加到图书馆。它通过定期查看目录中的新书并将它们添加到图书馆来实现。这是添加书籍的最快方式,您只需将它们上传到目录,它们就会很快出现在图书馆中,无需任何人工干预。
第一步是创建一个监视目录。
$ mkdir ~/calibre-watch
$ cd ~/calibre-watch
将 Leo Tolstoy
的书战争与和平
从 Project Gutenberg 下载到此目录。
$ wget https://www.gutenberg.org/ebooks/2600.kindle.images -O warandpeace.mobi
如果您注意到,这次我们正在下载一个有图像的版本。关于古腾堡计划的书因书而异。有些有可用的图像版本,有些则没有。 Calibre 可以很好地处理任何一种格式。
打开 Crontab 编辑器。
$ crontab -e
如果这是您第一次使用 Crontab,您将被要求选择一个编辑器。
no crontab for <username> - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
输入 1 选择 Nano 编辑器,因为它是最容易操作的。
在文件底部添加以下命令。
*/5 * * * * calibredb add /home/<username>/calibre-watch/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/<username>/calibre-watch/*
该脚本会将目录 /home/
中的所有文件添加到 calibre 库中,并删除所有不再需要的原始文件。上述作业将每 5 分钟运行一次。将
替换为您的 Linux 系统用户名,并在适当的位置添加您的 Calibre 凭据。
通过按 Ctrl+W 并在出现提示时输入 Y 来保存并关闭文件。等待几分钟并重新加载 calibre 服务器站点,以查看您刚刚添加的图书出现在图书馆中。
第 8 步 - 安装 Nginx
Ubuntu 22.04 附带旧版本的 Nginx。要安装最新版本,您需要下载官方 Nginx 存储库。
导入 Nginx 签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版本的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v
nginx version: nginx/1.22.0
第 9 步 - 安装 SSL
现在,Calibre 通过 IP 地址暴露在 HTTP 端口上。为了更好地保护它,我们将使用 SSL 证书通过专用域启用访问。
我们需要安装 Certbot 来为 Calibre 生成 SSL 证书。您可以使用 Ubuntu 存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Ubuntu 22.04 默认安装了 Snapd。运行以下命令以确保您的 Snapd 版本是最新的。
$ sudo snap install core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令确保可以通过创建指向 /usr/bin
目录的符号链接来运行 Certbot 命令。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
运行以下命令以生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d calibre.example.com
上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/calibre.example.com
目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
打开文件 /etc/letsencrypt/renewal/calibre.example.com.conf
进行编辑。
$ sudo nano /etc/letsencrypt/renewal/calibre.example.com.conf
在底部粘贴以下代码。
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
我们使用 Certbot 的独立选项生成了 SSL 证书。它运行其 Web 服务器来创建证书,这意味着 Nginx 应该在续订期间关闭。 pre_hook 和 post_hook 命令在续费前后运行,自动关闭和重启 Nginx 服务器,无需人工干预。
要检查 SSL 续订是否正常工作,请试运行该过程。
$ sudo certbot renew --dry-run
如果您没有看到任何错误,则一切就绪。您的证书将自动更新。
第 10 步 - 配置 Nginx
打开文件 /etc/nginx/nginx.conf
进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在行 include /etc/nginx/conf.d/*.conf;
之前添加以下行。
server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
创建并打开文件 /etc/nginx/conf.d/calibre.conf
进行编辑。
$ sudo nano /etc/nginx/conf.d/calibre.conf
将以下代码粘贴到其中。将 calibre.example.com
替换为您的域名。我们已将 client_max_body_size
变量的值设置为 50MB。您可以根据您的要求更改它。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
http2_push_preload on; # Enable HTTP/2 Server Push
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
server_name calibre.example.com;
client_max_body_size 50M;
access_log /var/log/nginx/calibre.access.log;
error_log /var/log/nginx/calibre.error.log;
ssl_certificate /etc/letsencrypt/live/calibre.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/calibre.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/calibre.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name calibre.example.com;
return 301 https://$host$request_uri;
}
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证您的 Nginx 配置。
$ sudo nginx -t
重新启动 Nginx 服务器以启用配置文件。
$ sudo systemctl restart nginx
在浏览器中访问 https://calibre.example.com
以访问 Calibre。可以看到通过 Cron 添加的书在图书馆也有。

结论
我们关于使用 Nginx 在 Ubuntu 22.04 机器上安装 Calibre Server 的教程到此结束。我们还配置了 Calibre 以启用基本身份验证并添加对自动添加新书的支持。 Calibre Server 附带了许多命令行工具。要了解有关它们的更多信息,您可以访问 Calibre 文档。如果您有任何问题,请在下面的评论中发表。