Перейти к основному содержимому
  1. Posts/
  2. Self-Hosting/

BookLore: self-hosted библиотека и читалка для вашей коллекции книг

··1404 слов·7 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
Self-Hosting - This article is part of a series.
Part : This Article

Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти.

Warning

К сожалению статья уже неактуальна, так как разработчик не выдержал критиканства и удалил репозиторий.

BookLore - self-hosted библиотека и веб-читалка для вашей коллекции книг
#

Если у вас есть большая коллекция электронных книг, рано или поздно появляется проблема - как удобно хранить, сортировать и читать эти книги. Простое хранение файлов в папках быстро превращается в хаос: сложно искать нужную книгу, отсутствуют обложки, нет описаний и невозможно отслеживать прогресс чтения.

Именно для решения этой задачи существуют специальные приложения для управления библиотекой. Одним из таких решений является BookLore - современное веб-приложение с открытым исходным кодом, которое позволяет создать собственный сервер для хранения и чтения электронных книг.

BookLore отлично подходит для:

  • домашнего сервера
  • NAS
  • homelab инфраструктуры
  • личной или семейной библиотеки

Приложение работает через браузер, поэтому получить доступ к библиотеке можно с компьютера, планшета или смартфона.


Что такое BookLore
#

BookLore - это система управления электронной библиотекой (Digital Library Server), которая позволяет:

  • хранить книги в одном месте
  • автоматически получать метаданные
  • организовывать библиотеку по авторам и жанрам
  • читать книги прямо в браузере
  • отслеживать прогресс чтения
  • создавать коллекции книг
  • использовать несколько пользователей

По сути, BookLore превращает ваш сервер в персональный сервис для чтения книг, похожий на Kindle Library или Google Books, но полностью находящийся под вашим контролем.


Чем BookLore отличается от других решений
#

Существует несколько популярных приложений для управления библиотекой:

  • Calibre-Web
  • Kavita
  • Audiobookshelf

Однако BookLore имеет ряд особенностей, которые делают его интересным вариантом для домашнего сервера.

Современный интерфейс
#

BookLore предлагает современный и минималистичный веб-интерфейс.

Преимущества интерфейса:

  • удобная навигация
  • карточки книг с обложками
  • быстрый поиск по библиотеке
  • адаптивный дизайн
  • поддержка тёмной темы

Интерфейс отлично работает как на компьютере, так и на мобильных устройствах.

Я прекрасно понимаю, что интерфейс - это субъективный вопрос, но дизайн все равно приятный.


Автоматическое получение метаданных
#

После добавления книг BookLore может автоматически загрузить:

  • название книги
  • автора
  • описание
  • обложку
  • жанры

Это позволяет быстро привести библиотеку в порядок даже если у вас сотни или тысячи книг, хотя с российскими изданиями, безусловно, могут быть проблемы.


Встроенный ридер электронных книг
#

Одно из главных преимуществ BookLore - встроенный веб-ридер.

Поддерживаются популярные форматы:

  • EPUB
  • PDF
  • CBZ (комиксы)

Это означает, что книги можно читать прямо в браузере, без скачивания на устройство.


Поддержка нескольких пользователей
#

BookLore поддерживает многопользовательскую работу.

Каждый пользователь может:

  • иметь собственный прогресс чтения
  • добавлять книги в избранное
  • создавать коллекции
  • делать закладки

Это делает приложение удобным для семейной библиотеки или небольшого сообщества.


Простая установка через Docker
#

BookLore легко устанавливается с помощью Docker, что делает его идеальным решением для:

  • Proxmox
  • Docker-серверов
  • NAS
  • домашнего homelab

Установка занимает всего несколько минут.


Установка BookLore с помощью Docker Compose
#

Самый простой способ развернуть BookLore - использовать Docker Compose.

Шаг 1. Создание рабочей директории
#

Создадим папку для приложения:

mkdir booklore
cd booklore

Нам понадобятся два файла: docker-compose.yml и файл с переменными окружения.

Шаг 2. Docker Compose и переменные окружения
#

docker-compose.yml

services:                               # Секция описания сервисов (контейнеров)
  booklore:                             # Имя сервиса BookLore
    image: booklore/booklore:latest     # Docker-образ BookLore из Docker Hub (тег latest)
    # image: ghcr.io/booklore-app/booklore:latest
    # Альтернативный образ из GitHub Container Registry (закомментирован)
    container_name: booklore            # Явное имя контейнера в Docker
    environment:                        # Переменные окружения контейнера
      - USER_ID=${APP_USER_ID}          # UID пользователя для работы контейнера (права на файлы)
      - GROUP_ID=${APP_GROUP_ID}        # GID группы для файлов и каталогов
      - TZ=${TZ}                        # Часовой пояс контейнера
      - DATABASE_URL=${DATABASE_URL}    # URL подключения к базе данных MariaDB
      - DATABASE_USERNAME=${DB_USER}    # Имя пользователя базы данных
      - DATABASE_PASSWORD=${DB_PASSWORD} # Пароль пользователя базы данных
      - BOOKLORE_PORT=${BOOKLORE_PORT}  # Внутренний порт BookLore
    depends_on:                         # Зависимости сервиса
      mariadb:                          # Зависимость от сервиса mariadb
        condition: service_healthy      # Запуск только после успешного healthcheck БД
    ports:
      - "${BOOKLORE_PORT}:${BOOKLORE_PORT}"   # Проброс порта: host → container (обычно не нужен при использовании Traefik)
    volumes:
      - ./data:/app/data                # Данные приложения BookLore
      - ./books:/books                  # Каталог с библиотекой книг
      - ./bookdrop:/bookdrop            # Папка для автоматического импорта книг
    healthcheck:                        # Проверка работоспособности контейнера
      test: wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck
      # HTTP-запрос к встроенному healthcheck API BookLore
      interval: 60s                     # Интервал между проверками
      retries: 5                        # Количество попыток до признания контейнера unhealthy
      start_period: 60s                 # Время ожидания перед началом проверок
      timeout: 10s                      # Таймаут одной проверки
    restart: unless-stopped             # Автоперезапуск контейнера (кроме ручной остановки)
    networks:
      proxy:                            # Подключение к внешней сети proxy (Traefik)
    labels:                             # Метки Docker для интеграции с Traefik
      - "traefik.enable=true"           # Включаем обработку контейнера Traefik
      - "traefik.http.routers.booklore.entrypoints=web" # HTTP-вход (порт 80)
      - "traefik.http.routers.booklore.rule=Host(`booklore.domain.ru`)" # Направляем трафик с домена booklore.domain.ru в этот контейнер
      - "traefik.http.middlewares.booklore-https-redirect.redirectscheme.scheme=https" # Middleware для редиректа HTTP → HTTPS
      - "traefik.http.routers.booklore.middlewares=booklore-https-redirect" # Применяем middleware редиректа к HTTP-маршруту
      - "traefik.http.routers.booklore-secure.entrypoints=websecure" # HTTPS-вход (порт 443)
      - "traefik.http.routers.booklore-secure.rule=Host(`booklore.domain.ru`)" # HTTPS-маршрут для того же домена
      - "traefik.http.routers.booklore-secure.tls=true" # Включаем TLS (HTTPS)
      - "traefik.http.routers.booklore-secure.service=booklore"  # Привязываем HTTPS-роутер к сервису booklore
      - "traefik.http.services.booklore.loadbalancer.server.port=6060" # Внутренний порт BookLore внутри контейнера
      - "traefik.docker.network=proxy" # Указываем Traefik, в какой Docker-сети искать контейнер

  mariadb:                              # Сервис базы данных MariaDB
    image: lscr.io/linuxserver/mariadb:11.4.5
    # Образ MariaDB от LinuxServer.io (стабильный и удобный)
    container_name: mariadb             # Явное имя контейнера
    environment:                        # Переменные окружения MariaDB
      - PUID=${DB_USER_ID}              # UID владельца файлов БД
      - PGID=${DB_GROUP_ID}             # GID владельца файлов БД
      - TZ=${TZ}                        # Часовой пояс
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}       # Пароль root-пользователя БД
      - MYSQL_DATABASE=${MYSQL_DATABASE}       # Имя базы данных, создаваемой при первом запуске
      - MYSQL_USER=${DB_USER}       # Пользователь БД
      - MYSQL_PASSWORD=${DB_PASSWORD}    # Пароль пользователя БД
    volumes:
      - ./mariadb/config:/config        # Каталог с данными и конфигурацией MariaDB
    restart: unless-stopped             # Автоперезапуск контейнера
    healthcheck:                        # Проверка доступности БД
      test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost" ]
      interval: 5s                      # Интервал проверки
      timeout: 5s                       # Таймаут проверки
      retries: 10                       # Количество попыток
    networks:
      proxy:                            # Подключение к сети proxy (Traefik)

networks:
  proxy:                                # Определение сети proxy
    external: true                      # Сеть уже существует и не создаётся Compose

и файл с переменными .env

