📚 Calibre Web Automated: как я перенёс 50 000+ книг на Synology и наконец-то обрёл покой

У меня накопилась довольно внушительная коллекция — более 50 000 книг. Раньше я управлял ею через MyHomeLib на ПК, но когда я приобрёл небольшой Synology NAS, захотелось перенести всё туда и управлять библиотекой централизованно, из любого места и с любого устройства.

И начался… поиск идеального решения. :sweat_smile:


:cross_mark: Почему не подошли прошлые решения?

Calibre — мощный, но неудобный

Я установил Calibre в Docker-контейнере и успешно импортировал всю библиотеку. Всё работало — но неудобно.
Он запускался через KasmVNC, что ощущалось как эмулятор старой приставки :joystick:.
А главное — кнопка «Скачать книгу» сохраняла файл на сервер, а не на моё устройство.

Приходилось:

  1. Скачать на сервер
  2. Затем перекинуть на ПК
  3. Далее на читалку или телефон.

Это быстро надоело.

Calibre Web — красивый, но хрупкий

Следующей попыткой стал Calibre Web — лёгкий веб-интерфейс. Дизайн и удобство сразу пришлись по душе! :tada:
Но при попытке импортировать книги приложение постоянно падало с ошибками базы данных.
После нескольких дней в поисках решения на форумах мне посоветовали… запускать оба приложения одновременно:

  • Calibre — для импорта и управления библиотекой,

  • Calibre Web — для чтения и скачивания.

Работало, но это было громоздко: два сервиса, двойное потребление ресурсов, сложная синхронизация.


:bullseye: Появился CWA — и всё встало на свои места

Тогда я наткнулся на Calibre Web Automated (CWA) — и с тех пор пользуюсь им уже несколько месяцев.

Стабильно. Надёжно. Без костылей.

Он словно объединил лучшее от обоих миров:

  • :sparkles: Лёгкий веб-интерфейс, как в Calibre Web,

  • :gear: Полная автоматизация, как в «настоящем» Calibre,

  • :zzz: Никаких VNC, никаких ручных переносов.

:light_bulb: Совет: если у вас Android, установите Calibre-Web Companion — управлять библиотекой с телефона стало ещё удобнее!


:sparkles: Основные функции CWA

CWA поддерживает весь функционал оригинального Calibre Web, включая:

  • :globe_with_meridians: Современный и адаптивный интерфейс (Bootstrap 3 + HTML5)

  • :busts_in_silhouette: Гибкая система пользователей с индивидуальными правами

  • :satellite_antenna: OPDS-лента — подключайтесь с любого ридера (FBReader, Moon+, PocketBook и др.)

  • :pencil: Редактирование и удаление метаданных прямо в браузере

  • :inbox_tray: Автозагрузка метаданных из множества источников (и можно расширить через плагины!)

  • :locked: Ограничение скачивания для авторизованных пользователей

  • :memo: Публичная регистрация — пригласите друзей в свою библиотеку

  • :outbox_tray: Отправка книг на ридер в один клик

  • :mobile_phone: Синхронизация с Kobo — прогресс чтения, закладки, заметки

  • :open_book: Чтение прямо в браузере (EPUB, PDF, MOBI и др.)

  • :eye: Гибкое скрытие контента — по категориям или пользовательским колонкам

  • :link: «Волшебная ссылка» (Magic Link) — вход без пароля (идеально для ридеров!)

  • :locked_with_key: OAuth 2.0 / OIDC — вход через Authelia, Google, Keycloak и другие
    (Про Authelia и Keycloak советую посмотреть видео у ProHomeLab)

  • :magnifying_glass_tilted_left: Продвинутый поиск и фильтрация — находите книги мгновенно

  • :globe_showing_europe_africa: Поддержка 20+ языков — включая русский!


:rocket: Уникальные автоматизированные функции CWA

А теперь — самое интересное! Вот что делает CWA по-настоящему уникальным:

  • :sparkles: Automatic Ingest Service — кидаете книги в папку → они сами попадают в библиотеку

  • :clockwise_vertical_arrows: Automatic Conversion Service — автоматическая конвертация в EPUB, MOBI и др.

  • :eyes::notebook_with_decorative_cover: Automatic Enforcement of Covers & Metadata — подтягивает недостающие обложки и данные

  • :card_index_dividers: Batch Editing & Deletion — редактируйте сотни книг за раз

  • :locked: Automated Back Up Service — резервные копии «из коробки»

  • :guide_dog: Automated Setup Experience — всё настраивается за пару кликов

  • :hammer: Automatic EPUB Fixer — чинит битые EPUB-файлы

  • :milky_way: Multi-Format Conversion — одна книга → сразу несколько форматов

  • :books::detective: Library Auto-Detect — сам находит вашу библиотеку Calibre

  • :round_pushpin::bar_chart: Server Stats Tracking — мониторинг ресурсов и производительности

  • :sun::crescent_moon: Dark/Light Mode — комфортное чтение в любое время суток

  • :bellhop_bell: Update Notifications — всегда в курсе новых версий

  • :zipper_mouth_face: Auto-Compression of Backups — экономия места на диске

  • :card_file_box: Additional Metadata Providers — больше источников для описаний

  • :open_book::high_voltage: KOReader Sync (KOSync) — синхронизация закладок и прогресса

  • :locked_with_key: Enhanced OAuth/OIDC — безопасный и гибкий вход


