Skip to content

Веб-сервер для поиска по inpx-коллекции

License

Notifications You must be signed in to change notification settings

SnipGhost/inpx-web

Repository files navigation

inpx-web

Веб-сервер для поиска по .inpx-коллекции. Выглядит это так: https://lib.omnireader.ru

.inpx - индексный файл для импорта\экспорта информации из базы данных сетевых библиотек в базу каталогизатора MyHomeLib или freeLib или LightLib

Просто поместите приложение inpx-web в папку с .inpx-файлом и файлами библиотеки (zip-архивами) и запустите. Сервер будет доступен по адресу http://127.0.0.1:12380

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

  • поиск по автору, серии, названию и пр.
  • скачивание книги, копирование ссылки или открытие в читалке
  • возможность указать рабочий каталог при запуске, а также расположение .inpx и файлов библиотеки
  • ограничение доступа по паролю
  • работа в режиме "удаленная библиотека"
  • фильтр авторов и книг при создании поисковой БД для создания своей коллекции "на лету"
  • подхват изменений .inpx-файла (периодическая проверка), автоматическое пересоздание поисковой БД
  • мощная оптимизация, хорошая скорость поиска
  • релизы под Linux и Windows

Поместите приложение inpx-web в папку с .inpx-файлом и файлами библиотеки и запустите. Там же, при первом запуске, будет создана рабочая директория .inpx-web, в которой хранится конфигурационный файл config.json, файлы базы данных, журналы и прочее.

По умолчанию сервер будет доступен по адресу http://127.0.0.1:12380

Запустите inpx-web --help, чтобы увидеть список опций:

Usage: inpx-web [options]

Options:
  --help              Показать опции командной строки
  --host=<ip>         Задать имя хоста для веб сервера, по умолчанию: 0.0.0.0
  --port=<port>       Задать порт для веб сервера, по умолчанию: 12380
  --app-dir=<dirpath> Задать рабочую директорию, по умолчанию: <execDir>/.inpx-web
  --lib-dir=<dirpath> Задать директорию библиотеки (с zip-архивами), по умолчанию: там же, где лежит файл приложения
  --inpx=<filepath>   Задать путь к файлу .inpx, по умолчанию: тот, что найдется в директории библиотеки
  --recreate          Принудительно пересоздать поисковую БД при запуске приложения

При первом запуске в рабочей директории будет создан конфигурационный файл config.json:

{
    // пароль для ограничения доступа к веб-интерфейсу сервера
    "accessPassword": "",

    // включить(true)/выключить(false) поиск по сериям и книгам
    // поиск по сериям и книгам не оптимизирован, поэтому может сильно нагружать сервер
    "extendedSearch": true,

    // содержимое кнопки-ссылки "(читать)", если не задано - кнопка "(читать)" не показывается
    // пример: "https://omnireader.ru/#/reader?url=${DOWNLOAD_LINK}"
    // на место ${DOWNLOAD_LINK} будет подставлена ссылка на скачивание файла книги
    "bookReadLink": "",

    // включить(true)/выключить(false) журналирование
    "loggingEnabled": true,

    // максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)
    // если надо кешировать всю БД, можно поставить значение от 1000 и больше
    "dbCacheSize": 5,

    // максимальный размер в байтах директории закешированных файлов в <раб.дир>/public/files
    // чистка каждый час
    "maxFilesDirSize": 1073741824,
    
    // включить(true)/выключить(false) кеширование запросов на сервере
    "queryCacheEnabled": true,

    // периодичность чистки кеша запросов на сервере, в минутах
    // 0 - отключить чистку
    "cacheCleanInterval": 60,

    // периодичность проверки изменений .inpx-файла, в минутах
    // если файл изменился, поисковая БД будет автоматически пересоздана
    // 0 - отключить проверку
    "inpxCheckInterval": 60,

    // включить(true)/выключить(false) режим работы с малым количеством физической памяти на машине
    // при включении этого режима, количество требуемой для создания БД памяти снижается примерно в 1.5-2 раза
    // во столько же раз увеличивается время создания
    "lowMemoryMode": false,

    // включить(true)/выключить(false) режим "Удаленная библиотека" (сервер)
    "allowRemoteLib": false,

    // включить(Object)/выключить(false) режим "Удаленная библиотека" (клиент)
    // подробнее см. раздел "Удаленная библиотека" ниже
    "remoteLib": false,

    // настройки веб-сервера
    "server": {
        "host": "0.0.0.0",
        "port": "12380"
    }
}

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

В случае, когда необходимо физически разнести веб-интерфейс и библиотеку файлов на разные машины, приложение может работать в режиме клиент-сервер: веб-интерфейс, поисковый движок и поисковая БД на одной машине (клиент), а библиотека книг и .inpx-файл на другой (сервер).

Для этого необходимо развернуть два приложения, первое из которых будет клиентом для второго.

На сервере правим config.json:

    "accessPassword": "123456",
    "allowRemoteLib": true,

На клиенте:

    "remoteLib": {
    	"accessPassword": "123456",
        "url": "ws://server.host:12380"
    },

Если сервер работает по протоколу http://, то указываем протокол ws://, а для https:// соответственно wss://. Пароль не обязателен, но необходим в случае, если сервер тоже "смотрит" в интернет, для ограничения доступа к его веб-интерфейсу. При указании "remoteLib": {...} настройки командной строки --inpx и --lib-dir игнорируются, т.к. файлы .inpx-индекса и библиотеки используются удаленно.

При создании поисковой БД во время загрузки и парсинга .inpx-файла, имеется возможность отфильтровать авторов и книги, задав определенные критерии. Для этого небходимо создать в рабочей директории (там же, где config.json) файл filter.json следующего вида:

{
  "info": {
    "collection": "Новое название коллекции",
    "structure": "",
    "version": "1.0.0"
  },
  "filter": "(r) => r.del == 0",
  "includeAuthors": ["Имя автора 1", "Имя автора 2"],
  "excludeAuthors": ["Имя автора"]
}

При создании поисковой БД, авторы и книги из includeAuthors будут добавлены, а из excludeAuthors исключены. Использование совместно includeAuthors и excludeAuthors имеет мало смысла, поэтому для включения определенных авторов можно использовать только includeAuthors:

{
  "info": {
    "collection": "Новое название коллекции"
  },
  "includeAuthors": ["Имя автора 1", "Имя автора 2"]
}

Для исключения:

{
  "info": {
    "collection": "Новое название коллекции"
  },
  "excludeAuthors": ["Имя автора 1", "Имя автора 2"]
}

Параметр filter используется для более гибкой фильтрации по атрибутам записей из .inpx. Уберем все записи, помеченные как удаленные и исключим "Имя автора 1":

{
  "info": {
    "collection": "Новое название коллекции"
  },
  "filter": "(inpxRec) => inpxRec.del == 0",
  "excludeAuthors": ["Имя автора 1"]
}

Использование filter небезопасно, т.к. позволяет выполнить произвольный js-код внутри программы, поэтому запуск приложения в этом случае должен сопровождаться дополнительным параметром командной строки --unsafe-filter. Названия атрибутов inpxRec соответствуют названиям в нижнем регистре из структуры structure.info в .inpx-файле.

Настройка https с помощью nginx

Проще всего настроить https с помощью certbot и проксирования в nginx (пример для debian-based linux):

#ставим nginx
sudo apt install nginx
#правим конфиг nginx
server {
  listen 80;
  server_name <имя сервера>;
  set $inpx_web http://127.0.0.1:12380;

  client_max_body_size 512m;
  proxy_read_timeout 1h;

  location / {
    proxy_pass $inpx_web;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}
#загружаем новый конфиг
sudo service nginx reload

Далее следовать инструкции установки https://certbot.eff.org/instructions?ws=nginx&os=debianbuster

Сборка только в среде Linux. Необходима версия node.js не ниже 16.

git clone https://github.com/bookpauk/inpx-web
cd inpx-web
npm i

Для платформы Windows

npm run build:win

Для платформы Linux

npm run build:linux

Результат сборки будет доступен в каталоге dist/linux|win в виде исполнимого (standalone) файла.

npm run dev

Связаться с автором проекта: [email protected]

About

Веб-сервер для поиска по inpx-коллекции

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 64.8%
  • Vue 35.2%