Личная 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 есть в соответствующем разделе на сайте авторов.