Привет! Наверное, у каждого рано или поздно возникает вопрос: как упорядочить хаос с купленными (да, мы же против пиратства?) книгами в форматах 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.

Комментарии (26)


  1. dyadyaSerezha
    12.06.2025 01:09

    Я вполне понимаю, когда делают онлайн видео-архивы, там нужно много места. Но книги? По несколько МБ для одной, нужно всего несколько (немного) ГБ для тысячи. Это легко и быстро копируется локально и дальше к вашим услугам огромное количество стандартных приложений-ридеров. Можно даже закинуть архив в бесплатное облако, где будет мастер-копия. В общем, сама необходимость такого архива на сервере не очень понятна. То есть, я понимаю саму хотелку, но не понимаю её рациональности.


    1. SserjIrk
      12.06.2025 01:09

      Хотелка простая = личное зеркало флибусты или либрусека. Книг и там и там за террабайт по объему.


      1. dyadyaSerezha
        12.06.2025 01:09

        Ну тогда конечно) Но вроде как даже флибуста давно уже не бесплатная. Но если есть лишние пару миллионов баксов, тогда конечно.

        Кстати, есть ещё библиотека конгресса США...


        1. SserjIrk
          12.06.2025 01:09

          Бесплатная и ежедневно выкладывают как полный дамп своей БД так и все поступившие новые файлы. Ну и на широко известных в узких кругах трекерах доступны полные архивы книг.


          1. dyadyaSerezha
            12.06.2025 01:09

            Ого. Не знал. Но не вижу реального смысла все равно, кроме как "а че, прикольно")


            1. polearnik
              12.06.2025 01:09

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


              1. dyadyaSerezha
                12.06.2025 01:09

                Согласен - разумно иметь архив. Именно архив, а не онлайн-библиотеку.


                1. Pondesss
                  12.06.2025 01:09

                  Архив флибусты весил 6 месяцев назад в районе 400гб и в нем черт ногу сломит. Такая лютая матрешка из архивов, плюс ко всему книги все подписаны цифровой абракатаброй и нужна судя по всему какая то програмулина, которая автоматом их упорядочит и переименует, ну или я не знаю. Скачал, посмотрел, удалил. Может к о знает, как этим правильно пользоваться?)


                  1. Dakar
                    12.06.2025 01:09

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


                  1. sohmstyle
                    12.06.2025 01:09

                    Отдельно или рядом всегда есть INPX файл (индекс) для программы-каталогизатора. Всё нормально отображается в каталогизаторе.

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


                  1. alexs963
                    12.06.2025 01:09

                    Я использую inpx-web как сервер OPDS в связке с читалкой от того же автора. Если нужен живой десктопный каталогизатор для linux, то лучше использовать FreeLib


        1. koreec
          12.06.2025 01:09

          это вы с литресом перепутали.


      1. sohmstyle
        12.06.2025 01:09

        Спасибо, что рассказали про эти интерфейсы!

        Добавлю, что сейчас, когда интернет становится всё менее свободным и богатым на информацию, информация с течением времени исчезает, то своё хранилище различной информации играет всё большую и большую роль. А цена за ГБ всё меньше и меньше. Конечно, это не всем нужно, у всех разные потребности.


      1. ipfw999
        12.06.2025 01:09

        И вот как это сделать с поддержкой обновлений?


  1. anonymous
    12.06.2025 01:09


    1. MountainGoat
      12.06.2025 01:09

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

      А, и насчёт архива: полная дедуплицированная копия Либрусека и Флибусты в зипе занимает 3.5 Тб.

      Из статьи узнал только, что вэб-интерфейс Калибры обновили. Ещё недавно он был такой привет из 90-х.


      1. dyadyaSerezha
        12.06.2025 01:09

        Ну вот я читаю книги на телефоне. Ни разу не приходило в голову почитать их на компе или планшете, и чтобы синхронизировалось место чтения. Кстати, а Яндекс Книги не хранят место чтения в облаке?

        Насчёт полной копии Флиьусты - а зачем она личная, тем более доступная онлайн? Я искренне не понимаю. Ну копируешь себе архив раз в месяц на всякий случай, если ты такой уплротый читатель, и всё. Если вдруг сайт умрёт, у тебя есть локальная копия. А на телефоне/читалке хватит 20-100 локальных книг на полгода минимум.


        1. Lexsus333
          12.06.2025 01:09

          Яндекс Книги вроде хранят, иногда бывает глюк, когда приложение резко выгрузишь из памяти.... Кроме того, можно и свою честно-пречестно купленную книгу в библиотеку загрузить, правда все таки для этого нужна подписка.

          У самого на NAS Калибра-веб в докере работает, даже с внешним доступом - но заглядываю я туда крайне редко, на читалке несколько книг загруженно, только с нее и читаю)


          1. dyadyaSerezha
            12.06.2025 01:09

            Ну вот, ч.т.д.


      1. numark
        12.06.2025 01:09

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


      1. tmchk
        12.06.2025 01:09

        Посмотрите в сторону Гугл книг, загружать можно любые epub (естественно только купленные, честно-честно). На мобильных устройствах приложение, на ПК в браузере, насчёт приложения не подскажу, хватало веб версии.


  1. AlexVWill
    12.06.2025 01:09

    Спасибо за статью. Давно уже поднял собственный calibre сервер (правда справился без docker), выбор был обусловлен тем, что он поддерживает OPDS, тоесть другие читалки вроде AlReader могут пользоваться им как сервером для загрузки и чтения книг, используя собственный интерфейс, без использования Web и тем что у меня на Linux десктопе тоже Calibre. Хотя доступ к библиотеке и через браузер возможен тоже.


  1. tishin_i
    12.06.2025 01:09

    Спасибо за Kavita. Книги и в телефоне, и на читалке и на ноуте. Можно будет собрать в одном месте и читать с разных устройств.


  1. Anofriy
    12.06.2025 01:09

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


  1. XpyctAm
    12.06.2025 01:09

    https://github.com/stumpapp/stump
    вот еще один "набирающий обороты" с OPDS, разграничением по пользователям и возможностью вести несколько библиотек (с настройкой видимости для конкретных пользователей)


  1. almal
    12.06.2025 01:09

    Закладки меня не особо волнуют, но иметь доступ к своему архиву книг (и других файлов) всегда хотелось.
    В прошлом году Телеграм объявил о возможности безлимитного хранения файлов в частном канале пользователя.
    Ну я не удержался и написал персонального Телеграм бота, который имитирует файловую систему. Перекачал все файлы с дисков в него. Теперь все мои файлы доступны с любого устройства где есть Телеграм (а он везде есть).
    Как это выглядит можно посмотреть по этой ссылке https://t.me/TurboFileHub_TurboBot?start=66bcad1f-0c8e-4c25-9a71-5967a2613abe

    Это не книги (чтобы не нарушать авторских прав), а видео.

    То есть, можно давать ссылки на свои папки другим людям (забесплатно или за Telegram Stars).


    Если тоже захотите такого бота - сюда посмотрите t.me/TurboFileHub