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:
Готово.










