Calibre: домашняя онлайн-библиотека в браузере и Moon+ Reader | DevsDay.ru

IT-блоги Calibre: домашняя онлайн-библиотека в браузере и Moon+ Reader

rtfm.co.ua 17 декабря 2019 г. setevoy


 

Calibre пользуюсь много лет, но всегда desktop-версией.

На днях увидел Calibre Web — та же библиотека, работающая с той же базой, но доступна через браузер.

Домашняя страница проекта в Github — тут>>>.

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

Хранить библиотеку будем в Nextcloud (см. Nextcloud: запуск в Docker Compose на Debian с SSL от Let’s Encrypt), а читать можно через Moon+ Reader, который умеет синхронизировать место прочтения при работе через WebDAV.

В этом посте выполним:

  • в Docker запустим Calibre Web — web-интерфейс для библиотеки
  • в неё смонтируем папку из Nextcloud с библиотекой Calibre
  • и с телефона через WebDAV к нашему Nextcloud подключим читалку Moon+ Reader

NGINX, Let’s Encrypt

Настраиваем NGINX + Let’s Encrypt, см описание в Bitwarden: менеджер паролей организации — установка self-hosted версии на AWS EC2.

Запуск Calibre Web

Будем подключать уже существующую библиотеку, которая синхронизируется между машинами через Nexcloud:

ll /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/ | head
total 1212
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:53 A. A. Orlov
drwxr-xr-x  7 www-data www-data   4096 Dec 13 07:53 A. Avramienko
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:55 A. Bielash
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:53 A. B_iuli
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:55 Adol_f Gitlier
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:55 A. Fomienko, G. Nosovskii
drwxr-xr-x  4 www-data www-data   4096 Dec 13 07:55 A. Kamienistyi
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:55 A. Karr
drwxr-xr-x  3 www-data www-data   4096 Dec 13 07:55 Al_bier Kamiu
...

Запускаем докер, монтируем библиотеку в /books:

docker run -ti --name books -p 8083:8083 -v /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/:/books technosoft2000/calibre-web

Проверяем файл metadata.db:

docker exec -ti books ls -l /books/metadata.db
-rw-r--r-- 1 xfs xfs 752640 Dec 13 07:51 /books/metadata.db

Открываем в браузере, указываем путь к каталогу с библиотекой (в которой должен располагаться файл metadata.db, используемый Calibre для хранения информации о книгах в библиотеке):

Логинимся с дефолтными admin:admin123:

И открываем нашу библиотеку:

А Категории тут — это теги из Calibre:

Ну и всё, как в обычной Calibre — можем редактировать, и читать книги:

И браузерная читалка:

Но не без недостатков. Например — нельзя переключиться на страницу по номеру, или даже просто пролистать вперёд-назад, только листать по одной странице.

Failed to create path /books/ (Permission denied)

При загрузке файла сейчас — будет выдано сообщение об ошибке:

Failed to create path /books/Mark Menson/Tonkoe iskusstvo pofigizma_ Paradoksal’nyi sposob zhit’ schastlivo (Permission denied).

Достаточно ожидаемая ошибка, учитывая факт того, что каталог /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/ используется и контейнером с Nextcloud, и контейнером с Calibre.

Проверяем под каким пользователем запущено приложение в контейнере Calibre:

docker exec -ti books ps | grep cali
68 calibre   0:08 /usr/bin/python /calibre-web/app/cps.py

И его ID:

docker exec -ti books id calibre
uid=15000(calibre) gid=15000(calibre) groups=15000(calibre),15000(calibre)

Тогда как локальная папка:

ls -l /data/nextcloud/app/data/setevoy/files/Books/
total 4
drwxr-xr-x 117 www-data www-data 4096 Dec 16 09:32 CALIBRE

И ID локального юзера www-data:

id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Т.е. Calibre использует пользователя calibre с UID 15000, а NGINX на хосте и контейнер с Nextcloud — используют пользователя www-data с UID 33.

Что бы решить эту проблем — создаём локально юзера calibre с UID 15000 и такую же группу:

sudo useradd -u 15000 calibre
id calibre
uid=15000(calibre) gid=15000(calibre) groups=15000(calibre)

Меняем владельца каталога и файлов:

sudo chown -R calibre:calibre /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/

И перезапускаем Calibre:

docker restart calibre-web
calibre-web

Проверяем загрузку — работает:

Nextcloud PUT 403

Но теперь поломается доступ к Nexcloud — на клиенте при синхронизации пошли ошибки 403, например:

172.29.0.2 — setevoy [16/Dec/2019:13:22:24 +0000] «PUT /remote.php/dav/files/setevoy/Books/CALIBRE/Pol’%20Diubua/MySQL%20(68)/cover.jpg HTTP/1.1» 403 759 «-» «Mozilla/5.0 (Linux) mirall/2.6.1git (Nextcloud)»

Поэтому — на хосте добавляем пользователя calibre в группу www-data:

usermod -a -G www-data calibre

Проверяем группы:

id calibre
uid=15000(calibre) gid=15000(calibre) groups=15000(calibre),33(www-data)

Рекурсивно задаём доступ полный доступ ко всем каталогам для всех членов группы www-data, в которую теперь входят и сам пользователь www-data, и пользователь calibre:

find /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/ -type d -exec chmod g+rwx {} +

И меняем владельца и группу каталогов и папок:

chown -R calibre:www-data /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/

Готово, синхронизация снова работает.

Docker Compose

Что бы обеспечить постоянность хранения настроек — находим, где в контейнере хранятся данные приложения, в частности — его база данных, в которой Calibre хранит настройки веб-сервиса.

Подключаемся в контейнер:

docker exec -ti calibre-web bash

Находим все файл .db:

bash-4.4# find / -name "*.db"
/calibre-web/app/app.db
/calibre-web/app/gdrive.db
...

На хосте создаём каталоги для Compose файла и для данных:

mkdir /opt/calibre-web/
mkdir -p /data/calibre/app
chown -R calibre:calibre /data/calibre/

В каталоге /opt/calibre-web/ создаём Docker Compose файл calibre-compose.yml:

version: '3'

services:

  calibre-web:
    user: "root:root"
    image: technosoft2000/calibre-web
    container_name: calibre-web
    ports:
      - 8083:8083
    volumes:
      - /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/:/books
      -  /data/calibre/app:/calibre-web/app/ 
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped

Запускаем:

docker-compose -f calibre-compose.yml up -d

Создание unit-файла для systemd описано в посте Linux: systemd сервис для Docker Compose, у меня получился такой /etc/systemd/system/calibre.service:

[Unit]
Description=Calibre library service
Requires=docker.service
After=docker.service

[Service]
Restart=always
WorkingDirectory=/opt/calibre-web
ExecStart=/usr/local/bin/docker-compose -f calibre-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f calibre-compose.yml down

[Install]
WantedBy=multi-user.target

Темы Calibre Web

Из коробки есть поддержка двух цветовых тем — стандартная, светлая:

И тёмная:

Moon+ Reader

Moon+ Reader из недавних находок.

Вроде как умеет синхронизировать позицию прочитанной книги при использовании Dropbox/WebDAV, добавление комментариев, закладки, и всё то, что нужно от читалки.

Устанавливаем, настраиваем WebDAV:

И получаем доступ к библиотеке:

Настройка синхронизации

Что бы Moon+ синхронизировал позицию прочтения — открываем книгу, затем справа вверху три точки > Miscellaneous, и в самом низу включаем Sync reading positions:

Готово.


Источник: rtfm.co.ua

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

HOWTO's Разное Android books Linux