:spouting_whale: Мой docker-compose.yml

Я немного упростил официальный файл, так как не использую провайдер HARDCOVER — у моих книг есть какие-то метаданные и мне их хватает.

docker-compose.yml

services:
  # Container - Calibre Web Automated Application
  calibre-web-automated:
    image: crocodilestick/calibre-web-automated:V3.1.3
    container_name: Calibre-Web-Automated
    environment:
      - PUID=1026
      - PGID=100
      - TZ=Asia/Krasnoyarsk
      - CWA_PORT_OVERRIDE=8083
      - NETWORK_SHARE_MODE=false
      - DISABLE_LIBRARY_AUTOMOUNT=true
    volumes:
      - /volume1/docker/Calibre-Web-Automated/config:/config 
      - /volume1/docker/Calibre-Web-Automated/ingest:/cwa-book-ingest # Для добавления новых книг
      - /volume1/data/media/books/books:/calibre-library # Где будут храниться книги после добавления
      - /volume1/docker/Calibre-Web-Automated/plugins:/config/.config/calibre/plugins
    ports:
      - 8083:8083
    restart: unless-stopped

:package: Как я загрузил 50 000+ книг без ошибок

Когда я попытался скопировать всю коллекцию сразу в папку ingest, Synology выдал ошибку:

«Превышено ограничение на количество файлов. Используйте SMB или другой протокол»

Даже через SMB не получилось — система просто не справлялась с таким объёмом! :sweat_smile:

Решение?
Я создал папку ingest2, положил туда все книги, а через Планировщик задач Synology запустил скрипт, который постепенно переносит по 50 файлов за раз в настоящую папку ingest — чтобы CWA не перегружался.

Вот сам скрипт:

#!/bin/bash
SRC="/volume1/docker/Calibre-Web-Automated/ingest2"
DST="/volume1/docker/Calibre-Web-Automated/ingest"
# Проверяем, существуют ли директории
if [ ! -d "$SRC" ] || [ ! -d "$DST" ]; then
 echo "Ошибка: одна из директорий не существует."
 exit 1
fi
# Получаем список файлов (только файлы, не папки), сортируем по имени, берём первые 50
# Используем while + read для корректной обработки имён с пробелами
find "$SRC" -maxdepth 1 -type f -print0 | sort -z | head -z -n 50 | while IFS= read -r -d '' file; do
 filename=$(basename "$file")
 dest_file="$DST/$filename"
 # Проверяем, существует ли файл в целевой папке
 if [ ! -e "$dest_file" ]; then
   mv "$file" "$DST/"
   echo "Перемещён: $filename"
 else
   echo "Пропущен (уже существует): $filename"
 fi
done

Запускал его каждые 30 минут по расписанию — и через несколько дней вся библиотека спокойно и без ошибок перекочевала в CWA! :tada:


:incoming_envelope: Отправка книг на PocketBook по email

У меня старенький PocketBook, но у него есть отличная функция — получение книг по email.
CWA поддерживает отправку через SMTP — настройка заняла две минуты:

  • SMTP-сервер: smtp.yandex.ru

  • Порт: 465

  • SSL: включён :white_check_mark:

  • Логин и отправитель: ваш email в Яндексе

  • Получатель: ваш_пользователь@pbsync.com

Теперь я просто нажимаю «Отправить на ридер» — и книга приходит на PocketBook автоматически! :open_mailbox_with_raised_flag:


:speech_balloon: Заключение

CWA — это то, что я искал годами.

Он:

  • :white_check_mark: Импортирует книги

  • :white_check_mark: Конвертирует их в нужные форматы

  • :white_check_mark: Позволяет читать прямо в браузере

  • :white_check_mark: Отправляет на ридер в один клик

  • :white_check_mark: Делает резервные копии

  • :white_check_mark: Работает стабильно, без зависаний и ошибок

