编辑
2026-01-25
容器
00

目录

1. 介绍
2. 安装
2.1 官方安装
2.2 HTTPS
3. 使用教程
3.1 新建Library
3.2 新建Shelf
3.3 上传书籍
3.4 书籍详情页
更新封面和详细信息
其它选项
3.5 打开书籍
3.6 统计数据
3.7 设置
4. 资源消耗

booklore0.jpeg

最近体验了一款开源自托管电子书管理系统——BookLore,感觉非常适合个人或小型社群搭建自己的数字图书馆。它支持多种电子书格式,拥有现代化的网页界面和多用户功能,能自动抓取封面和元数据,还支持OPDS和第三方阅读器同步。安装上手也比较简单,支持Docker部署。日常管理如新建Library、上传书籍、书架分类都很方便,统计和设置也很强大。唯一要注意的是资源消耗较高,适合配置稍高一点的服务器。

最近一直在找一个能放电子书的地方,也不算是一个仓库。但至少是平时要看的书可以放在这里,因为是通过Web打开,所以在不同的终端上可以保持相同的进度和书签。曾经使用过Calibre‑Web,这个是用得最多的,但是感觉UI比较传统。当然了,我是比较无知的,可能会有更好的项目。

1. 介绍

BookLore 是一款 自托管(Self‑Hosted)数字图书管理系统,旨在帮助用户优雅地管理、组织并阅读个人电子书收藏。它提供现代化、响应式的网页界面,支持多用户访问、多格式阅读、自动元数据抓取、智能书架等功能,让你可以在完全掌控数据的前提下,搭建属于自己的私有数字图书馆。

作为一个开源项目,BookLore 支持 EPUB、PDF、CBZ/CBX 等格式,并能从 Goodreads、Amazon、Google Books 等来源自动获取书籍封面与信息,实现“放进去即可归档”的顺畅体验。此外,它还提供多用户权限控制、BookDrop 自动导入、OPDS 支持、KOReader/Kobo 同步等高级功能,非常适合个人读者、家庭使用者、小型阅读社群,或希望替代 Calibre Web 的用户。

2. 安装

2.1 官方安装

官方Github上提供的安装操作已经足够用了,可以直接跑起来。

创建一个.env文件,包含如下信息。

plain
# 🎯 BookLore Application Settings APP_USER_ID=0 APP_GROUP_ID=0 TZ=Etc/UTC BOOKLORE_PORT=6060 # 🗄️ Database Connection (BookLore) DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore DB_USER=booklore DB_PASSWORD=ChangeMe_BookLoreApp_2025! # 🔧 MariaDB Container Settings DB_USER_ID=1000 DB_GROUP_ID=1000 MYSQL_ROOT_PASSWORD=ChangeMe_MariaDBRoot_2025! MYSQL_DATABASE=booklore

Docker Compose文件内容如下。

yaml
services: booklore: image: booklore/booklore:latest # Alternative: Use GitHub Container Registry # image: ghcr.io/booklore-app/booklore:latest container_name: booklore environment: - USER_ID=${APP_USER_ID} - GROUP_ID=${APP_GROUP_ID} - TZ=${TZ} - DATABASE_URL=${DATABASE_URL} - DATABASE_USERNAME=${DB_USER} - DATABASE_PASSWORD=${DB_PASSWORD} - BOOKLORE_PORT=${BOOKLORE_PORT} depends_on: mariadb: condition: service_healthy ports: - "${BOOKLORE_PORT}:${BOOKLORE_PORT}" volumes: - ./data:/app/data - ./books:/books - ./bookdrop:/bookdrop healthcheck: test: wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck interval: 60s retries: 5 start_period: 60s timeout: 10s restart: unless-stopped mariadb: image: lscr.io/linuxserver/mariadb:11.4.5 container_name: mariadb environment: - PUID=${DB_USER_ID} - PGID=${DB_GROUP_ID} - TZ=${TZ} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${DB_USER} - MYSQL_PASSWORD=${DB_PASSWORD} volumes: - ./mariadb/config:/config restart: unless-stopped healthcheck: test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost" ] interval: 5s timeout: 5s retries: 10

2.2 HTTPS

我的老习惯,肯定是放在Nginx反代的后面,提供HTTPS的连接。区别就是不需要再映射端口到外面了。还需要添加一个booklore的Docker网络,然后将booklore放到nginx的Docker网络中就OK了。

