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

Сервер предоставляет простой и удобный браузер, с помощью которого можно искать и загружать книги в библиотеку. Calibre имеет простой встроенный сайт (с мобильной версией), который позволяет загружать книги прямо в ридер.

Предпосылки

  • Сервер с Ubuntu 22.04 в качестве ОС
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo

Обновите систему

Свежая установка Ubuntu 22.04 требует обновления пакетов до последних доступных версий.

1
sudo apt-get update -y && sudo apt-get upgrade -y

Установка Calibre

Пакет Calibre можно найти в стандартном репозитории системы, но на сайте проекта размещена более современная версия.

Calibre часто обновляется, потому версии из репозитория системы быстро становятся устаревшими.

К счастью, разработчики Calibre упростили установку до одной команды. Чтобы установить пакет, нужно просто запустить на сервере следующую команду.

1
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin

Команда может выдать несколько предупреждений о неудачной интеграции настольного клиента, но их можно проигнорировать, поскольку вы устанавливаете Calibre на удаленном сервере.

Установка зависимостей

Команда calibredb управляет библиотекой Calibre. С её помощью можно добавлять и перемещать книги, извлекать метаданные, выбирать обложку и т.п.

У этой команды есть пара зависимостей, без которых она не будет работать: это ImageMagick и xvfb (позволяет запустить Calibre без дисплея).

Чтобы установить эти зависимости, нужно просто обновить индекс пакетов и запустить следующие команды.

1
2
3
4
sudo apt-get update
sudo apt-get install xvfb
sudo apt-get install libnss3
sudo apt-get install imagemagick

Создание библиотеки

Сервер почти готов к запуску. Добавьте несколько книг в библиотеку, чтобы посмотреть, как это работает. Рассмотрим два способа:

  1. Добавление электронных книг напрямую.
  2. Импортирование готовой библиотеки Calibre (особенно полезно, если вы уже используете Calibre в качестве настольного клиента).

Создайте пользователя для запуска

1
sudo useradd -d /home/calibre -m calibre

Загрузка книги

Для начала создайте каталог для библиотеки Calibre в домашнем каталоге.

1
mkdir -p ~/calibre-library/toadd

Теперь в домашнем каталоге есть два каталога. Первый, ~/calibre-library, для автоматической загрузки Calibre. Во второй каталог, toadd, вы сможете добавлять книги вручную.

Для работы загрузите несколько книг (например, с Gutenberg).

Загрузите книгу:

1
wget -O /calibre-library/toadd/book.mobi https://gutenberg.org/ebooks/1112.kindle.noimages

Чтобы правильно добавлять книги, Calibre использует расширения. Флаг –О позволяет выбрать более удобное имя файла. Если вы загрузили книгу в другом формате (например, в .epub), вам нужно указать в команде соответствующее расширение.

Добавление книги в базу Calibre

Теперь нужно добавить загруженные книги в базу Calibre с помощью команды calibredb и виртуального дисплея xvfb.

