MAATRIX / Блог / Calibre-Web в Docker Compose: готовый файл

Calibre-Web в Docker Compose: готовый файл

MAATRIX

Если у вас накопилась библиотека из пары тысяч fb2 и epub, разбросанных по папкам «Книги (2)» и «Книги новые финал», знакомая боль — найти нужную вещь занимает больше времени, чем её прочитать. Calibre-Web решает это одним движением: веб-интерфейс поверх вашей библиотеки Calibre, доступный с телефона, планшета и читалки через браузер, плюс отдача книг по OPDS прямо в KOReader или PocketBook. Ниже — рабочий docker-compose.yml, который поднимается за одну команду, и разбор нюансов, на которых обычно спотыкаются при первом запуске.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Calibre-Web и зачем он поверх Calibre

Сам Calibre — толстый десктопный клиент: библиотека, метаданные, конвертация форматов, но всё это живёт на одном компьютере. Calibre-Web — отдельный лёгкий проект (форк исходного calibreweb, сейчас активно поддерживается сообществом), который читает ту же файловую структуру библиотеки (metadata.db + папки с книгами) и отдаёт её через браузер: обложки, поиск, теги, серии, отправка на почту Kindle, читалка epub/pdf прямо в браузере.

Важный момент: Calibre-Web не заменяет Calibre для управления библиотекой — редактировать метаданные массово, конвертировать форматы удобнее в десктопном приложении. Связка обычно такая: Calibre на компьютере для наведения порядка, Calibre-Web на сервере — для доступа и раздачи. Можно обойтись и без десктопного Calibre вовсе, если библиотека уже в порядке, но тогда конвертацию форматов на лету придётся отключить или подключать отдельно.

Зачем это на арендованном сервере, а не дома на NAS: постоянный аптайм без зависимости от домашнего интернета и электричества, доступ по нормальному домену с HTTPS без проброса портов через роутер, и не нужно держать домашний ПК включённым 24/7 ради одной библиотеки.

Готовый docker-compose.yml

Базовый образ — lscr.io/linuxserver/calibre-web, он поддерживается активно и учитывает переменные окружения LinuxServer (PUID/PGID/TZ), что удобно для прав доступа к файлам.

version: "3.8"

services:
  calibre-web:
    image: lscr.io/linuxserver/calibre-web:latest
    container_name: calibre-web
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
      - DOCKER_MODS=linuxserver/mods:universal-calibre
    volumes:
      - ./config:/config
      - ./library:/books
      - ./ingest:/books/ingest
    ports:
      - "8083:8083"

Три тома на заметку:

  • ./config — база данных самого Calibre-Web (настройки, пользователи, статистика), не путайте с библиотекой книг;
  • ./library — сюда кладётся ваша библиотека Calibre целиком (папка с metadata.db и подпапками книг);
  • ./ingest — папка для автозагрузки: закинутые сюда файлы Calibre-Web подхватывает и добавляет в библиотеку.

DOCKER_MODS=linuxserver/mods:universal-calibre — не обязательная, но полезная строка: она докидывает в контейнер бинарники Calibre для конвертации форматов (epub → mobi, pdf → epub и так далее). Без неё Calibre-Web работает, но кнопка «Конвертировать» будет неактивна. Мод увеличивает образ на несколько сотен мегабайт и время первого старта — если конвертация не нужна, смело убирайте строку.

Поднимаем:

mkdir -p calibre-web/{config,library,ingest} && cd calibre-web
# сюда положить docker-compose.yml
docker compose up -d

Если Docker и Compose ещё не установлены — сначала ubuntu-24-04-ustanovka-docker-s-nulya.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Первый запуск и импорт существующей библиотеки

Открываем http://IP-сервера:8083. Мастер настройки попросит указать путь к библиотеке — внутри контейнера это /books. Дальше два сценария.

У вас уже есть библиотека Calibre. Скопируйте всю папку библиотеки (там, где лежит metadata.db) на сервер в ./library до первого запуска или через docker cp:

