OPDS-сервис личной библиотеки

Личная OPDS-библиотека — это довольно хороший способ иметь под рукой чудовищное количество книг, не забивая ими память телефона. Доступ к самим сайтам часто могут закрыть, а вот доступ к домашнему серверу обычно есть почти всегда (форс-мажор со всеми этими «учениями» не в счёт). В сети есть довольно хороший и простой в установке скрипт FLibGoLite. А дома у меня есть маленькая железка на N100 с Proxmox на борту. На ней несколько контейнеров с различными нужными мне сервисами. Так как я всю жизнь с книгой, а последние 20+ лет это сначала КПК, потом телефон, идея постоянного доступа к библиотеке просто витает в воздухе. Всё оказалось очень даже просто и особых навыков не потребовало.

Приступим. Сразу оговорюсь, у себя я держу сайтик для личных нужд. И соответственно есть внешний адрес и доступ. Создаём контейнер с Debian. Делаем его стартующим при запуске. Выдаем ему адрес 192.168.88.28 Сначала стандарт

apt update && apt upgrade -y

Далее, будем работать под другим юзеров из-под sudo. Его и ставим

apt install sudo

Создаем юзера mic с паролем и второй командой добавляем его в группу sudo.

adduser mic

usermod -a -G sudo mic

Редактируем файл

nano /etc/sudoers

После строк

# User privilege specification
root    ALL=(ALL:ALL) ALL

добавляем одну строку:

mic   ALL=(ALL:ALL) ALL

Выходим из под root и заходим под юзером mic и скачиваем файл

wget https://github.com/vinser/flibgolite/releases/download/v2.2.4/flibgolite-linux-amd64

Для простоты переименуем файл и сделаем его исполняемым

mv flibgolite-linux-amd64 flibgolite

chmod +x flibgolite

Устанавливаем службу и запускаем ее

sudo ./flibgolite -service install

sudo ./flibgolite -service start

sudo ./flibgolite -service status

В ответ на последнюю команду у нас должен быть вывод

Status of the service: running

Теперь пойдем в контейнер с сайтом. Там всё делается средствами nginx, который и трудится в данном контейнере веб-сервером. В файле конфигурации добавим секцию для несуществующей директории, перенаправив запрос на нужный адрес и порт.

sudo nano /etc/nginx/sites-available/default

Добавляемая секция

location /opds {

proxy_pass   http://192.168.88.28:8085/opds;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

proxy_redirect default;

}

Проверяем конфигурацию

sudo nginx -t

Нам не надо, чтобы к нам просто заходил кто попало, поэтому защитим вход паролем

sudo apt install apache2-utils

sudo htpasswd -c /etc/nginx/htpasswd podarok66

Дважды вводим новый пароль и получаем юзера с паролем для личных нужд

New password:

Re-type new password:

Adding password for user podarok66

Теперь опять идем файл конфигурации nginx

sudo nano /etc/nginx/sites-available/default

Прямо перед элементом proxy_pass вставляем две строки.

auth_basic «Restricted»;

auth_basic_user_file /etc/nginx/htpasswd;

Причем строчка location /opds определяет область, в которой будет работать парольный вход.

Перезапускаем nginx и служба уже должна быть доступна по адресу http://наше_доменное_имя/opds через читалку. У меня это AlreaderX уже много лет. Если доступ нужен только изнутри, то nginx можно поставить на том же контейнере и секцию в конфиг добавить там же. Всё будет работать.

Дальше интересный момент. Объем загруженных архивов с книгами 500+ Гб. Загружаются они через торрент-клиент совсем другого контейнера. Это нормально, при каких-либо сбоях исправлять придется отдельный контейнер с минимумом повешенных на него задач. Остальное будет продолжать работать. Причем для архивов у меня определен отдельный диск на 1 Тб. Его нужно примонтировать к нашему контейнеру. Делаем через гипервизор. Перед началом останавливаем контейнер:

pct stop 108

Пробросить физически диск с хоста в контейнер Proxmox (на самом деле папку на хосте) можно в консоли хоста proxmox так:

pct set 108 -mp0 /books/stock,mp=/home/mic/books/stock

pct — Proxmox Container Toolkit, утилита для управления контейнерами

set — команда выбора контейнера

108 — номер контейнера

-mp0 — опция указывающая номер точки монтирования. Первая начинается с 0, потом 1, потом2 и так далее, если хотите несколько дисков пробросить в контейнер.

/books/stock — путь, куда у вас примонтирован диск (ну либо вы просто папку с хоста хотите пробросить в контейнер).

mp=/home/mic/books/stock — путь внутри контейнера, куда будет отображаться диск. Эту директорию надо предварительно создать, если её нет.
Запускаем контейнер:

pct start 108

После этого можно проверить. Для этого надо зайти в веб-морду проксмокса, далее выбрать наш контейнер — Resourses — и там будет виден новый пункт Mount Point. Хотя по идее смонтированный диск должен быть сразу виден в окружении контейнера, перезагружаться не надо, но у меня это не всегда срабатывало. Разбираться не стал, после вышеописанных действий с остановкой-запуском всё становилось как надо.

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

chmod 755 -R /books/stock

Ну вот, теперь скидываем на диск все архивы с книгами, сервис их довольно быстро индексирует (у меня скорость индексирования оказалась сравнима со скоростью копирования). И на этом можно начинать пользоваться личной библиотекой. Получаем доступ по адресу http://your_site/opds на читалке. Не забываем, что вход под паролем. Тонкости настройки FLibGoLite есть в соответствующем разделе на сайте авторов.

1 лайк