1
xvfb-run calibredb add ~/calibre-library/toadd/* --library-path ~/calibre-library

Символ звёздочки позволяет Calibre добавить все книги из каталога toadd в библиотеку (каталог calibre-library).

Команда может выдать ошибку из-за отсутствия обложек (файлы .mobi загружаются без картинок), однако это не помешает добавить книги в базу Calibre.

Теперь попробуйте запустить сервер:

1
calibre-server --with-library ~/calibre-library

Эта команда не вернёт никакого вывода, а просто останется в терминале. На данный момент это нормальное поведение. Теперь откройте браузер и перейдите по ссылке:

1
http://your_server_ip:8080

На экране появится главная страница библиотеки.

Перейдите по ссылке All books. Вы увидите в списке добавленные только что книги. Чтобы загрузить какую-либо книгу, нажмите Get.

Настройте Nginx в качестве обратного прокси

1
sudo apt-get -y install nginx

Создайте обратный конфигурацию прокси-сервера для Calibre.

1
sudo nano /etc/nginx/sites-available/calibre.conf

Заполните файл следующей конфигурацией.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
    server_name     my.domain.tld;
    listen          80;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Включите конфигурацию обратной прокси-сервера Calibre Nginx.

1
sudo ln -s /etc/nginx/sites-available/calibre.conf /etc/nginx/sites-enabled/calibre.conf

Проверка конфигурации и перезагрузите службу Nginx.

1
2
sudo nginx -t
sudo systemctl restart nginx.service

Загрузка готовой библиотеки Calibre

Если вы уже используете Calibre и у вас есть готовая библиотека, вы можете загрузить её на удалённый сервер.

Перейдите в папку библиотеки и найдите в ней файл metadata.db. Если такой файл существует, то библиотека не нуждается в дополнительной настройке.

Загрузите библиотеку на сервер. Затем запустите команду:

1
calibre-server --with-library ~/calibre-library

Теперь вся библиотека будет доступна на сервере. Чтобы добавить в неё новую книгу, поместите её в каталог toadd.

Перечислите содержимое библиотеки

Получите список всех книг в библиотеке.

1
2
3
calibredb list --with-library ~/calibre-library
id title                           authors             
1 The Tragedy of Romeo and Juliet William Shakespeare

Удалить книги из библиотеки

calibredb требует идентификационного номера для удаления книги. Например, удалить книгу ID 1:

1
calibredb remove 1 --with-library ~/calibre-library

Чтобы снова добавить книгу:

1
calibredb add book.mobi --with-library ~/calibre-library/toadd

Запуск Calibre в фоновом режиме

Теперь нужно перевести команду calibre-server в фоновый режим.

Используйте nano, чтобы создать новый файл сервиса.

1
sudo nano /etc/systemd/system/calibre-server.service

Добавьте следующее содержимое в calibre-server.service.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=Calibre Server
After=network.target

[Service]
Type=simple
User=calibre
Group=calibre
ExecStart=/opt/calibre/calibre-server --enable-local-write /home/calibre/calibre-library

[Install]
WantedBy=multi-user.target

Измените calibre и calibre на любого пользователя и группу, от которой вы хотите, чтобы сервер работал. Это должен быть тот же пользователь и группа, которым принадлежат файлы в папке библиотеки calibre. Обратите внимание, что обычно не рекомендуется запускать сервер с правами root. Также измените путь к папке библиотеки calibre в соответствии с вашей системой. При необходимости вы можете добавить несколько библиотек.

Сохраните и закройте сценарий.

Запустите сервер:

1
2
sudo systemctl enable calibre-server.service
sudo systemctl start calibre-server.service

Добавить аутентификацию

Добавьте аутентификацию, чтобы предотвратить несанкционированный доступ к библиотеке электронных книг.

Остановите сервер.

1
sudo systemctl stop calibre-server.service

Запустите скрипт управления пользователями:

1
calibre-server --manage-users

Следуйте инструкциям, чтобы сделать новый пользователь с именем calibreuser и выбрать безопасный пароль. Убедитесь, что вы видите сообщение подтверждения:

1
Пользователь calibreuser успешно создан!

Отредактируйте файл службы Calibre, чтобы включить аутентификацию.

1
sudo nano /etc/systemd/system/calibre-server.service

Заменить эту строку:

1
ExecStart=/usr/bin/calibre-server --enable-local-write /home/calibre/calibre-library

С участием:

1
ExecStart=/usr/bin/calibre-server --enable-auth --enable-local-write /home/calibre/calibre-library

Перезагрузите сервисные файлы с systemd и перезапустите службу.

1
2
sudo systemctl daemon-reload
sudo systemctl start calibre-server.service

Аутентификация теперь требуется для доступа к серверу.

Автоматическое добавление книг с помощью cron

Напишите простой cronjob для автоматического обновления библиотеки.

Например, команда будет проверять каталог toadd на наличие новых книг каждые 15 минут, добавлять (копировать) новые книги в библиотеку Calibre, а затем удалять исходный файл из каталога.

Чтобы создать cronjob, выполните:

1
sudo crontab -u calibre -e

Добавьте в конец файла:

1
*/15 * * * * xvfb-run calibredb add /home/calibre/calibre-library/toadd/ --recurse --library-path /home/calibre/calibre-library && rm -rf /home/calibre/calibre-library/toadd/*

Примечание: Результаты поиска в Calibre не сортируются по релевантности. Потому если вы вводите общий термин, пытаясь найти какую-то книгу, вы найдёте много других книг. Вы можете выполнять поиск по названию или по автору, а также сортировать результат в алфавитном порядке.

Запуск Calibre-Web

Calibre-Web - это веб-приложение, предоставляющее чистый интерфейс для просмотра, чтения и загрузки электронных книг, используя существующую базу данных Calibre.

Перед установкой Calibre-Web мы должны установить компонент: python3-pip

1
sudo apt install python3-pip python3-venv

Вы можете создать виртуальную среду, используя:

1
2
cd /opt/
python3 -m venv calibre-web-env

Активировать виртуальную среду:

1
source calibre-web-env/bin/activate

Мы выполняем установку Calibre-Web:

1
pip install calibreweb

Запуск Calibre-Web

1
cps

Теперь откройте браузер и перейдите по ссылке: http://your_server_ip:8083, указываем путь к каталогу с библиотекой /home/calibre/calibre-library (в которой должен располагаться файл metadata.db, используемый Calibre для хранения информации о книгах в библиотеке)

Логинимся с дефолтными admin:admin123. На экране появится главная страница библиотеки.

Запуск Calibre-Web в фоновом режиме

Теперь нужно перевести команду calibre-web в фоновый режим.

Используйте nano, чтобы создать новый файл сервиса.

1
sudo nano /etc/systemd/system/calibre-web.service

Добавьте следующее содержимое на calibre-web.service.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=Calibre-Web
After=network.target

[Service]
Type=simple
User=calibre
Group=calibre
ExecStart=/opt/calibre-web-env/bin/python3 /opt/calibre-web-env/bin/cps

[Install]
WantedBy=multi-user.target

Сохраните и закройте сценарий.

Запустите сервер:

1
2
3
sudo systemctl start calibre-web.service
sudo systemctl status calibre-web.service
sudo systemctl enable calibre-web.service

Настройте Nginx в качестве обратного прокси

1
sudo apt-get -y install nginx

Создайте обратный конфигурацию прокси-сервера для calibre-web.

1
sudo nano /etc/nginx/sites-available/calibre-web.conf

Заполните файл следующей конфигурацией.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
    server_name     my.domain.tld;
    listen          80;

    location / {
        proxy_pass http://127.0.0.1:8083;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Включите конфигурацию обратной прокси-сервера Calibre-Web Nginx.

1
sudo ln -s /etc/nginx/sites-available/calibre-web.conf /etc/nginx/sites-enabled/calibre-web.conf

Проверка конфигурации и перезагрузите службу Nginx.

1
2
sudo nginx -t
sudo systemctl restart nginx.service

Собственно на этом всё. Остается только у своего доменного регистратора прописать на используемый my.domain.tld требуемый ip-адрес, дождаться его делегирования, и можно открывать уже свой Calibre-Web в браузере.

Если вам понравился этот пост об установке Calibre и Calibre-Web на Ubuntu 22.04, поделитесь им с друзьями в социальных сетях. Спасибо.