Calibre-Web – веб-интерфейс для доступа к библиотеке Calibre, не требующий для своей работы запуска десктопного варианта данной программы. Calibre-Web можно развернуть на сервере и через браузер читать, скачивать и управлять книгами из коллекции. Веб-интерфейс напоминает онлайн-каталог, где можно искать книги по названию, автору, серии, тегам, а также просматривать обложки и описания. У Calibre-Web есть поддержка нескольких пользователей с разными уровнями доступа, можно делать закладки, отслеживать прогресс чтения, оставлять отзывы. Сервис работает с форматами epub, mobi, pdf и другими. Имеет встроенный ридер прямо в браузере. В Calibre-Web поддерживается интеграция с устройствами вроде Kindle, возможность отправки книг по почте, подключение к OPDS-каталогу для чтения через внешние приложения.
Calibre-Web – это открытый проект, созданный на Python. Его часто используют для домашнего облака книг, чтобы из любой локации иметь доступ к своей библиотеке.
В статье разберём, как запустить Calibre-Web на виртуальном выделенном сервере, работающем под управлением Ubuntu или Debian.
Установка Python и Calibre-Web
Перед инсталляцией Calibre-Web необходимо установить интерпретатор Python. Для удобства и изоляции зависимостей рекомендуется при этом применять создание и активацию виртуального окружения (venv).
Поэтому сначала обновите списки пакетов в системе:
$ sudo apt update
После чего установите три базовых пакета:
python3
– интерпретатор Python 3, на котором работает приложение;python3-pip
– менеджер пакетов, с помощью которого устанавливаются зависимости из PyPI;python3-venv
– модуль для создания виртуальных окружений, позволяющий держать зависимости Calibre-Web отдельно от системных библиотек.
$ sudo apt install python3 python3-pip python3-venv
Затем в своей домашней директории создайте каталог для нового проекта Calibre-Web и переключитесь в него:
$ cd ~
$ mkdir calibre-web
$ cd calibre-web
Находясь в каталоге проекта, создайте виртуальное окружение, для которого используйте, например, директорию venv
:
$ python3 -m venv venv
Активируйте созданное виртуальное окружение:
$ source ~/calibre-web/venv/bin/activate
Следующей командой установите в активное окружение пакет Calibre-Web из репозитория PyPI:
$ pip install calibreweb
Как запустить Calibre-Web в качестве системного сервиса
Для того, чтобы приложение запускалось вместе с системой и не требовало никаких действий от администратора для своего старта, имеет смысл настроить работу приложения как системного сервиса. Это также позволит приложению работать в фоновом режиме, а администратору при необходимости управлять сервисом, используя систему инициализации systemd
.
Чтобы запустить Calibre-Web в качестве системного сервиса, создайте для него специальный юнит-файл:
$ sudo nano /etc/systemd/system/calibre-web.service
Скопируйте в юнит-файл следующие строки:
[Unit]
Description=Calibre-Web Service
After=network.target
[Service]
User=your-user
Group=your-user
ExecStart=/home/your-user/calibre-web/venv/bin/cps
Restart=always
[Install]
WantedBy=multi-user.target
Обратите внимание на параметр ExecStart
, который содержит команду для запуска приложения. При установке пакета Calibre-Web в нашем случае файл, запускающий приложение, был скопирован в директорию /home/your-user/calibre-web/venv/bin/
. Чтобы узнать место расположения файла cps
, который запускает Calibre-Web, выполните команду:
$ which cps
Вывод команды вставьте в юнит-файл в качестве значения параметра ExecStart
.

Закройте юнит-файл с сохранением изменений и обновите конфигурацию systemd
, чтобы применить внесённые изменения:
$ sudo systemctl daemon-reload
Затем запустите новую службу:
$ sudo systemctl start calibre-web
Установите её в автозагрузку:
$ sudo systemctl enable calibre-web
Чтобы убедиться в том, что служба работает штатно, выведите на экран её текущее состояние:
$ systemctl status calibre-web
Вывод команды не должен содержать каких-либо ошибочных сообщений.

Чтобы проверить работоспособность Calibre-Web, необходимо сначала открыть доступ к серверу для TCP-порта 8083, на котором работает веб-интерфейс. Для этого добавьте в брандмауэр UFW соответствующее разрешающее правило:
$ sudo ufw allow 8083/tcp
Затем откройте браузер и перейдите на http://X.X.X.X:8083
, заменив X.X.X.X
на IP-адрес вашего виртуального сервера. В результате браузер должен открыть для вас веб-интерфейс Calibre-Web.

Для авторизации в Calibre-Web при первом подключении используйте логин admin
и пароль admin123
.
Как защитить Calibre-Web при помощи реверс-прокси и протокола HTTPS
Поскольку Calibre-Web сам по себе не умеет напрямую работать с безопасными соединениями и защитой на уровне веб-сервера, его, как правило, помещают за реверс-прокси. Такой подход решает сразу несколько задач. Во-первых, обратный прокси принимает запросы на стандартном TCP-порту и перенаправляет их во внутренний, на котором работает Calibre-Web. Тем самым, реверс-прокси скрывает прямой доступ к приложению. Во-вторых, именно реверс-прокси занимается выпуском и продлением TLS-сертификатов, например, через центр сертификации Let’s Encrypt, а значит, позволяет включить HTTPS. Шифрование соединения через HTTPS делает невозможным перехват логинов, паролей и другой передаваемой информации злоумышленниками, тем более, что в нашем случае доступ к библиотеке осуществляется через интернет.
В качестве обратного прокси довольно удобно использовать специально настроенный веб-сервер Caddy. Caddy автоматически управляет HTTPS через встроенную поддержку Let’s Encrypt. При этом Caddy сам обновляет сертификаты, и прост в настройке благодаря лаконичному конфигурационному файлу. Также Caddy умеет проксировать запросы, балансировать нагрузку и добавлять базовую защиту без необходимости настраивать его вручную.
Для установки на сайт TLS-сертификатов от Let’s Encrypt необходимо настроить доступ к сайту по его доменному имени. Если веб-ресурс доступен только по своему IP-адресу, он не сможет пройти проверку валидности в Let’s Encrypt и, следовательно, не получит TLS-сертификат. Поэтому предварительно нужно привязать к IP-адресу сервера принадлежащее вам доменное имя. Делается это при помощи специальной DNS-записи – A-записи. Такую настройку можно осуществить либо на сайте-регистраторе вашего домена, либо во вкладке Домены
на сайте RUVDS.

Кроме того, необходимо открыть доступ к серверу для протоколов HTTP и HTTPS. HTTPS будет применяться для доступа непосредственно к веб-интерфейсу приложения, а HTTP используется центром сертификации для проверки валидности доменного имени. Чтобы открыть доступ для HTTP и HTTPS, добавьте в брандмауэр UFW соответствующие разрешающие правила:
$ sudo ufw allow http
$ sudo ufw allow https
Установка Caddy
Для установки Caddy потребуются следующие пакеты:
curl
– утилита командной строки, которая понадобится для загрузки файлов из сети;gpg
– инструмент для шифрования, подписи и проверки файлов с помощью криптографии, который будет нужен для проверки подлинности GPG-ключей пакетов.
$ sudo apt install curl gpg
По окончании установки пакетов загрузите GPG-ключ репозитория Caddy:
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
Затем добавьте в систему репозиторий Caddy для последующей установки веб-сервера при помощи пакетного менеджера APT:
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Чтобы система узнала о добавлении нового репозитория, обновите списки пакетов:
$ sudo apt update
После чего запустите установку веб-сервера Caddy:
$ sudo apt install caddy
При инсталляции в системе создаётся новая служба – caddy
. Данная служба сразу же запускается и устанавливается в автозагрузку. Проверить корректность установки веб-сервера можно при помощи вывода на экран текущего состояния службы caddy
:
$ systemctl status caddy
Вывод команды не должен содержать сообщений о каких-либо ошибках.

Настройка реверс-прокси
Настройка веб-сервера Caddy для работы в качестве обратного прокси заключается во внесении изменений в его основной конфигурационный файл:
$ sudo nano /etc/caddy/Caddyfile
Если вы планируете использовать Caddy исключительно как реверс-прокси, приведите содержимое файла к виду:
your-site-name.ru {
reverse_proxy localhost:8083
}
В данном случае замените your-site-name.ru
на доменное имя, предназначенное для доступа к Calibre-Web.
После внесения изменений сохраните их, закройте файл и перезапустите службу caddy
:
$ sudo systemctl restart caddy
После чего в браузере перейдите на веб-страницу Calibre-Web, используя её доменное имя.

Сообщение вида Подключение защищено
в навигационной строке браузера свидетельствует об осуществлении подключения с использованием протокола HTTPS.
И поскольку TCP-порт 8083 с этого момента будет применяться только для внутреннего взаимодействия между веб-приложением и обратным прокси, доступ к серверу по порту 8083 можно закрыть. Для чего из брандмауэра удалите соответствующее разрешающее правило:
$ sudo ufw delete allow 8083/tcp