Как запустить собственную электронную библиотеку?
Цель и необходимость
Читать активно и с увлечением стал как мне кажется достаточно поздно, примерно в 25 лет. На тот момент увидел как много я не знаю и из-за этого каждый раз придумываю «колесо» независимо от того в какой сфере я работаю, а пришлось поработать во многих. Начал я с бумажных книг, но увидел ряд минусов:
Бумажные книги к большому моему сожалению быстро приходят в негодность, если с ними постоянно взаимодействовать.
Чтобы читать ночью или вечером необходимо дополнительное освещение.
По бумажным книгам невозможен поиск. В книге может быть указан какой термин и на какой странице встречается, но я говорю про свободный поиск любого термина, а не только терминов, которые авторы сами выделили.
Логичным выбором будут электронные книги, но они должны:
Храниться в 1 месте, желательно с доступом через web-интерфейс.
Иметь метаданные: название, автор, год издания, описание и т.д.
По метаданным должна быть возможность осуществлять поиск.
Книги должны быть доступны на всех устройствах: смартфон, пк и т.д.
Это и будут наши минимальные требования. В текущей статье мы будет стараться их выполнить.
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:
Настройки -> Изменить основные настройки -> Дополнительные настройки -> Разрешить загрузку на сервер (Please ensure that users also have upload permissions) (Нажимаем)
Настройки -> Edit users -> Выбираем пользователя -> Edit user -> Разрешить загрузку на сервер (Нажимаем)
Теперь наш пользователь может на сервер загружать книги :)
Когда-то давно хотел использовать Readarr вместе с текущим решением, чтобы книги сами находились и добавлялись. На тот момент так и не смог настроить его. На текущий момент проект не активен и работу по поиску книг и их добавлению необходимо выполнять самостоятельно. Для поиска книг я использую телеграмм-каналы и их названия можно найти самостоятельно.
Для добавления книги:
Нажимаем кнопку «Загрузить» в правом верхнем углу, которая должна появиться после выполнения действий выше.
Получить метаданные. Если метаданные найдены, то выбираем найденную книгу и применяем изменения.
Первая книга добавлена!
Смартфон (Android)
Для взаимодействия устанавливаем «Moon+ Reader». Далее выбираем: Сеть -> Добавить каталог
Адрес вводим формате: http://<your_ip>/opds
Итог
Теперь у нас есть собственная электронная библиотека, в которой мы можем самостоятельно обновлять книги, добавлять пользователей и при необходимости можем автоматизировать этот процесс.
Ссылки: