Pull to refresh

Организация собственной библиотеки на сервере с веб-интерфейсом

Level of difficultyEasy
Reading time6 min
Views4.5K

Привет! Наверное, у каждого рано или поздно возникает вопрос: как упорядочить хаос с купленными (да, мы же против пиратства?) книгами в форматах PDF, DJVU и других, так чтобы:

  • получить к ним доступ как с мобильного устройства, так и с любимого ПК или Mac;

  • сохранять прогресс чтения между устройствами;

  • не терять книги в куче папок.

Хочу поделиться решением, которое помогло мне организовать библиотеку.

Немного предыстории

Несколько лет назад ко мне обратился коллега с просьбой помочь собрать домашний NAS. Он хотел не просто хранилище, а универсальное решение, в том числе — для организации библиотеки. Мы настроили DLNA, RAID и другое, но подходящего решения именно для книг тогда не нашли. Calibre был на слуху, но его интерфейс показался неудобным, и коллега ограничился SMB-шарой.

Недавно я для себя также решил - пора избавиться от хаоса, навести порядок и упростить себе жизнь.

Требования к решению

Задача: организовать электронную библиотеку, доступную по сети.

Желаемый функционал:

  • Сохранение прогресса чтения;

  • Разграничение прав доступа;

  • Работа как со смартфонов, так и через веб-интерфейс;

  • Поддержка PDF и EPUB (DJVU можно сконвертировать);

  • Наличие готового Docker-образа для быстрого развертывания.

Неожиданное открытие: OPDS и OPDS-PS

Оказывается, есть протокол OPDS (Open Publication Distribution System).
OPDS — это открытый стандарт каталогов публикаций, который позволяет приложениям подключаться к онлайн-библиотекам и получать доступ к книгам в удобном виде. Наверное, для тебя, уважаемый читатель, опытный пользователь различных читалок, это не новость, а для меня, увы, стало открытием совсем недавно.

Но на этом всё не заканчивается — существует также расширение этого стандарта под названием OPDS-PS (Publication Streaming). Это современное развитие OPDS, ориентированное на потоковую работу с книгами: оно позволяет читать контент напрямую из библиотеки (без необходимости скачивать книгу целиком), быстро подгружать обложки, метаданные, и — что особенно важно — сохранять прогресс чтения.

То есть, если приложение или читалка поддерживает OPDS-PS, можно не только открывать книгу из онлайн-каталога, но и знать, где вы остановились — и продолжить с того же места на любом устройстве. Это огромный шаг вперёд по сравнению с классическим OPDS, который предоставляет только доступ к книгам, но не "помнит" о ваших действиях.

Что это всё нам говорит? Мы можем теоретически подключать читалки (под «читалкой» я имею в виду устройство типа e-ink reader), использовать такие приложения как KOReader, Marvin, Moon+ Reader и т.п., и получить доступ к своим библиотекам напрямую. К сожалению, у меня сейчас нет подходящего устройства, чтобы проверить это на практике, но потенциально это огромная находка.

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

Результат поиска

После долгого изучения я остановился на двух вариантах: Calibre-Web и Kavita. Также заслуживает внимания Komga, но о нём — в другой раз.

Kavita - лёгкий и мощный сервер для чтения

 Изображение взято с официального сайта продукта.
Изображение взято с официального сайта продукта.

Kavita — это медиа-сервер для чтения комиксов, манги, вебтунов и электронных книг. Он ориентирован на удобство, производительность и богатый набор функций, обеспечивая локальное хранение и чтение коллекций без зависимости от сторонних облачных сервисов.

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

  • Поддержка форматов: CBR, CBZ, EPUB, PDF, MOBI, AZW3 и других;

  • Удобный веб-интерфейс — одинаково хорошо работает на компьютере и смартфоне;

  • Поддержка многопользовательского режима с разграничением прав;

  • Сохранение прогресса чтения и встроенный ридер;

  • Умная организация библиотеки: категории, теги, метаданные;

  • Готовый Docker-образ, быстрая установка;

  • Поддержка OPDS (но не OPDS-PS, см. нюансы ниже).

Процесс установки прост за счет того, что уже есть готовый Docker образ. 

Вот docker-compose.yml (рекомендую комментарии удалить во избежания ошибок при запуске)

 services:
    kavita:
        image: jvmilazz0/kavita:latest    # Using the stable branch from the official dockerhub repo.
        container_name: kavita
        volumes:
            - /opt/books:/books #Путь к вашим книгам, их может быть несколько
            - /opt/kavita-conf:/kavita/config     # Путь к конфигурации
        environment:
            - TZ=Europe/Moscow
        ports:
            - "5000:5000"
        restart: unless-stopped

Совет: заранее создайте каталоги /opt/books и /opt/kavita-conf. Без них контейнер может не стартовать.

После запуска откройте в браузере http://ваш_IP:5000 — вы попадёте на страницу первого входа. 

