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:
[simterm]
$ 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 ...
[/simterm]
Запускаем докер, монтируем библиотеку в /books
:
[simterm]
$ docker run -ti --name books -p 8083:8083 -v /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/:/books technosoft2000/calibre-web
[/simterm]
Проверяем файл metadata.db
:
[simterm]
$ docker exec -ti books ls -l /books/metadata.db -rw-r--r-- 1 xfs xfs 752640 Dec 13 07:51 /books/metadata.db
[/simterm]
Открываем в браузере, указываем путь к каталогу с библиотекой (в которой должен располагаться файл 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:
[simterm]
$ docker exec -ti books ps | grep cali 68 calibre 0:08 /usr/bin/python /calibre-web/app/cps.py
[/simterm]
И его ID:
[simterm]
$ docker exec -ti books id calibre uid=15000(calibre) gid=15000(calibre) groups=15000(calibre),15000(calibre)
[/simterm]
Тогда как локальная папка:
[simterm]
$ 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
[/simterm]
И ID локального юзера www-data
:
[simterm]
$ id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data)
[/simterm]
Т.е. Calibre использует пользователя calibre
с UID 15000, а NGINX на хосте и контейнер с Nextcloud — используют пользователя www-data
с UID 33.
Что бы решить эту проблему — добавляем в команду запуска перменные PUID (User ID) и PGID (Group ID), в которых передаёмзначение 33:
$ docker run -ti —name books -p 8083:8083 PGID=33 -e PUID=33 -v /data/nextcloud/app/data/setevoy/files/Books/CALIBRE/:/books technosoft2000/calibre-web
Проверяем процесс в контейнере теперь:
[simterm]
# docker exec -ti calibre-web ps aux PID USER TIME COMMAND 1 root 0:00 {start.sh} /bin/bash /init/start.sh 59 xfs 0:03 /usr/bin/python /calibre-web/app/cps.py
[/simterm]
И проверяем UID пользователя xfs
, который запустил /usr/bin/python /calibre-web/app/cps.py
:
[simterm]
# docker exec -ti calibre-web id xfs uid=33(xfs) gid=33(calibre) groups=33(calibre),33(calibre)
[/simterm]
Проверяем загрузку — работает:
Docker Compose
Что бы обеспечить постоянность хранения настроек — находим, где в контейнере хранятся данные приложения, в частности — его база данных, в которой Calibre хранит настройки веб-сервиса.
Подключаемся в контейнер:
[simterm]
$ docker exec -ti calibre-web bash
[/simterm]
Находим все файл .db:
[simterm]
bash-4.4# find / -name "*.db" /calibre-web/app/app.db /calibre-web/app/gdrive.db ...
[/simterm]
На хосте создаём каталоги для Compose файла и для данных:
[simterm]
$ mkdir /opt/calibre-web/ $ mkdir -p /data/calibre/app $ chown -R calibre:calibre /data/calibre/
[/simterm]
В каталоге /opt/calibre-web/
создаём Docker Compose файл calibre-compose.yml
:
version: '3' services: calibre-web: user: "root:root" image: technosoft2000/calibre-web container_name: calibre-web environment: - PUID=33 - PGID=33 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
Запускаем:
[simterm]
$ docker-compose -f calibre-compose.yml up -d
[/simterm]
Создание 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:
Готово.