yaml
services: booklore: image: ghcr.io/booklore-app/booklore:latest container_name: booklore environment: - USER_ID=${APP_USER_ID} - GROUP_ID=${APP_GROUP_ID} - TZ=${TZ} - DATABASE_URL=${DATABASE_URL} - DATABASE_USERNAME=${DB_USER} - DATABASE_PASSWORD=${DB_PASSWORD} - BOOKLORE_PORT=${BOOKLORE_PORT} depends_on: mariadb: condition: service_healthy expose: - 6060 networks: - nginx - booklore volumes: - ./data:/app/data - ./books:/books - ./bookdrop:/bookdrop healthcheck: test: ["CMD-SHELL", "wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck || exit 1"] interval: 60s retries: 5 start_period: 60s timeout: 10s restart: unless-stopped mariadb: image: lscr.io/linuxserver/mariadb:11.4.5 container_name: mariadb environment: - PUID=${DB_USER_ID} - PGID=${DB_GROUP_ID} - TZ=${TZ} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${DB_USER} - MYSQL_PASSWORD=${DB_PASSWORD} networks: - booklore volumes: - ./mariadb/config:/config restart: unless-stopped healthcheck: test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"] interval: 5s timeout: 5s retries: 10 networks: nginx: external: true booklore: external: true

Nginx的配置文件我就抄别的APP的,改了一下反代的地址。

plain
server { listen 443 ssl; server_name YOUR_DOMAIN_NAME; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; # SSL/TLS Security Settings ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5; # Enable HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location / { proxy_pass http://booklore:6060; 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; client_max_body_size 50M; } }

3. 使用教程

新建完会让你设置admin的账号密码,然后就可以登录了。进来之后需要新建Library,才能上传书籍。有书之后的界面如下:

booklore1.jpeg

3.1 新建Library

booklore2.jpeg

booklore3.jpeg

新建Library需要指定在存在哪个系统的文件夹。因为是使用的Docker镜像,我们只映射了这两个文件夹,所以就选book就行了。Library就是图书馆,一个就够用了。分类可以靠书架Shelf。另一个bookdrop文件夹,是支持扫描新加图书的位置。

booklore4.jpeg

3.2 新建Shelf

书架就是对一类书的包含,直接新建就可以了。

booklore5.jpeg

3.3 上传书籍

上传有两种方式,一种就是通过我们刚才新建的Library。上传之后,需要重新刷新页面才能显示新上传的书籍。

booklore6.jpeg

还有一种方式就是通过另一个选项Bookdrop。

booklore7.jpeg

到这个Bookdrop区域,然后选择放到哪个Library里。对于一次上传多个文件,且需要放到不同的Library的情况下还是有用的。对于单Library的话,就更繁琐了。

booklore8.jpeg

3.4 书籍详情页

在All Books,Library或是Shelves里,鼠标放到书上会有两个图标。上面的是详情页,下面的直接阅读。

booklore9.jpeg

更新封面和详细信息

譬如这本书没有封面和详细信息,可以通过Search Metadata,单箭头来更新封面,双箭头更新详细信息,最后保存。

booklore10.jpeg

booklore11.jpeg

其它选项

可以给书籍打分,写笔记,还可以将书籍发送到邮箱。

booklore12.jpeg

3.5 打开书籍

它自带PDF和EPUB的阅读器。下面是PDF的阅读器的样子。

booklore13.jpeg

下面是EPUB的阅读器,感觉像是IPAD的IBOOK的感觉。

booklore14.jpeg

booklore15.jpeg

3.6 统计数据

它的统计功能实在是强大了,有Library和阅读信息的统计。对于喜欢数据的朋友来说是福音了。

booklore17.jpeg

booklore16.jpeg

3.7 设置

有各种的设置,包括阅读器,详细信息,邮件,用户,认证,设备等。

booklore18.jpeg

4. 资源消耗

由于后端是用Java写的,所以资源的消耗是相对比较高的。

booklore19.jpeg

现在是只有我一个用户,空闲的时候,占用400多M的内存。上传文件和打开书籍时,CPU和内存的占用都会提高。再加上数据库,一个人用的多时候会用到将近700M的内存。对于2核2G的轻量服务器,也就算是刚好够用吧,毕竟还得有几个其它的服务。

booklore20.jpeg

本文作者:潘晓可

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!