平时收集的电子书(epub、mobi、pdf、azw3)如果只散落在电脑硬盘或者微信收藏夹里,往往很难系统整理,更别提跨设备同步阅读进度了。
Calibre-Web 是基于经典桌面软件 Calibre 书库设计的现代化 Web 阅读平台。它直接读取 Calibre 的 metadata.db 数据库,提供美观的在线书架、浏览器内原生 EPUB 阅读、封面与元数据抓取,并且支持标准的 OPDS 协议,方便手机与电纸书直接串流借阅。
这篇笔记记录如何用 Docker Compose 部署 Calibre-Web、提前预置数据库文件避坑、Nginx 反代与大电子书上传配置,以及移动端接入方法。
为什么自建 Calibre-Web 云端书库
完成本教程后,你将拥有一个私有云端数字图书馆:
- 全端在线沉浸翻页:无需下载,手机、平板、电脑直接通过浏览器打开 EPUB、PDF,支持深色模式、字号调节与书签记忆;
- 多格式自动转码:内置 Calibre 格式转换引擎(
ebook-convert),无论上传 AZW3、MOBI 还是 TXT,均可一键转为跨端兼容性最好的 EPUB; - OPDS 移动端无缝串流:原生支持 OPDS 目录协议,手机端(iOS 的 KyBook、Android 的静读天下、微信读书/多看)无需扫码传书,直接远程连线书库一键下载阅读;
- 一键推送 Kindle:配置好专属邮件凭据后,在任何网页端轻轻一点即可将书籍直接推送到你的亚马逊 Kindle 墨水屏设备。
准备工作
在开始敲命令前,先集中定义涉及的核心变量。请根据你的生产环境替换对应值:
# ================= 全局参数定义 =================
DOMAIN="books.0000996.xyz" # Calibre-Web 对外访问域名 (已解析至本服务器)
DATA_DIR="/opt/calibre-web" # 配置文件与书籍库挂载根目录
PORT="8083" # 容器内部监听端口 (本地回环暴露)
# ================================================
目录规划与 metadata.db 预置避坑
新手第一大死穴:Calibre-Web 本身只是一个“前端 Web 展示与管理器”,它不会自动为你初始化生成全新的 SQLite 数据库!
如果你直接将一个空目录挂载进容器,首次登录配置时会弹出致命红色警告:
DB Location is not valid, please enter correct path (Location of metadata.db)
正确姿势:在启动容器前,必须在书籍库目录中预先放置一个初始的空白 metadata.db 骨架文件。
1. 创建规范持久化目录
服务器端:
# 创建配置目录与书籍库目录
sudo mkdir -p /opt/calibre-web/config /opt/calibre-web/books
cd /opt/calibre-web
2. 获取并注入初始 metadata.db 数据库模板
我们可以直接从 Calibre 官方测试库或 GitHub 仓库拉取一个轻量的纯净空白数据库模板:
服务器端:
# 下载官方初始空白数据库
sudo curl -sSL https://raw.githubusercontent.com/janeczku/calibre-web/master/library/metadata.db -o /opt/calibre-web/books/metadata.db
# 检查文件是否成功就位 (正常约 60KB~100KB 大小)
ls -lh /opt/calibre-web/books/metadata.db
3. 严格配置文件与目录权限(UID/GID: 1000)
服务器端:
# 将整个目录递归赋权给标准用户 (防止上传书籍时报 Permission Denied)
sudo chown -R 1000:1000 /opt/calibre-web
sudo chmod -R 775 /opt/calibre-web
用 Docker Compose 启动 Calibre-Web
在镜像选型上,推荐使用由社区积极维护的 LinuxServer 官方镜像(lscr.io/linuxserver/calibre-web),其底层集成了完整的 Python 运行环境与 ebook-convert 格式转换工具链。
服务器端:
sudo tee /opt/calibre-web/docker-compose.yml << 'EOF'
version: '3.8'
services:
calibre-web:
image: lscr.io/linuxserver/calibre-web:latest
container_name: calibre-web
restart: always
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
# 核心:自动集成电子书格式转换工具链 (MOBI/AZW3 ➔ EPUB)
- DOCKER_MODS=linuxserver/mods:universal-calibre
volumes:
- ./config:/config
- ./books:/books
ports:
- "127.0.0.1:8083:8083" # 仅绑定本地回环,交由 Nginx 处理 SSL
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "3"
EOF
点火启动容器
服务器端:
sudo docker compose up -d
检查容器运行状态与 Mod 加载
服务器端:
sudo docker compose logs -n 15 calibre-web
核验标准:日志显示 universal-calibre mod installed 且 Web 服务成功监听 :8083。
配置 Nginx 反向代理与上传大小限制
电子书库经常需要上传数套几百兆的高清扫描版 PDF、技术全集或附带音频的 EPUB。如果 Nginx 没有放开请求体限制,上传会直接报 413 Request Entity Too Large。
在宿主机 /etc/nginx/conf.d/calibre-web.conf 中写入反代块:
服务器端:
server {
listen 80;
server_name books.0000996.xyz;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name books.0000996.xyz;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/books.0000996.xyz.crt;
ssl_certificate_key /etc/nginx/ssl/books.0000996.xyz.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 核心:放宽上传限制至 500MB,支持大体积扫描 PDF
client_max_body_size 500m;
location / {
proxy_pass http://127.0.0.1:8083;
proxy_set_header Host $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;
# 延长超时时间,防止格式转换与大书上传中断
proxy_connect_timeout 300s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
测试配置并重载:
sudo nginx -t && sudo systemctl reload nginx
初始化管理员配置与启用在线阅读
打开电脑浏览器,访问 https://books.0000996.xyz。
本地电脑:
1. 初次绑定数据库路径
首次进入页面时,系统会要求输入 Calibre 书库目录:
– 在 「Location of Calibre Database」 框中,填入容器内的映射路径:
text
/books
– 点击页面底部的 「Save」 保存。页面会瞬间提示连接成功并跳转到登录页面!
2. 初始账号登录并立即改密
- 默认管理员账号:
admin - 默认密码:
admin123 - 安全铁律:登录后第一时间点击右上角 「admin」 ➔ 「Change Password」 修改为高强度私有密码!
3. 解禁核心功能:开启「允许上传书籍」
Calibre-Web 出于安全考虑,默认安装完毕后是不允许上传新书的(界面上根本没有上传按钮,许多新手误以为安装出错)。
请按以下步骤开启:
1. 点击顶栏右侧 「管理权限(Admin)」;
2. 找到 「编辑基本配置(Edit Basic Configuration)」 ➔ 展开 「服务器功能配置(Feature Configuration)」;
3. 勾选 「启用电子书上传(Enable Uploading)」;
4. 顺便勾选 「启用在线电子书阅读(Enable In-browser Reading)」;
5. 点击页面最下方 「保存(Save)」。
此时刷新页面,顶栏右上角立刻出现一个清晰醒目的 「上传书籍(Upload)」 按钮!
4. 绑定转换工具路径
在「管理权限」 ➔ 「编辑基本配置」 ➔ 「外部二进制文件路径」中填入:
– Calibre 转换工具路径(Converter tool):/usr/bin/ebook-convert
– 点击保存,现在书库已经支持任意格式一键转 EPUB!
配合移动端阅读器接入 OPDS 书库
你的云端书库绝不仅限于电脑端看,它真正的威力在于移动端随身借阅!
1. 网页端直接在线翻页阅读
- 点击任意一本已上传书籍的封面;
- 页面弹出的详情卡片中,直接点击 「在线阅读(Read in Browser)」;
- 瞬间进入全屏阅读模式,支持左右方向键翻页、书签目录展开、多档夜间主题与字体缩放。
2. 手机端通过 OPDS 协议一键连线书库
OPDS(Open Publication Distribution System)是数字出版界的通用电子书目录标准。几乎所有专业移动端阅读器均原生支持:
- iOS 推荐:
KyBook 3、MarginNote、Marvin; - Android 推荐:
静读天下 (Moon+ Reader)、FBReader。
接入步骤(以静读天下 / KyBook 为例):
- 打开手机阅读 App ➔ 进入 「网络书库 / OPDS 书库」 ➔ 点击 「添加新书库」;
- 书库名称:
我的私有云端书房; - 书库 URL:填入专属 OPDS 地址:
text
https://books.0000996.xyz/opds - 勾选 「需要身份认证」,输入你的 Calibre-Web 用户名与密码;
- 点击连接!你的全量藏书、分类、作者列表瞬间原汁原味在手机上加载呈现,点击任一本书即可直接秒级下载到本地阅读!
功能验证与书籍上传测试
1. 基础服务与公网访问测试
本地电脑:
# 测试 HTTPS 页面是否 HTTP 200 正常直出
curl -sI "https://books.0000996.xyz" | head -n 5
核验标准:返回 HTTP/2 200 或 HTTP/1.1 200。
2. OPDS 协议连通性验证
本地电脑:
# 测试 OPDS 目录是否正常返回标准 XML/Atom 流
curl -sI -u "admin:YOUR_PASSWORD" "https://books.0000996.xyz/opds" | grep -i "content-type"
核验标准:返回 Content-Type: application/atom+xml;profile=opds-catalog,证明移动端协议通道 100% 畅通。
常见问题与排障
Q1:初次启动报 Location of metadata.db is not valid?
- 根因:
/opt/calibre-web/books是个空目录,没有放预置的 SQLite 数据库。 - 自愈方案:严格执行第一步第 2 小节命令,下载官方空白
metadata.db模板放入目录后,再次点击保存。
Q2:上传大书籍时前端报 413 Request Entity Too Large?
- 根因:宿主机 Nginx 默认的
client_max_body_size只有 1MB。 - 自愈方案:在 Nginx 配置文件中加入
client_max_body_size 500m;并nginx -s reload。
Q3:点击「在线阅读」白屏或提示不可用?
- 排查要点:
1. 确认书籍格式是否为EPUB或PDF(MOBI/TXT 格式需先在后台点击“转换为 EPUB”);
2. 检查后台「管理权限」中是否勾选了「启用在线电子书阅读」。
还没有人在这篇手记留下纸条,来做第一个亮灯的人吧。