Создаем свою персональную домашнюю онлайн-библиотеку с OPDS -каталогом на Raspberry

Тут я расскажу о создании личной электронной библиотеки, чтобы было куда складывать приобретенные книги, и пользоваться OPDS каталогом в приложениях на гаджетах.
Что необходимо:

Собственно Raspberry Pi5, родной блок питания к ней на 5А, надежный usb-хаб с внешним питанием, два внешних диска и установленная система Raspbian OS.

На каких дисках хранить? Это зависит от Ваших аппетитов. Необходимо учесть, если будем качать большую библиотеку в архивах, то при добавлении в программу-каталогизатор архивы будут распакованы и сохранены в базу данных, при этом объем книг увеличивается в 1,5 — 2 раза.

Моя домашняя схема выглядит так:
1. Распберри пай 5 с системным USB3.0-HDD 320 ГБ. Не SDD, а именно HDD, зачем мне короткоживущие микросхемные диски? Тут главное не скорость, главное — надежность. Хотя, про скорость справедливости ради скажу, что мой HDD во встроенном в систему тесте на пригодность показал — PASS.

2. Установлена торрент-качалка transmission, диск для нее USB 3.0-HDD 1 ТБ, формат 2.5, питание получает от usb-хаба.

3. Установлена программа calibre, диск для библиотеки USB 3.0-HDD 2 ТБ, формат 3,5, питание 12в и 5в. 12в — подведено отдельным блоком питания на 5А, 5в получает от usb-хаба.

* надежности ради лучше подключать диски к малине через USB-хабы с отдельным БП, чтобы питание миникомпьютера не проседало. Путем долгих проб и ошибок мной были отвергнуты все доступные в магазинах устройства, т.к. даже в неподключенном к компьютеру состоянии они не могли нормально раскрутить шпиндели двух дисков. С «Озона» мне пришло вот это устройство, которое обеспечивает надежность питания и подключения.

4. Установлен Apache2, PHP 8.2 , composer и OPDS-сервер COPS.

5. Малина имеет надежное проводное подключение к интернету, её IP адрес известен.

*Если Вы не знаете что такое Ip адрес и где его найти — не беритесь за все тут сказанное, лучше для начала подтяните матчасть.

Итак, начнем.

Монтируем диски, важно, чтобы строка монтирования в fstab содержала «uid=www-data,gid=www-data» — чтобы потом сервер спокойно оперировал с данными на дисках.

sudo mkdir /mnt/books

sudo mkdir /mnt/data

sudo nano /etc/fstab

Вставляем туда:

UUID=8763927463827564 /mnt/books ntfs nofail,uid=www-data,gid=www-data,dmask=0007 0 0



UUID=9784657361548574 /mnt/data ntfs nofail,uid=www-data,gid=www-data,dmask=0007 0 0

Сохраняем файл: Ctrl+X, y, Enter. Перезагружаемся:

sudo reboot

Чтобы самому заходить на диски без проблем — добавьте вашего пользователя в группу www-data:

sudo adduser user www-data

Далее — последовательно по списку.

Устанавливаем Calibre

sudo apt install calibre

После установки Calibre запускаем через ярлык в приложениях (папка офис).

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

Добавляем путь к библиотеке:

/mnt/books/library

Добавляем несколько книг для пробы

Устанавливаем Apache2, PHP 8.2, git и composer:

sudo apt install apache2
sudo apt install git php8.2 php8.2-gd php8.2-cli php8.2-sqlite3 php8.2-intl php8.2-xml php8.2-mbstring php8.2-zip composer

Установим OPDS сервер COPS

Этот OPDS сервер перестал развиваться его создателем, а созданная им старая версия требует PHP 5.3, 5.4, 5.5, 5.6, 7.х . Но упавший флаг подхватили другие и дело продолжили — вот тут ссылка на свежую версию, поддерживающую PHP8.2.

Для установки COPS необходимо ввести несколько консольных команд:

sudo mkdir /var/www/html/ebooks



cd /var/www/html/ebooks



sudo git clone https://github.com/mikespub-org/seblucas-cops.git .



cd
sudo chown -R www-data:www-data /var/www/html/ebooks

Теперь создаем и редактируем конфигурационный файл:

sudo cp /var/www/html/ebooks/config/local.php.example /var/www/html/ebooks/config/local.php

Открываем созданный файл настроек local.php для редактирования:

sudo nano /var/www/html/ebooks/config/local.php

$config['calibre_directory'] = '/mnt/books/library';



$config['cops_title_default'] = "MyLibrary";

Сохраняем файл: Ctrl+X, y, Enter.

Настраиваем Apache2

sudo nano /etc/apache2/sites-available/ourserver.ru.conf

Вставляем:

Alias /ebooks "/var/www/html/ebooks"


<Directory /var/www/html/ebooks>


Require all granted


AllowOverride All
Options FollowSymLinks MultiViews


<IfModule mod_dav.c>


Dav off


</IfModule>


</Directory>

Сохраняем файл: Ctrl+X, y, Enter.

Включаем сайт:

sudo a2ensite ourserver.ru.conf


sudo systemctl reload apache2

Если все сделали правильно, то во Ip-адресу малины откроется тестовая страница браузера:

А по адресу: IP-адрес/ebooks — откроется сайт библиотеки.

OPDS-каталог будет доступен по адресу: IP-адрес/ebooks/index.php/feed

Теперь настроим защиту паролем сайта библиотеки при помощи базовой авторизации http. Открываем файл .htaccess в папке сервера COPS для правки:

sudo nano /var/www/html/ebooks/.htaccess

Вставляем туда внизу (или исправляем то, что есть):

AuthType Basic


AuthName "Access secure"


AuthUserFile /var/www/html/ebooks/.htpasswd


Require valid-user

Теперь создадим файл .htpasswd

sudo nano /var/www/html/ebooks/.htpasswd

добавляем туда login:password в виде одной строки, (пароль обязательно в хешированном виде, хэш пароля можно сделать по этой ссылке.).

Запись в файле паролей должна быть похожа на:

user:{SHA}3454dfthr5yghfhjbtgdfbr6y45hg=

Сохраняем файл: Ctrl+X, y, Enter.

Перезагружаем апач:

sudo systemctl reload apache2

Теперь ваш сайт библиотеки (если Вы планируете доступ из интернета) будет защищен авторизацией. Для простоты доступа логин и пароль можно интегрировать в адресную строку:

http://login:password@IP-адрес/ebooks

http://login:password@IP-адрес/ebooks/index.php/feed

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

На этом все.

Полезные ссылки:

https://pimylifeup.com/raspberry-pi-ebook-server/

https://github.com/mikespub-org/seblucas-cops?tab=readme-ov-file#readme

https://bewave.ru/blog/nastroyka-http-basic-auth-v-trekh-slovakh/

https://hostingcanada.org/htpasswd-generator/

Your email address will not be published. Required fields are marked *

*