scp -r ~/Calibre\ Library/* user@server:/path/to/calibre-web/library/

При инициализации Calibre-Web найдёт существующий metadata.db и подключит библиотеку как есть — обложки, теги и серии сохранятся.

Библиотеки ещё нет. Мастер создаст пустую библиотеку с чистым metadata.db в /books. Дальше книги добавляются либо через веб-интерфейс (кнопка загрузки, до 100 файлов за раз в новых версиях), либо через папку ingest — файлы, закинутые туда по scp/rsync/SFTP, Calibre-Web индексирует автоматически (нужно включить Upload/автосканирование ingest в настройках admin).

Логин по умолчанию — admin / admin123, сменить обязательно сразу после первого входа: Настройки → Пользователи.

OPDS: раздача книг в читалку

OPDS (Open Publication Distribution System) — это тот самый механизм, который позволяет KOReader, PocketBook Reader, Moon+ Reader и другим приложениям видеть вашу библиотеку как каталог и скачивать книги напрямую, без промежуточного компьютера.

Адрес каталога: https://ваш-домен/opds. В приложении читалки обычно есть пункт «Добавить OPDS-каталог» или «Add catalog» — вставляете URL, логин и пароль от Calibre-Web.

Пример для KOReader: Меню → Каталог OPDS → добавить новый → URL https://library.example.com/opds, указываете учётные данные. После этого библиотека появляется как обычная файловая структура с поиском и сортировкой по последним добавленным.

Без HTTPS OPDS тоже работает, но многие клиенты (особенно на iOS) требуют защищённое соединение для передачи логина/пароля, поэтому обратный прокси с сертификатом — не опция, а по факту необходимость.

HTTPS и домен через обратный прокси

Отдавать библиотеку по IP:8083 без шифрования — плохая идея, если вы обращаетесь к серверу вне локальной сети: логин и пароль от Calibre-Web будут идти в открытом виде. Решение — обратный прокси с автоматическим TLS.

Если на сервере уже стоит Traefik или планируете его поставить, статья traefik-kak-reverse-proxy-dlya-dokera разбирает подключение docker-контейнеров через лейблы — для Calibre-Web это будет typical traefik.http.routers.calibreweb.rule=Host(...) с портом 8083. Кому проще работать через UI — portainer-na-ubuntu-24-04-poshagovaya-ustanovka закрывает вопрос управления контейнерами без консоли.

Минимальный пример labels для Traefik прямо в compose-файле:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.calibreweb.rule=Host(`library.example.com`)"
      - "traefik.http.routers.calibreweb.entrypoints=websecure"
      - "traefik.http.routers.calibreweb.tls.certresolver=letsencrypt"
      - "traefik.http.services.calibreweb.loadbalancer.server.port=8083"

Если сертификат Let's Encrypt не выпускается или зависает на проверке — вероятная причина в DNS или блокировке 80/443 порта, разбор частых причин есть в let-s-encrypt-ne-prohodit-validaciya-prichiny-i-reshenie.

Отправка книг на Kindle и почтовые настройки

Calibre-Web умеет отправлять книги напрямую на Kindle-почту (ваш-ящик@kindle.com) через встроенную функцию Send-to-Kindle. Настраивается в двух местах:

  1. SMTP-сервер для отправки — Настройки администратора → Настройки электронной почты: хост, порт, логин/пароль вашего почтового ящика (для Gmail нужен пароль приложения, обычный пароль аккаунта не подойдёт из-за 2FA).
  2. Kindle-адрес получателя — в профиле каждого пользователя (Настройки пользователя → Kindle Email) плюс сам ящик Calibre-Web должен быть добавлен в список разрешённых отправителей на Amazon (Manage Your Content and Devices → Preferences → Personal Document Settings).

Формат Kindle официально принимает EPUB, PDF, DOC/DOCX не старого формата и некоторые другие — конвертация в подходящий формат при отправке делается автоматически, если включён мод universal-calibre из шага с compose-файлом. Без него отправка сработает только для форматов, которые Kindle понимает без пересборки.

Бэкапы библиотеки

Библиотека Calibre — это по сути папка с файлами плюс SQLite-база metadata.db. Бэкапить нужно оба тома: ./library (сами книги и метаданные) и ./config (пользователи, настройки, читательская статистика). Потеря library — потеря самой библиотеки, потеря config — потеря настроек и учёток (книги при этом останутся целы на диске).

Простой вариант — cron с tar и выгрузкой на внешнее хранилище:

0 3 * * * tar czf /backup/calibre-$(date +\%F).tar.gz -C /path/to/calibre-web config library && find /backup -name "calibre-*.tar.gz" -mtime +14 -delete

Для более серьёзного подхода с версионированием и дедупликацией удобнее готовый инструмент — обзор настройки в restic-v-docker-compose-gotovyj-fajl или duplicati-v-docker-compose-gotovyj-fajl, оба разворачиваются рядом тем же docker compose и умеют шифрованную выгрузку на S3-совместимое хранилище по расписанию.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Calibre-Web поддерживает многопользовательский доступ с разными правами?

Да, в админке можно создавать пользователей с ограничением на просмотр определённых тегов/полок, запретом скачивания оригиналов или доступом только для чтения через встроенную читалку.

Можно ли использовать Calibre-Web без установленного где-либо Calibre?

Можно — библиотека создаётся с нуля прямо в контейнере, но массовое редактирование метаданных и сложную конвертацию удобнее делать в десктопном Calibre, а потом просто синхронизировать папку библиотеки на сервер.

Сколько ресурсов нужно серверу под Calibre-Web?

Сам сервис лёгкий — 1 vCPU и 512 МБ–1 ГБ RAM хватает даже с запасом для библиотеки в несколько тысяч книг; узкое место обычно не CPU/RAM, а место на диске под сами файлы книг.

Есть ли мобильное приложение, или только браузер?

Официального приложения у Calibre-Web нет, но благодаря OPDS-каталогу с ним работают сторонние читалки — KOReader, Moon+ Reader, PocketBook Reader и другие, у которых есть поддержка OPDS.

Что делать, если после обновления образа пропали обложки книг?

Обычно причина в правах доступа на том library после пересоздания контейнера — проверьте PUID/PGID в environment, они должны совпадать с владельцем файлов на хосте (ls -la по папке library).

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →