个人电子书库管理器Biblioteca

简介

什么是 Biblioteca

Biblioteca 是一个用于管理大型电子书库的网络应用程序。它旨在提供一个简单易用的界面,帮助用户有效地管理个人图书馆。是 Calibre 和其他类似软件的替代品。

主要特点:

  • 高效的搜索功能:能够快速找到所需书籍。
  • 标签和总结 :支持使用 ChatGPT 进行标签和书籍摘要。
  • 移动友好:界面设计适合各种设备。
  • Kobo 设备同步 :可与 Kobo 电子书阅读器同步。
  • OPDS 支持 :允许通过 OPDS 协议访问书籍。
  • 主题自定义:用户可以轻松定制界面外观。

Biblioteca 是一个开源项目,使用 GPL-3.0 许可证,旨在为用户提供一致和良好分类的图书馆管理体验。

作者之所以创建 Biblioteca,是因为想要一个简单易用的图书馆管理器,但又对现有的解决方案不满意,所以决定自己做。

安装

在群晖上以 Docker 方式安装。

需要注意的是,群晖内核版本太低会遇到下面的错误,这个 AH00141 已经遇到多次了,老苏除了换机器,也没找到其他的办法;

log 复制代码
Function not implemented: AH00141: Could not initialize random number generator

官方镜像发布在 ghcr.io,最新版本是 0.6

服务涉及到多个容器,采用 docker-compose 方式安装

env.txt

env.txt 是软件的环境变量,直接采用了官方的 prod 版本的 .env 的内容,未做任何修改

源文件地址:https://github.com/biblioverse/biblioteca/blob/main/.env

ini 复制代码
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
#  * .env                contains default values for the environment variables needed by the app
#  * .env.local          uncommitted file with local overrides
#  * .env.$APP_ENV       committed environment-specific defaults
#  * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
# https://symfony.com/doc/current/configuration/secrets.html
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration

###> symfony/framework-bundle ###
APP_ENV=prod
APP_SECRET=9653a6c476d291323d2db7417c13a814
###< symfony/framework-bundle ###

###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"
DATABASE_URL="mysql://db:db@db:3306/db?serverVersion=mariadb-10.3.39&charset=utf8"
###< doctrine/doctrine-bundle ###

###> symfony/messenger ###
# Choose one of the transports below
# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
###< symfony/messenger ###

###> symfony/mailer ###

MAILER_DSN=native://default
###< symfony/mailer ###
# .env
TYPESENSE_URL=http://typesense:8108
TYPESENSE_KEY=xyz

BOOK_FOLDER_NAMING_FORMAT="{authorFirst}/{author}/{serie}/{title}"
BOOK_FILE_NAMING_FORMAT="{serie}-{serieIndex}-{title}"

###< kobo/proxy
KOBO_PROXY_USE_DEV=0
KOBO_PROXY_USE_EVERYWHERE=0
KOBO_PROXY_ENABLED=1
###< kobo/proxy
可变
APP_ENV 应用程序运行的环境。可以是 dev 或 prod。除非需要调试应用程序,否则应始终使用 prod。
APP_SECRET 用于保护应用程序的密钥。请确保它是唯一的!
DATABASE_URL 数据库的 URL。除非使用不同的数据库,否则您不需要更改此项。
MESSENGER_TRANSPORT_DSN 不要更改它。
MAILER_DSN 当前未使用。
TYPESENSE_URL Typesense 服务器的 URL。除非使用不同的服务器,否则您不需要更改此项。
TYPESENSE_KEY 访问 Typesense 服务器的密钥。需要与您在 docker-compose 文件中设置的密钥相对应。
BOOK_FOLDER_NAMING_FORMAT 用于命名存储书籍的文件夹的格式。可以使用以下占位符:{authorFirst}, {author}, {title}, {serie}
BOOK_FILE_NAMING_FORMAT 用于命名存储书籍的文件的格式。可以使用以下占位符:{serie}, {serieIndex}, {title}
KOBO_PROXY_USE_DEV 如果设置为 1,将在开发中使用 Kobo 代理。
KOBO_PROXY_USE_EVERYWHERE 如果设置为 1,将在任何地方使用 Kobo 代理,并将所有请求转发到原始商店。
KOBO_PROXY_ENABLED 如果设置为 0,将禁用 Kobo 代理。
ALLOW_BOOK_RELOCATION 如果设置为 0,添加到库中的书籍将不会移动到正确的文件夹。这在您想要自己管理文件夹结构时很有用。

关于环境变量的官方说明:https://biblioverse.github.io/biblioteca-doc/installing/dotenv-config

docker-compose.yml

docker-compose.yml 基于官方的版本进行了微调