# =========================================================
# 🎯 BookLore - основные настройки приложения
# =========================================================
APP_USER_ID=0
# UID пользователя на хосте, от имени которого
# BookLore будет работать внутри контейнера.
# Нужен для корректных прав доступа к volume.
APP_GROUP_ID=0
# GID группы на хосте.
# Должен совпадать с владельцем каталогов data / books / bookdrop.
TZ=Europe/Moscow
# Часовой пояс контейнеров.
# Используется для логов, планировщиков и временных меток.
BOOKLORE_PORT=6060
# Порт, на котором BookLore слушает внутри контейнера.
# Также используется Traefik как внутренний порт сервиса.
# =========================================================
# 🗄️ Подключение BookLore к базе данных MariaDB
# =========================================================
DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore
# JDBC-строка подключения к MariaDB:
# - mariadb        → имя сервиса в docker-compose
# - 3306           → стандартный порт MariaDB
# - booklore       → имя базы данных
DB_USER=booklore
# Пользователь базы данных,
# под которым BookLore подключается к MariaDB.
DB_PASSWORD=ChangeMe_BookLoreApp_2025!
# Пароль пользователя базы данных.
# ⚠️ ОБЯЗАТЕЛЬНО сменить в продакшене.
# =========================================================
# 🔧 Настройки контейнера MariaDB (инициализация)
# =========================================================
DB_USER_ID=1000
# UID пользователя, от имени которого
# MariaDB пишет данные в volume.
DB_GROUP_ID=1000
# GID группы для файлов базы данных.
MYSQL_ROOT_PASSWORD=ChangeMe_MariaDBRoot_2025!
# Пароль root-пользователя MariaDB.
# Используется только для администрирования БД.
MYSQL_DATABASE=booklore
# Имя базы данных, которая будет автоматически
# создана при первом запуске контейнера MariaDB.

Первичная настройка BookLore
#

После первого запуска необходимо выполнить начальную настройку системы.


Создание администратора
#

При первом открытии интерфейса BookLore предложит создать учётную запись администратора.

Необходимо указать:

  • имя пользователя;
  • пароль;
  • адрес электронной почты (опционально).

Этот пользователь получит полный доступ к настройкам системы.


Добавление библиотеки книг
#

Следующий шаг - подключение папки с книгами.

Если используется docker compose из примера выше, путь будет: /books.

После добавления директории BookLore начнёт сканирование библиотеки.


Сканирование и импорт книг
#

Во время сканирования приложение автоматически:

  • обнаруживает книги;
  • извлекает метаданные;
  • загружает обложки;
  • формирует каталог библиотеки.

Если библиотека большая, сканирование может занять некоторое время.


Настройка источников метаданных
#

В настройках можно выбрать источники метаданных, которые используются для поиска информации о книгах.

Это позволяет автоматически получать:

  • описания;
  • обложки;
  • жанры;
  • дополнительные сведения о книге.

Организация коллекций
#

Для удобной навигации можно создавать коллекции книг.

Например:

  • фантастика;
  • научная литература;
  • классика;
  • комиксы;
  • технические книги.

Книги можно добавлять в коллекции вручную или с помощью тегов.


Добавление пользователей
#

Если библиотекой пользуются несколько человек, можно создать дополнительные учётные записи.

Каждый пользователь сможет:

  • читать книги;
  • сохранять прогресс;
  • создавать закладки;
  • формировать собственные списки книг.

Итог
#

BookLore - это удобный и современный сервер для управления электронной библиотекой, который отлично подходит для домашнего сервера или homelab инфраструктуры.

Основные преимущества BookLore:

  • современный веб-интерфейс;
  • встроенный ридер электронных книг;
  • автоматическое получение метаданных;
  • поддержка нескольких пользователей;
  • простая установка через Docker.

Если у вас есть большая коллекция электронных книг и вы хотите получить удобный доступ к ней с любого устройства, BookLore станет отличным решением для организации собственной цифровой библиотеки.

Такой сервер легко развернуть на домашнем оборудовании и получить полноценную альтернативу облачным сервисам для чтения книг.

Self-Hosting - This article is part of a series.
Part : This Article

Related

Grimmory: self-hosted библиотека и читалка для вашей коллекции книг

··1185 слов·6 минут· loading · loading
Подробная инструкция по установке и настройке Grimmory: развёртывание в Docker, добавление книг, организация библиотеки и использование встроенной веб-читалки.

Gotify: свой собственный сервер push-уведомлений для гипервизора и не только

·2133 слов·11 минут· loading · loading
Устанавливаю Gotify в Docker и настраиваю push-уведомления от Proxmox VE, CrowdSec и Komodo - отдельный канал для инфраструктурных событий, без единого сообщения в общем чате Telegram.