Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти.
К сожалению статья уже неактуальна, так как разработчик не выдержал критиканства и удалил репозиторий.
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
- 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 станет отличным решением для организации собственной цифровой библиотеки.
Такой сервер легко развернуть на домашнем оборудовании и получить полноценную альтернативу облачным сервисам для чтения книг.