Что стоит учитывать: 

  • Отсутствие верификации пароля, будьте внимательны;

  •  Загрузка книг через WebUI невозможна, только через файловую систему;

  •  Файлы должны быть в подкаталогах — иначе не попадут в библиотеку, подробнее в wiki;

  •  Обложки подтягиваются автоматически — это удобно.

Для добавления библиотек перейдите в настройки → LibrariesAdd Library. Тип библиотеки (комиксы, книги и т.д.) влияет на то, как обрабатываются названия файлов.

Подождите 5-10 минут (зависит от объёма вашей библиотеки) и можете пользоваться своей библиотекой.

Если же вам нужно подключиться к вашей библиотеке удаленно, с android устройств и читалок, в настройках есть удобный пункт в группе Accounts - API Key / OPDS. Здесь вы можете сразу получить OPDS url и API Key (для совместимых приложений) для ваших клиентов. Так же есть ссылка на wiki со списком поддерживаемых OPDS клиентов.

Calibre-Web - классика для библиофилов

Изображение взято с официального сайта продукта.
Изображение взято с официального сайта продукта.

Calibre-Web — это надстройка над популярным Calibre, ориентированная именно на книги. У него мощная ролевая модель, гибкая настройка и поддержка множества функций для серьёзной работы с библиотекой.

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

  • Современный интерфейс (Bootstrap 3, HTML5);

  • Полная веб-настройка без консоли;

  • Продвинутые права доступа и роли;

  • Поддержка OPDS;

  • Интеграция с ридерами Kobo;

  • Загрузка книг, коллекции, поиск;

  • Поддержка отправки книг на устройства;

  • Аутентификация: LDAP, Google, GitHub, proxy authentication support;

  • Авторизация без пароля через magic link.

 Процесс установки так же прост за счет того, что уже есть готовый Docker образ. 

Вот docker-compose.yml (рекомендую комментарии удалить во избежания ошибок при запуске)

services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
      - DOCKER_MODS=linuxserver/mods:universal-calibre #optional
      - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
    volumes:
      - /opt/calibre-web/data:/config # Директория с конфигурацией
      - /opt/books-calibre:/books       #Директория с вашими книгами
    ports:
      - 8083:8083
    restart: unless-stopped

Совет: заранее создайте каталоги  /opt/calibre-web/data и /opt/books-calibreБез них контейнер может не стартовать.

После запуска откройте в браузере http://ваш_IP:5000 — вы попадёте на страницу первого входа.

В каталог /opt/books-calibre необходимо положить файл metadata.db — его можно взять с GitHub проекта. Располагается файл здесь: https://github.com/janeczku/calibre-web/raw/master/library. Это так же описано в официальной документации

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

  • Выставьте корректные права:

chown 1000:1000 /opt/books-calibre/metadata.db
chmod 664 /opt/books-calibre/metadata.db
chown 1000:1000  /opt/books-calibre
  • Если отображается ошибка 

Oops! Database Error: attempt to write a readonly database.

выставьте права на metadata.db 777:

chmod 777 /opt/books-calibre/metadata.db

В отличии от Kavita Calibre-Web нет возможности сразу же поменять пароль и использовать вшитый пароль, его вы можете подсмотреть на странице в docker hub.

 После авторизации будет предложено добавить директорию с книгами, куда добавили файл metadata.db.

Чтобы разрешить загрузку книг:

 Перейдите в Admin → Edit Basic Configuration → Feature Configuration → Enable Uploads.

Не забываем про кнопку "Save".

Переходим в раздел Books и у нас появляется кнопка Upload.

Загружаем, наконец, нашу первую книгу.

Что выбрать?

Kavita:

  •  Встроенный ридер с сохранением прогресса;

  •  Минимум ручных действий — просто размещаем книгу в папку;

  •  Нет загрузки книг из интерфейса;

  •  Нет полноценной ролевой модели.

Calibre-Web:

  •  Расширенные права доступа, идеально для корпоративных сетей (AD/LDAP);

  •  Возможность загрузки книг через WebUI;

  •  Прогресс чтения не сохраняется;

  •  Установка требует больше внимания.

OPDS и чтение на устройствах

  • Поддержка OPDS есть в обоих решениях.

  • OPDS-PS поддерживает только одно приложение, которое смог найти - KOReader, но его нет в официальных магазинах.

  • Через браузер Kavita можно комфортно читать, даже без отдельного приложения.

  • Из доступных в Android магазине есть Librera, Moon+ Reader, FBReader с поддержкой OPDS и у нас есть возможность получить доступ к библиотеке, посмотреть обложки и скачать книгу на устройство

К сожалению у меня на руках только Android девайсы и проверить на других устройствах нет возможности. 

Мой выбор

Я выбрал Kavita - мне важно, чтобы прогресс чтения сохранялся, и чтобы я мог просто добавлять файлы, не настраивая ничего лишнего. Для более сложных сценариев - например, интеграции с ActiveDirectory - стоит смотреть в сторону Calibre-Web.

Tags:
Hubs:
+16
Comments28

Articles