旧笔记本搭 Calibre-Web 电子书库Docker 跑起来后用 cpolar 在外网安全打开阅读入口家里闲置的旧笔记本、小主机、迷你 PC很适宜用来做一件低负载但很实用的事整理自己的电子书和技术资料。不要把它做成一个“公网文件下载站”。电子书库更宜定位成个人资料柜平时在家里局域网阅读出门时临时打开一个 HTTPS 入口看完就关。这样既能复用旧设备也不会把管理后台、SSH、整台机器都暴露出去。这篇用 Docker 部署 Calibre-Web再用 cpolar 临时开放阅读入口。重点不是堆功能而是把“能用”和“安全收口”一起做完。一、这套方案面向哪些人面向这些人家里有一台旧笔记本、旧台式机、N100 小主机、NAS 或 Linux 盒子手里有合法购买、自己整理的 EPUB、PDF、MOBI、AZW3 等个人电子书想用浏览器统一管理封面、作者、分类和阅读进度平时在家用内网访问出差、通勤、临时查资料时需要外网入口不想折腾公网 IP、路由器端口转发、证书申请和反向代理希望入口只在需要时打开读完资料后马上关闭。不面向这些情况用来分发侵权电子书长期面向陌生人开放注册把 Calibre-Web 当成公开下载站把宿主机 SSH、Docker 管理端口、书库目录直接暴露到公网。这里只讨论个人合法书库整理和临时远程阅读不提供任何盗版资源获取方式。二、最终效果部署完成后家里旧设备上会有一个 Calibre-Web 服务旧笔记本 / 家用小主机 ├── Docker │ └── calibre-web 容器 ├── /srv/ebook-stack/config # Calibre-Web 配置 ├── /srv/ebook-stack/books # 个人合法书库 └── 8083 端口 # 局域网 Web 阅读入口局域网内访问http://旧设备内网IP:8083外出临时访问https://xxxx.cpolar.top安全边界是这几个只开放 Calibre-Web 的 Web 阅读入口不开放 SSH不开放 Docker Socket不开放宿主机文件管理器外网访问使用普通只读账号阅读结束后关闭 cpolar 隧道。三、环境准备下面以 Ubuntu Server / Debian 系 Linux 旧设备为例。桌面版 Ubuntu、Debian、Linux Mint 也可以照着做。硬件参考项目参考配置CPU双核以上即可内存2GB 起步4GB 更舒服磁盘按书库大小准备SSD 体验更好网络家庭宽带或普通内网均可系统Ubuntu 22.04 / 24.04、Debian 12软件准备Docker EngineDocker Compose 插件cpolar 客户端一个可用的 cpolar 账号自己合法拥有的电子书文件。先更新系统并安装基础工具sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release nano unzip安装 Dockercurl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER让当前终端立即获得 docker 用户组权限newgrp docker检查 Docker 和 Composedocker version docker compose version能正常输出版本号就可以继续。四、目录规划先把书库和配置分开可以把 Calibre-Web 的配置和书库分开后续备份、迁移、排错都清楚。创建目录sudo mkdir -p /srv/ebook-stack/config sudo mkdir -p /srv/ebook-stack/books sudo chown -R $USER:$USER /srv/ebook-stack cd /srv/ebook-stack目录含义/srv/ebook-stack/ ├── docker-compose.yml ├── config/ # Calibre-Web 的数据库、设置、日志 └── books/ # Calibre 书库目录里面需要有 metadata.db这里有一个关键点Calibre-Web 读取的是 Calibre 书库结构不是随便把 EPUB/PDF 文件丢进目录就结束。标准 Calibre 书库里会有一个metadata.db文件Calibre-Web 依赖它展示书名、作者、封面和分类。最稳的做法是在自己的电脑上安装 Calibre 桌面版新建一个书库导入自己合法拥有的电子书整理书名、作者、封面、标签把整个 Calibre 书库目录复制到旧设备的/srv/ebook-stack/books。复制完成后旧设备上应该能看到metadata.dbls -lh /srv/ebook-stack/books/metadata.db如果这条命令能看到文件大小和时间书库结构就准备好了。五、Docker Compose 部署 Calibre-Web在/srv/ebook-stack目录创建docker-compose.ymlcd /srv/ebook-stack nano docker-compose.yml写入下面内容services: calibre-web: image: lscr.io/linuxserver/calibre-web:latest container_name: calibre-web environment: - PUID1000 - PGID1000 - TZAsia/Shanghai volumes: - ./config:/config - ./books:/books ports: - 8083:8083 restart: unless-stopped如果你的 Linux 用户不是 UID 1000可以用下面命令查看id输出里会有类似内容uid1000(admin) gid1000(admin) groups1000(admin),998(docker)把PUID改成uid的数字把PGID改成gid的数字。启动服务cd /srv/ebook-stack docker compose up -d查看容器状态docker compose ps查看日志docker logs -f calibre-web看到服务监听8083端口后在局域网电脑或手机浏览器打开http://旧设备内网IP:8083旧设备内网 IP 可以这样查hostname -I首次登录 Calibre-Web默认账号通常是用户名admin 密码admin123登录后立刻修改管理员密码。进入初始化页面时书库路径填写/books这个路径对应 Compose 里的挂载- ./books:/booksCalibre-Web 会读取/books/metadata.db然后展示你的个人书库。六、导入合法个人书库如果你已经在桌面电脑上整理好了 Calibre 书库可以用rsync复制到旧设备。假设旧设备 IP 是192.168.31.50旧设备用户名是admin本机 Calibre 书库目录是~/Calibre Libraryrsync -avh --progress ~/Calibre Library/ admin192.168.31.50:/srv/ebook-stack/books/如果是在旧设备本机操作也可以直接复制cp -a /path/to/Calibre Library/. /srv/ebook-stack/books/复制后检查find /srv/ebook-stack/books -maxdepth 2 -type f | head ls -lh /srv/ebook-stack/books/metadata.db然后重启 Calibre-Webcd /srv/ebook-stack docker compose restart calibre-web进入 Web 页面后检查这些内容书名是否正常作者是否正常封面是否显示EPUB 是否能在线阅读PDF 是否能在浏览器打开标签和分类是否符合预期。如果后续还要继续加书可选仍然用 Calibre 桌面版维护书库再同步整个书库目录。这样metadata.db、封面、书籍文件结构都保持一致。七、基础设置先把账号权限收紧不要急着开外网入口。先把 Calibre-Web 本身的账号和权限整理好。1. 修改管理员密码登录后进入Admin - Edit Users - admin把默认密码改成强密码。密码设置要点至少 12 位包含大小写字母、数字、符号不和邮箱、NAS、路由器密码重复。2. 新建只读阅读账号进入Admin - Add New User创建一个专门外出阅读用账号例如用户名reader 角色普通用户这个账号只用于阅读不授予管理权限。权限设置要点关闭管理权限关闭上传权限关闭编辑元数据权限关闭删除书籍权限关闭用户管理权限。外网访问时只使用reader账号。管理员账号只在家里内网使用。3. 关闭公开注册进入管理设置确认不开放匿名注册。个人书库不需要让陌生人注册账号。4. 只在内网确认管理操作新增书籍、修改封面、调整元数据这些操作放在内网完成。cpolar 外网入口只用于临时阅读和验收。八、用 cpolar 临时打开 HTTPS 阅读入口Calibre-Web 在内网已经能访问后再配置 cpolar。cpolar 的作用是把本机8083端口映射成一个公网 HTTPS 地址。这样你在外面用手机、平板、公司电脑打开这个地址就能访问家里旧设备上的 Calibre-Web。先在旧设备上安装并登录 cpolar。不同系统安装命令以 cpolar 控制台给出的命令为准常见流程是cpolar authtoken 你的认证Token启动一个临时 HTTP 隧道cpolar http 8083终端会输出类似这样的地址Forwarding https://xxxx.cpolar.top - http://localhost:8083把https://xxxx.cpolar.top复制到手机浏览器就能看到 Calibre-Web 登录页。外网访问时使用刚才创建的reader账号登录不使用管理员账号。常用验证命令在旧设备上确认 Calibre-Web 本地可访问curl -I http://127.0.0.1:8083确认容器端口映射docker compose ps确认 cpolar 进程存在ps aux | grep cpolar | grep -v grep当你不需要外网阅读时回到运行cpolar http 8083的终端按Ctrl C隧道就会关闭公网地址也随之失效。九、安全边界只开放阅读入口不开放整台机器这一步很重要。很多自托管服务出问题不是因为工具本身不好而是把范围开大了。这套方案的安全边界可以按下面做项目做法Calibre-Web 8083通过 cpolar 临时开放SSH 22不通过 cpolar 开放Docker Socket不开放路由器端口转发不配置管理员账号只在内网使用外网账号使用只读 reader开放时间阅读时打开结束后关闭书库内容只放个人合法资料再加一个本机防火墙规则也很实用。Ubuntu 可以使用 UFWsudo ufw allow from 192.168.0.0/16 to any port 8083 proto tcp sudo ufw allow from 10.0.0.0/8 to any port 8083 proto tcp sudo ufw allow from 172.16.0.0/12 to any port 8083 proto tcp sudo ufw enable sudo ufw status numbered这组规则允许常见内网网段访问8083。cpolar 在旧设备本机连接localhost:8083不依赖路由器公网端口。如果你的家庭网段是192.168.31.0/24也可以收得更窄sudo ufw allow from 192.168.31.0/24 to any port 8083 proto tcp sudo ufw enable不要添加下面这种规则sudo ufw allow 22SSH 没有外网阅读需求就不要顺手开放。十、移动端访问体验Calibre-Web 的移动端体验比直接翻文件夹舒服很多。手机浏览器打开 cpolar HTTPS 地址后可以完成这些操作按书名、作者、标签查找在线阅读 EPUB打开 PDF查看封面和简介继续上次阅读位置把页面添加到手机桌面。手机上可以这样用打开https://xxxx.cpolar.top使用reader账号登录找到要看的书进入在线阅读阅读结束后退出登录回到旧设备终端关闭 cpolar 隧道。如果你用的是 iPhone可以在 Safari 里选择“添加到主屏幕”。如果你用的是 Android可以在 Chrome 里选择“添加到主屏幕”。这样下次打开更像一个轻量阅读 App。PDF 文件体积较大时手机流量消耗会比较明显。外出阅读时更宜使用 EPUB、TXT、体积较小的 PDF。大体积扫描版 PDF 放在 Wi-Fi 环境下阅读更稳。十一、备份要点别只备份书籍文件Calibre 书库不是一堆孤立文件它还包含元数据数据库。备份时要把整个/srv/ebook-stack一起备份。手动打包cd /srv sudo tar -czf ebook-stack-$(date %F).tar.gz ebook-stack ls -lh ebook-stack-$(date %F).tar.gz恢复时cd /srv sudo tar -xzf ebook-stack-2026-07-08.tar.gz cd /srv/ebook-stack docker compose up -d定期备份时至少包含/srv/ebook-stack/docker-compose.yml /srv/ebook-stack/config /srv/ebook-stack/booksbooks里有书籍文件、封面和metadata.dbconfig里有 Calibre-Web 的用户、设置、阅读状态等数据。十二、常见问题和排错1. 打开页面提示找不到书库先检查metadata.db是否存在ls -lh /srv/ebook-stack/books/metadata.db再检查容器内是否能看到docker exec -it calibre-web ls -lh /books/metadata.db如果宿主机有、容器内没有检查 Compose 挂载路径volumes: - ./books:/books修改后重启cd /srv/ebook-stack docker compose down docker compose up -d2. 登录后看不到书确认初始化时填写的书库路径是/books不是/srv/ebook-stack/books容器内只能看到挂载后的路径/books。3. 封面不显示先看书库目录是否完整find /srv/ebook-stack/books -name cover.* | head如果封面文件存在重启服务docker compose restart calibre-web如果 Calibre 桌面版里也没有封面先在 Calibre 桌面版补齐封面再重新同步书库。4. 中文文件名乱码Linux 服务器可以统一使用 UTF-8。检查当前语言环境locale安装中文 UTF-8 环境sudo apt install -y locales sudo locale-gen en_US.UTF-8 zh_CN.UTF-8文件名同步时使用rsync不要用会改编码的老旧 FTP 工具。5. 容器启动后访问不到 8083检查容器状态docker compose ps检查端口监听ss -lntp | grep 8083检查日志docker logs --tail100 calibre-web如果端口被占用改 Compose 里的宿主机端口例如ports: - 18083:8083然后访问http://旧设备内网IP:18083cpolar 也对应改成cpolar http 180836. cpolar 地址能打开但登录后很慢先看书库文件大小和网络环境。扫描版 PDF、图片版资料、超大 EPUB 都会增加加载时间。可以做三件事移动端优先阅读 EPUB大 PDF 在 Wi-Fi 下打开给旧设备接有线网减少无线抖动。7. 忘记关闭公网入口如果 cpolar 是在前台运行的回到终端按Ctrl C如果 cpolar 在后台运行先找进程ps aux | grep cpolar | grep -v grep结束进程pkill cpolar再从外网浏览器刷新 cpolar 地址确认页面已经无法访问。8. 想限制外网只读用独立reader账号不给它上传、编辑、删除、管理权限。外网登录时只用这个账号。管理员账号不要保存在手机浏览器里也不要发给别人。十三、日常使用流程搭好以后日常流程可以固定成这样在家整理书库 - Calibre 桌面版导入合法电子书 - 同步到 /srv/ebook-stack/books - 内网打开 Calibre-Web 检查封面和分类 - 外出需要阅读时运行 cpolar http 8083 - 用 reader 账号登录 HTTPS 地址 - 阅读结束后 Ctrl C 关闭隧道对应命令清单# 进入项目目录 cd /srv/ebook-stack # 启动 Calibre-Web docker compose up -d # 查看状态 docker compose ps # 查看日志 docker logs --tail100 calibre-web # 临时开放外网 HTTPS 阅读入口 cpolar http 8083 # 停止服务 docker compose down如果只是关闭外网入口不需要停 Calibre-Web直接停止 cpolar 即可。Calibre-Web 留在内网继续运行家里设备还能正常访问。十四、写在最后旧笔记本做电子书库这件事价值不在于“把服务暴露到公网”而在于把个人资料整理成一个随时能查、能读、能备份的系统。Calibre-Web 负责把书库变得好浏览Docker 负责让部署可迁移cpolar 负责在需要时给一个临时 HTTPS 入口。三者配合起来旧设备就不只是吃灰机器而是一个轻量的个人知识柜。我的做法很简单默认内网使用外出临时打开默认只读账号管理只在内网做默认读完关闭不把临时入口当长期公网服务。这样用起来省心也更安全。