yaml 复制代码
services:
  biblioteca:
    image: ghcr.io/biblioverse/biblioteca:main
    container_name: biblioteca-web
    command: ["/bin/sh", "-c" , "apache2-foreground" ]
    ports:
      - 8109:8080
    depends_on:
      - db
    stdin_open: true
    tty: true
    volumes:
      - ./covers:/var/www/html/public/covers
      - ./books:/var/www/html/public/books
      - ./media:/var/www/html/public/media
      - ./env.txt:/var/www/html/.env
  
  db:
    image: mariadb:10.10
    container_name: biblioteca-mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=db
      - MYSQL_DATABASE=db
      - MYSQL_USER=db
      - MYSQL_PASSWORD=db
    volumes:
      - ./db:/var/lib/mysql

  typesense:
    image: typesense/typesense:27.1
    container_name: biblioteca-typesense
    restart: on-failure
    ports:
      - 8983
      - 8108
    volumes:
      - ./data:/data
    command: '--data-dir /data --api-key=xyz --enable-cors'

然后执行下面的命令

bash 复制代码
# 新建文件夹 biblioteca 和 子目录
mkdir -p /volume2/docker/biblioteca/{books,covers,data,db,media}

# 进入 biblioteca 目录
cd /volume2/docker/biblioteca

# 修改目录权限
chmod a+rw {books,covers,media}

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

如果不出意外的话,会有 3 个容器启动

运行

在浏览器中输入 http://群晖IP:8109 就能看到登录界面

如果随便输入,会显示错误,因为现在还没有 db.user

log 复制代码
500 Internal Server Error

An exception occurred while executing a query: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db.user' doesn't exist

导入数据

依次执行下面的命令创建数据库并新建管理员账号

bash 复制代码
# 创建数据库
docker-compose exec biblioteca bin/console doctrine:migration:migrate --no-interaction

# 创建管理员用户
docker-compose exec biblioteca bin/console app:create-admin-user [name] [password]

# 示例
docker-compose exec biblioteca bin/console app:create-admin-user admin 123456

# 创建 Typesense 索引
docker-compose exec biblioteca bin/console typesense:create

登录成功后的主界面

汉化

老苏基于官方的 translations 做了汉化文件,可以在这里下载:https://github.com/wbsu2003/synology/raw/refs/heads/main/Biblioteca/translations.zip

将其放入 biblioteca 根目录

解压到当前目录

现在的 translations 目录

现在执行下面的命令,先将文件复制到容器内

bash 复制代码
# 讲中文复制到容器中
docker cp ./translations/. biblioteca-web:/var/www/html/translations

# 清除应用的缓存
docker-compose exec biblioteca bin/console cache:clear

然后清除缓存,否则有可能界面不会有变化

进入 My Profile --> Langue,选择法文

保存之后,刷新页面,虽然并不全部是中文,但是基本上已经可以看懂了

书籍

左侧的 上传,先选择文件,再点 Upload 上传

需要点 Consume

才能在 所有书籍 中找到

可以上传封面,也可以从文件中提取封面

可以下载,也可以在网页中阅读

书架

左侧的 编辑书架 --> 新书架

创建完成后

可以将书籍放入书架

现在你的书架上就有书了

Biblioteca 目前还在比较早期,Bug 还有点多,像有些电子书,在从文件中提取封面时,比较容易遇到 500 Internal Server Error

参考文档

biblioverse/biblioteca: Biblioteca is a web application made to manage large ebook libraries and is developed aiming to help you to have consistent and well classified libraries.

地址:https://github.com/biblioverse/biblioteca
Biblioteca Book Management | Biblioteca Docs

地址:https://biblioverse.github.io/biblioteca-doc/

相关推荐
杨浦老苏12 小时前
开源音乐管理软件Melody
docker·群晖·多媒体
杨浦老苏14 小时前
面向npm的实时仪表板Dashly
网络·docker·群晖·导航
JunLan~15 小时前
Docker 部署 GLPI(IT 资产管理软件系统)
运维·docker·容器
特立独行的猫a17 小时前
使用 Docker(Podman) 部署 MongoDB 数据库及使用详解
数据库·docker·podman
LUCIAZZZ19 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
特立独行的猫a1 天前
Golang 应用的 Docker 部署方式介绍及使用详解
开发语言·docker·golang
康世行1 天前
Windows环境下MaxKB大模型 Docker部署图文指南
windows·docker·容器
程序员石磊2 天前
学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程
人工智能·爬虫·docker
司江龙2 天前
centos7 配置国内镜像源安装 docker
运维·docker·容器
西木Qi2 天前
Docker之Dockerfile
docker