最近体验了一款开源自托管电子书管理系统——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文件,包含如下信息。
# 🎯 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=bookloreDocker Compose文件内容如下。
services:booklore:image:booklore/booklore:latest# Alternative: Use GitHub Container Registry# image: ghcr.io/booklore-app/booklore:latestcontainer_name:bookloreenvironment:-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_healthyports:-"${BOOKLORE_PORT}:${BOOKLORE_PORT}"volumes:-./data:/app/data-./books:/books-./bookdrop:/bookdrophealthcheck:test:wget-q-O-http://localhost:${BOOKLORE_PORT}/api/v1/healthcheckinterval:60sretries:5start_period:60stimeout:10srestart:unless-stoppedmariadb:image:lscr.io/linuxserver/mariadb:11.4.5container_name:mariadbenvironment:-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:/configrestart:unless-stoppedhealthcheck:test:["CMD","mariadb-admin","ping","-h","localhost"]interval:5stimeout:5sretries:102.2 HTTPS
我的老习惯,肯定是放在Nginx反代的后面,提供HTTPS的连接。区别就是不需要再映射端口到外面了。还需要添加一个booklore的Docker网络,然后将booklore放到nginx的Docker网络中就OK了。
services:booklore:image:ghcr.io/booklore-app/booklore:latestcontainer_name:bookloreenvironment:-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_healthyexpose:-6060networks:-nginx-booklorevolumes:-./data:/app/data-./books:/books-./bookdrop:/bookdrophealthcheck:test:["CMD-SHELL","wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck || exit 1"]interval:60sretries:5start_period:60stimeout:10srestart:unless-stoppedmariadb:image:lscr.io/linuxserver/mariadb:11.4.5container_name:mariadbenvironment:-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:-booklorevolumes:-./mariadb/config:/configrestart:unless-stoppedhealthcheck:test:["CMD","mariadb-admin","ping","-h","localhost"]interval:5stimeout:5sretries:10networks:nginx:external:truebooklore:external:trueNginx的配置文件我就抄别的APP的,改了一下反代的地址。
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,才能上传书籍。有书之后的界面如下:
3.1 新建Library
新建Library需要指定在存在哪个系统的文件夹。因为是使用的Docker镜像,我们只映射了这两个文件夹,所以就选book就行了。Library就是图书馆,一个就够用了。分类可以靠书架Shelf。另一个bookdrop文件夹,是支持扫描新加图书的位置。
3.2 新建Shelf
书架就是对一类书的包含,直接新建就可以了。
3.3 上传书籍
上传有两种方式,一种就是通过我们刚才新建的Library。上传之后,需要重新刷新页面才能显示新上传的书籍。
还有一种方式就是通过另一个选项Bookdrop。
到这个Bookdrop区域,然后选择放到哪个Library里。对于一次上传多个文件,且需要放到不同的Library的情况下还是有用的。对于单Library的话,就更繁琐了。
3.4 书籍详情页
在All Books,Library或是Shelves里,鼠标放到书上会有两个图标。上面的是详情页,下面的直接阅读。
更新封面和详细信息
譬如这本书没有封面和详细信息,可以通过Search Metadata,单箭头来更新封面,双箭头更新详细信息,最后保存。
其它选项
可以给书籍打分,写笔记,还可以将书籍发送到邮箱。
3.5 打开书籍
它自带PDF和EPUB的阅读器。下面是PDF的阅读器的样子。
下面是EPUB的阅读器,感觉像是IPAD的IBOOK的感觉。
3.6 统计数据
它的统计功能实在是强大了,有Library和阅读信息的统计。对于喜欢数据的朋友来说是福音了。
3.7 设置
有各种的设置,包括阅读器,详细信息,邮件,用户,认证,设备等。
4. 资源消耗
由于后端是用Java写的,所以资源的消耗是相对比较高的。
现在是只有我一个用户,空闲的时候,占用400多M的内存。上传文件和打开书籍时,CPU和内存的占用都会提高。再加上数据库,一个人用的多时候会用到将近700M的内存。对于2核2G的轻量服务器,也就算是刚好够用吧,毕竟还得有几个其它的服务。
📚 延伸阅读
更多内容持续更新于我的博客:https://www.zenseek.site