Как запустить собственную электронную библиотеку?

Цель и необходимость

Читать активно и с увлечением стал как мне кажется достаточно поздно, примерно в 25 лет. На тот момент увидел как много я не знаю и из-за этого каждый раз придумываю «колесо» независимо от того в какой сфере я работаю, а пришлось поработать во многих. Начал я с бумажных книг, но увидел ряд минусов:

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

  2. Чтобы читать ночью или вечером необходимо дополнительное освещение.

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

Логичным выбором будут электронные книги, но они должны:

  1. Храниться в 1 месте, желательно с доступом через web-интерфейс.

  2. Иметь метаданные: название, автор, год издания, описание и т.д.

  3. По метаданным должна быть возможность осуществлять поиск.

  4. Книги должны быть доступны на всех устройствах: смартфон, пк и т.д.

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

docker-compose

Достаточно давно выбрал для себя open-source проект Calibre, установка которого возможна в docker. Создаем необходимые папки и файлы:

mkdir {private_library,private_library/config_calibre,private_library/config_calibre/books}
cd private_library
touch docker-compose.yml

Скачиваем пустую базу данных:

wget https://github.com/janeczku/calibre-web/raw/master/library/metadata.db -P config_calibre/books

Базу данных можно также получить через установку приложения на ПК (например, sudo pacman -S calibre) с дальнейшим перемещение базы данных по указанному выше пути.

Редактируем docker-compose через nano docker-compose.yml:

services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web
    container_name: calibre
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
    volumes:
      - ./config_calibre:/config
      - ./config_calibre/books:/books
    ports:
      - 8084:8083
    restart: unless-stopped

В первый раз заходим на http://<your_ip>:8084 и вводим с учетными данными:

  • username: admin

  • password: admin123

Проверяем целостность базы данных:

$ docker exec -it calibre sqlite3 /books/metadata.db "PRAGMA integrity_check;"
ok

После первой авторизации нас попросят 1 раз указать местоположение базы данных, сделаем это: В правом верхнем углу экрана находим «admin», переходим и меняем пароль. Далее возможна более тонкая настройка.

Оптимизации

Оптимизации запускаем через crontab -e

# Calibre: ежедневное обслуживание
0 0 * * * docker exec -it calibre sqlite3 /books/metadata.db "VACUUM; ANALYZE; PRAGMA optimize;"
# Calibre: увеличиваем размер кэш
@reboot docker exec -it calibre sqlite3 /books/metadata.db "PRAGMA cache_size = -100000;"

1 раз выполняем:

docker exec -it calibre sqlite3 /books/metadata.db "PRAGMA journal_mode = WAL;"

Проверяем результат:

$ docker exec -it calibre sqlite3 /books/metadata.db "PRAGMA journal_mode;"
wal

Поиск и добавление книг

Переходим в UI:

  1. Настройки -> Изменить основные настройки -> Дополнительные настройки -> Разрешить загрузку на сервер (Please ensure that users also have upload permissions) (Нажимаем)

  2. Настройки -> Edit users -> Выбираем пользователя -> Edit user -> Разрешить загрузку на сервер (Нажимаем)

Теперь наш пользователь может на сервер загружать книги :)

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

Для добавления книги:

  1. Нажимаем кнопку «Загрузить» в правом верхнем углу, которая должна появиться после выполнения действий выше.

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

Смартфон (Android)

Для взаимодействия устанавливаем «Moon+ Reader». Далее выбираем: Сеть -> Добавить каталог Адрес вводим формате: http://<your_ip>/opds

Итог

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

Ссылки:

  1. Зачем нужен собственный сервер в 2025?

  2. Как установить Proxmox?

  3. Как установить Docker?

  4. Как запустить прокси-сервер для сервисов?