И самое главное — он просто работает.
Никаких танцев с бубном, никаких костылей…
(Ну, разве что мой скрипт — но это скорее фича, чем костыль :wink:)

:raising_hands: P.S. Я не использую ни одного плагина — и мне этого хватает!
Но если вы нашли крутые плагины, необычные настройки или лайфхаки — напишите в комментариях! Буду рад поэкспериментировать.

Всем удачного чтения и стабильных серверов! :books::sparkles:

11 лайков

О, прям интересно будем пробовать, это одно из немногих направлений пока слабо представлено в современном хоумлабинге

1 лайк

Здравствуйте, скажите для CWA нужна calibre?

Здравствуйте, нет CWA это самостоятельное приложение.

3 лайка

в runtipi в этом магазине https://github.com/subdee/tipi-store есть это приложение. Устанавливал от туда. Когда открываешь книгу в браузере для чтения выглядит так:

не знаете как исправить? я имею ввиду большие отступы со всех сторон.

К сожалению обход этой проблемы я не нашел. у меня так же если смотреть онлайн то появляются большие поля. Но как только я открываю скачанную книгу все сразу меняется.
Вот несколько примеров.

  1. Это книга открытая в Сафари
  2. И эта же книга уже открытая через приложение PocketBook

    Возьмем для примера приложение Яндекс. так как можно открыть и в браузере книгу и скачать открыв в этом же приложении. Разница сразу видна.
  3. Через Яндекс онлайн
  4. Через Яндекс скачанная

Какой же ты подарок ты сделал для меня. Как раз хотел для мамы поднять у себя OPDS поднять для её читалки на планшете.

А каким образом можно подложить библиотеку флибуста? У меня установлен XPenology

У меня не завелось - выдает ошибку

[cwa-auto-library] Service did not complete successfully (see errors above). Ending service…
no such table: settings
[cwa-auto-library]: ERROR: Could not update Calibre Web Database

Какие могут быть варианты решения?

Возможно что-то произошло при первом запуске контейнера и не корректно создались базы данных, app.db или cwa.db
Или может права на директорию config не выданы для docker и он просто не может эти файлы создать.
Расскажи подробнее как ты устанавливаешь? Через Контейнер менеджер, создаешь проект? У меня например если я указываю путь:

volumes:
      - /volume1/docker/Calibre-Web-Automated/config:/config

Мне нужно предварительно создать и Calibre-Web-Automated и config внутри иначе не заработает.

Не знаю как выглядит библиотека флибусты. У меня были библиотека LibRuSec и там было куча архивов в названии с непонятными номерами, внутри лежали книги.fb2. Я их просто распаковал в одну папку и закинул потом как писал выше в ingest чтоб CWA сама их перетаскивала в базу данных.

мой compose.yaml

services:

# Container - Calibre Web Automated Application

calibre-web-automated:
image: crocodilestick/calibre-web-automated:V3.1.4
container_name: Calibre-Web-Automated
environment:
- PUID=1026
- PGID=100
- TZ=Europe/Moscow
- NETWORK_SHARE_MODE=false
- DISABLE_LIBRARY_AUTOMOUNT=true
- CWA_PORT_OVERRIDE=8083
volumes:
- /volume1/docker/cwa/config:/config
- /volume1/docker/cwa/ingest:/cwa-book-ingest
- /volume2/All/library:/calibre-library
- /volume1/docker/cwa/plugins:/config/.config/calibre/plugins
ports:
- 8083:8083
restart: unless-stopped

в файловом приложении создал 4 папки - config, ingest, plugins по пути /volume1/docker/cwa и library. Стартую, порт 8083 вижу - он занят.

Почитал githab проекта - я не один такой, а в ответ на эти запросы тишина. Значит мне не подходит, раз такой расклад. Жаль

Права на чтение и запись выставлены на папки cwa и config?

у меня уже 7 контейнеров работает и этот должен тоже работать. Или это не факт?

Ну да, значит дело в чем-то другом :thinking:

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

Наверное достаточно бд библиотеки книг (Metadata.db) сохранять в определённое время, или какие то ещё бд есть в данном решении?

У меня есть app.db и cwa.db. Я просто бекаплю папку /config

Привет! Спасибо за пост, перешел с CW на СWA. У меня такой вопрос - при включенном брандмауэре не работает загрузка метаданных и отправка книг по электронной почте. Подскажите пожалуйста, как настроить?

Я скрипт придумал и запихал его в crontab.

Просто когда редачил БД Calibr софтом с компа, то сломал ее т.к сервер CWA не выключил :slight_smile:

Порты открыть
8083 - CWA
25 (587 465) - SMTP

У вас почта своя, или сервиса какого ?