{"id":42489264,"url":"https://github.com/bookpauk/inpx-web","last_synced_at":"2026-01-28T11:47:28.299Z","repository":{"id":63096650,"uuid":"524922617","full_name":"bookpauk/inpx-web","owner":"bookpauk","description":"Веб-сервер для поиска по inpx-коллекции","archived":false,"fork":false,"pushed_at":"2024-08-29T10:45:49.000Z","size":1942,"stargazers_count":79,"open_issues_count":11,"forks_count":22,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-08-29T12:03:22.426Z","etag":null,"topics":["fb2","flibusta","inpx","librusec","webserver"],"latest_commit_sha":null,"homepage":"https://lib.omnireader.ru","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bookpauk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-15T09:14:04.000Z","updated_at":"2024-07-30T05:02:10.000Z","dependencies_parsed_at":"2024-03-25T10:26:58.181Z","dependency_job_id":"1631dceb-4f23-49a3-9ebc-212f90607cb6","html_url":"https://github.com/bookpauk/inpx-web","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/bookpauk/inpx-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookpauk%2Finpx-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookpauk%2Finpx-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookpauk%2Finpx-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookpauk%2Finpx-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bookpauk","download_url":"https://codeload.github.com/bookpauk/inpx-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookpauk%2Finpx-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28845097,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T10:53:21.605Z","status":"ssl_error","status_checked_at":"2026-01-28T10:53:20.789Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fb2","flibusta","inpx","librusec","webserver"],"created_at":"2026-01-28T11:47:26.920Z","updated_at":"2026-01-28T11:47:28.290Z","avatar_url":"https://github.com/bookpauk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"inpx-web\n========\n\nВеб-сервер для поиска по .inpx-коллекции.\n\nВыглядит следующим образом: [https://lib.omnireader.ru](https://lib.omnireader.ru)\n\n.inpx - индексный файл для импорта\\экспорта информации из базы данных сетевых библиотек\nв базу каталогизатора [MyHomeLib](https://alex80.github.io/mhl/)\nили [freeLib](http://sourceforge.net/projects/freelibdesign)\nили [LightLib](https://lightlib.azurewebsites.net)\n\n[Установка](#usage): просто поместить приложение `inpx-web` в папку с .inpx-файлом и файлами библиотеки (zip-архивами) и запустить.\n\nПо умолчанию, веб-сервер будет доступен по адресу [http://127.0.0.1:12380](http://127.0.0.1:12380)\n\nOPDS-сервер доступен по адресу [http://127.0.0.1:12380/opds](http://127.0.0.1:12380/opds)\n\nДля указания местоположения .inpx-файла или папки с файлами библиотеки, воспользуйтесь [параметрами командной строки](#cli).\nДополнительные параметры сервера настраиваются в [конфигурационном файле](#config).\n\n[Отблагодарить автора проекта](https://donatty.com/liberama)\n\n## \n* [Возможности программы](#capabilities)\n* [Использование](#usage)\n    * [Параметры командной строки](#cli)\n    * [Конфигурация](#config)\n    * [Удаленная библиотека](#remotelib)\n    * [Фильтр по авторам и книгам](#filter)\n    * [Настройка https с помощью nginx](#https)\n* [Сборка релизов](#build)\n* [Запуск без сборки релиза](#native_run)\n* [Разработка](#development)\n\n\u003ca id=\"capabilities\" /\u003e\n\n## Возможности программы\n- веб-интерфейс и OPDS-сервер\n- поиск по автору, серии, названию и пр.\n- скачивание книги, копирование ссылки или открытие в читалке\n- возможность указать рабочий каталог при запуске, а также расположение .inpx и файлов библиотеки\n- ограничение доступа по паролю\n- работа в режиме \"удаленная библиотека\"\n- фильтр авторов и книг при создании поисковой БД для создания своей коллекции \"на лету\"\n- подхват изменений .inpx-файла (периодическая проверка), автоматическое пересоздание поисковой БД\n- мощная оптимизация, хорошая скорость поиска\n- релизы под Linux, MacOS и Windows\n\n\u003ca id=\"usage\" /\u003e\n\n## Использование\nПоместите приложение `inpx-web` в папку с .inpx-файлом и файлами библиотеки и запустите.\nТам же, при первом запуске, будет создана рабочая директория `.inpx-web`, в которой хранится\nконфигурационный файл `config.json`, файлы базы данных, журналы и прочее.\n\nПо умолчанию веб-интерфейс будет доступен по адресу [http://127.0.0.1:12380](http://127.0.0.1:12380)\n\nOPDS-сервер доступен по адресу [http://127.0.0.1:12380/opds](http://127.0.0.1:12380/opds)\n\n\u003ca id=\"cli\" /\u003e\n\n### Параметры командной строки\nЗапустите `inpx-web --help`, чтобы увидеть список опций:\n```console\nUsage: inpx-web [options]\n\nOptions:\n  --help               Показать опции командной строки\n  --host=\u003cip\u003e          Задать имя хоста для веб сервера, по умолчанию: 0.0.0.0\n  --port=\u003cport\u003e        Задать порт для веб сервера, по умолчанию: 12380\n  --config=\u003cfilepath\u003e  Задать файл конфигурации, по умолчанию: \u003cdataDir\u003e/config.json\n  --data-dir=\u003cdirpath\u003e (или --app-dir) Задать рабочую директорию, по умолчанию: \u003cexecDir\u003e/.inpx-web\n  --lib-dir=\u003cdirpath\u003e  Задать директорию библиотеки (с zip-архивами), по умолчанию: там же, где лежит файл приложения\n  --inpx=\u003cfilepath\u003e    Задать путь к файлу .inpx, по умолчанию: тот, что найдется в директории библиотеки\n  --recreate           Принудительно пересоздать поисковую БД при запуске приложения\n  --unsafe-filter      Использовать небезопасный фильтр на свой страх и риск\n```\n\n\u003ca id=\"config\" /\u003e\n\n### Конфигурация\n\nПо умолчанию, при первом запуске в рабочей директории будет создан конфигурационный файл `config.json`.\nПри необходимости, можно настроить нужный параметр в этом файле вручную. Параметры командной\nстроки имеют больший приоритет, чем настройки из `config.json`.\n\n```js\n{\n    // рабочая директория приложения, аналог параметра командной строки --data-dir (или --app-dir)\n    // пустая строка: использовать значение по умолчанию - \u003cexecDir\u003e/.inpx-web\n    // где execDir - директория файла приложения\n    \"dataDir\": \"\",\n\n    // директория для хранения временных файлов\n    // пустая строка: использовать значение по умолчанию - \u003cdataDir\u003e/tmp\n    // специальное значение \"${OS}\" указывается для использования системного каталога:\n    // \"${OS}\" =\u003e \"\u003cos_temporary_dir\u003e/inpx-web\"\n    \"tempDir\": \"\",\n\n    // директория для хранения логов\n    // пустая строка: использовать значение по умолчанию - \u003cdataDir\u003e/logs\n    \"logDir\": \"\",\n\n    // директория библиотеки (с zip-архивами), аналог параметра командной строки --lib-dir\n    // пустая строка: использовать значение по умолчанию - директорию файла приложения (execDir)\n    \"libDir\": \"\",\n\n    // путь к файлу .inpx, аналог параметра командной строки --inpx\n    // пустая строка: использовать значение по умолчанию - inpx-файл, что найдется в директории библиотеки\n    \"inpx\": \"\",\n\n    // конфигурационный файл для фильтра по авторам и книгам (см. ниже)\n    // пустая строка: использовать значение по умолчанию - файл filter.json в директории файла конфигурации\n    \"inpxFilterFile\": \"\",\n\n    // разрешить(true)/запретить(false) перезаписывать файл конфигурации, если появились новые параметры для настройки\n    // файл перезаписывается с сохранением всех предыдущих настроек и с новыми по умолчанию\n    // бывает полезно при выходе новых версий приложения\n    \"allowConfigRewrite\": false,\n\n    // разрешить(true)/запретить(false) использовать небезопасный фильтр (см. ниже)\n    // аналог параметра командной строки --unsafe-filter\n    \"allowUnsafeFilter\": false,\n\n    // пароль для ограничения доступа к веб-интерфейсу сервера\n    // пустое значение - доступ без ограничений\n    \"accessPassword\": \"\",\n\n    // таймаут автозавершения сессии доступа к веб-интерфейсу (если задан accessPassword),\n    // при неактивности в течение указанного времени (в минутах), пароль будет запрошен заново\n    // 0 - отключить таймаут, время доступа по паролю не ограничено\n    \"accessTimeout\": 0,\n\n    // включить(true)/выключить(false) возможность расширенного поиска (раздел \"\u003c/\u003e\")\n    // расширенный поиск не оптимизирован, поэтому может сильно нагружать сервер\n    // чтобы ускорить поиск, увеличьте параметр dbCacheSize\n    \"extendedSearch\": true,\n\n    // содержимое кнопки-ссылки \"(читать)\", если не задано - кнопка \"(читать)\" не показывается\n    // пример: \"https://omnireader.ru/#/reader?url=${DOWNLOAD_LINK}\"\n    // на место ${DOWNLOAD_LINK} будет подставлена ссылка на скачивание файла книги\n    // пример: \"https://mydomain.ru/#/reader?url=http://127.0.0.1:8086${DOWNLOAD_URI}\"\n    // на место ${DOWNLOAD_URI} будут подставлены параметры (без имени хоста) из ссылки на скачивание файла книги\n    \"bookReadLink\": \"\",\n\n    // включить(true)/выключить(false) журналирование\n    \"loggingEnabled\": true,\n\n    // включить/выключить ежеминутный вывод в лог memUsage и loadAvg\n    \"logServerStats\": false,\n\n    // включить/выключить вывод в лог запросов и времени их выполнения\n    \"logQueries\": false,\n\n    // максимальный размер кеша каждой таблицы в БД, в блоках (требуется примерно 1-10Мб памяти на один блок)\n    // если надо кешировать всю БД, можно поставить значение от 1000 и больше\n    \"dbCacheSize\": 5,\n\n    // максимальный размер в байтах директории закешированных файлов в \u003cраб.дир\u003e/public-files\n    // чистка каждый час\n    \"maxFilesDirSize\": 1073741824,\n    \n    // включить(true)/выключить(false) серверное кеширование запросов на диске и в памяти\n    \"queryCacheEnabled\": true,\n\n    // размер кеша запросов в оперативной памяти (количество)\n    // 0 - отключить кеширование запросов в оперативной памяти\n    \"queryCacheMemSize\": 50,\n\n    // размер кеша запросов на диске (количество)\n    // 0 - отключить кеширование запросов на диске\n    \"queryCacheDiskSize\": 500,\n\n    // периодичность чистки кеша запросов на сервере, в минутах\n    // 0 - отключить чистку\n    \"cacheCleanInterval\": 60,\n\n    // периодичность проверки изменений .inpx-файла, в минутах\n    // если файл изменился, поисковая БД будет автоматически пересоздана\n    // 0 - отключить проверку\n    \"inpxCheckInterval\": 60,\n\n    // включить(true)/выключить(false) режим работы с малым количеством физической памяти на машине\n    // при включении этого режима, количество требуемой для создания БД памяти снижается примерно в 1.5-2 раза\n    // во столько же раз увеличивается время создания\n    \"lowMemoryMode\": false,\n\n    // включить(true)/выключить(false) полную оптимизацию поисковой БД\n    // ускоряет работу поиска, но увеличивает размер БД в 2-3 раза при импорте INPX\n    \"fullOptimization\": false,\n\n    // включить(true)/выключить(false) режим \"Удаленная библиотека\" (сервер)\n    \"allowRemoteLib\": false,\n\n    // включить(Object)/выключить(false) режим \"Удаленная библиотека\" (клиент)\n    // подробнее см. раздел \"Удаленная библиотека\" ниже\n    \"remoteLib\": false,\n\n    // настройки веб-сервера\n    // парамертр root указывает путь для кореневой страницы inpx-web\n    // например для \"root\": \"/library\", веб-интерфейс будет доступен по адресу http://127.0.0.1:12380/library\n    // root необходим при настройке reverse-proxy и встраивании inpx-web в уже существующий сервер\n    \"server\": {\n        \"host\": \"0.0.0.0\",\n        \"port\": \"12380\",\n        \"root\": \"\"\n    },\n\n    // настройки opds-сервера\n    // user, password используются для Basic HTTP authentication\n    // параметр root задает путь для доступа к opds-серверу\n    \"opds\": {\n        \"enabled\": true,\n        \"user\": \"\",\n        \"password\": \"\",\n        \"root\": \"/opds\"\n    },\n\n    // страница для скачивания свежего релиза\n    \"latestReleaseLink\": \"https://github.com/bookpauk/inpx-web/releases/latest\",\n\n    // api для проверки новой версии, \n    // пустая строка - отключить проверку выхода новых версий\n    \"checkReleaseLink\": \"https://api.github.com/repos/bookpauk/inpx-web/releases/latest\",\n\n    // настройки по умолчанию для веб-интерфейса\n    // устанавливаются при первой загрузке страницы в браузере\n    // дальнейшие изменения настроек с помощью веб-интерфейса уже сохраняются в самом браузере\n    \"uiDefaults\": {\n        \"limit\": 20, // результатов на странице\n        \"downloadAsZip\": false, // скачивать книги в виде zip-архива\n        \"showCounts\": true, // показывать количество\n        \"showRates\": true, // показывать оценки\n        \"showInfo\": true, // показывать кнопку (инфо)\n        \"showGenres\": true, // показывать жанры\n        \"showDates\": false, // показывать даты поступления\n        \"showDeleted\": false, // показывать удаленные\n        \"abCacheEnabled\": true, // кешировать запросы\n        \"langDefault\": \"\", // язык по умолчанию (например \"ru,en\")\n        \"showJson\": false, // показывать JSON (в расширенном поиске)\n        \"showNewReleaseAvailable\": true // уведомлять о выходе новой версии\n    }\n}\n```\n\n\u003ca id=\"remotelib\" /\u003e\n\n### Удаленная библиотека\n\nВ случае, когда необходимо физически разнести веб-интерфейс и библиотеку файлов на разные машины,\nприложение может работать в режиме клиент-сервер: веб-интерфейс, поисковый движок и поисковая БД на одной машине (клиент),\nа библиотека книг и .inpx-файл на другой (сервер).\n\nДля этого необходимо развернуть два приложения, первое из которых будет клиентом для второго.\n\nНа сервере правим `config.json`:\n```\n    \"accessPassword\": \"123456\",\n    \"allowRemoteLib\": true,\n```\n\nНа клиенте:\n```\n    \"remoteLib\": {\n    \t\"accessPassword\": \"123456\",\n        \"url\": \"ws://server.host:12380\"\n    },\n```\n\nЕсли сервер работает по протоколу `http://`, то указываем протокол `ws://`, а для `https://` соответственно `wss://`.\nПароль не обязателен, но необходим в случае, если сервер тоже \"смотрит\" в интернет, для ограничения доступа к его веб-интерфейсу.\nПри указании `\"remoteLib\": {...}` настройки командной строки --inpx и --lib-dir игнорируются,\nт.к. файлы .inpx-индекса и библиотеки используются удаленно.\n\n\u003ca id=\"filter\" /\u003e\n\n### Фильтр по авторам и книгам\n\nПри создании поисковой БД, во время загрузки и парсинга .inpx-файла, имеется возможность\nотфильтровать авторов и книги, задав определенные критерии. По умолчанию, для этого небходимо создать\nв директории конфигурационного файла (там же, где `config.json`) файл `filter.json` следующего вида:\n```json\n{\n  \"info\": {\n    \"collection\": \"Новое название коллекции\",\n    \"version\": \"1.0.0\"\n  },\n  \"filter\": \"(r) =\u003e r.del == 0\",\n  \"includeAuthors\": [\"Имя автора 1\", \"Имя автора 2\"],\n  \"excludeAuthors\": [\"Имя автора\"]\n}\n```\nПри фильтрации, авторы и их книги из `includeAuthors` будут оставлены, а из `excludeAuthors` исключены.\nИспользование совместно `includeAuthors` и `excludeAuthors` имеет мало смысла, поэтому для включения\nопределенных авторов можно использовать только `includeAuthors`:\n```json\n{\n  \"info\": {\n    \"collection\": \"Новое название коллекции\"\n  },\n  \"includeAuthors\": [\"Имя автора 1\", \"Имя автора 2\"]\n}\n```\nДля исключения:\n```json\n{\n  \"info\": {\n    \"collection\": \"Новое название коллекции\"\n  },\n  \"excludeAuthors\": [\"Имя автора 1\", \"Имя автора 2\"]\n}\n```\n\nПараметр `filter` используется для более гибкой фильтрации по атрибутам записей из .inpx.\nУберем все записи, помеченные как удаленные и исключим \"Имя автора 1\":\n```json\n{\n  \"info\": {\n    \"collection\": \"Новое название коллекции\"\n  },\n  \"filter\": \"(inpxRec) =\u003e inpxRec.del == 0\",\n  \"excludeAuthors\": [\"Имя автора 1\"]\n}\n```\nИспользование `filter` небезопасно, т.к. позволяет выполнить произвольный js-код внутри программы,\nпоэтому запуск приложения в этом случае должен сопровождаться дополнительным параметром командной строки `--unsafe-filter`\nили разрешением в конфиге `allowUnsafeFilter`.\nНазвания атрибутов inpxRec соответствуют названиям в нижнем регистре из структуры structure.info в .inpx-файле.\nФайл `filter.json` можно расположить где угодно, что задается параметром `inpxFilterFile` в конфиге.\n\u003ca id=\"https\" /\u003e\n\n### Настройка https с помощью nginx\nПроще всего настроить https с помощью certbot и проксирования в nginx (пример для debian-based linux):\n\n```sh\n#ставим nginx\nsudo apt install nginx\n```\n```\n#правим конфиг nginx\nserver {\n  listen 80;\n  server_name \u003cимя сервера\u003e;\n  set $inpx_web http://127.0.0.1:12380;\n\n  client_max_body_size 512m;\n  proxy_read_timeout 1h;\n\n  location / {\n    proxy_pass $inpx_web;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n  }\n}\n```\n```sh\n#загружаем новый конфиг\nsudo service nginx reload\n```\nДалее следовать инструкции установки https://certbot.eff.org/instructions?ws=nginx\u0026os=debianbuster\n\n\u003ca id=\"build\" /\u003e\n\n### Сборка релизов\nСборка только в среде Linux.\nНеобходима версия node.js не ниже 16.\n\nДля сборки linux-arm64 необходимо предварительно установить [QEMU](https://wiki.debian.org/QemuUserEmulation).\n\n```sh\ngit clone https://github.com/bookpauk/inpx-web\ncd inpx-web\nnpm i\nnpm run release\n```\n\nРезультат сборки будет доступен в каталоге `dist/release`\n\n\u003ca id=\"native_run\" /\u003e\n\n### Запуск без сборки релиза\nТ.к. сборщик pkg поддерживает не все платформы, то не всегда удается собрать релиз.\nОднако, можно скачать и запустить inpx-web нативным путем, с помощью nodejs.\nНиже пример для Ubuntu, для других линуксов различия не принципиальны:\n\n```sh\n# установка nodejs v16 и выше:\ncurl -s https://deb.nodesource.com/setup_16.x | sudo bash\nsudo apt install nodejs -y\n\n# подготовка\ngit clone https://github.com/bookpauk/inpx-web\ncd inpx-web\nnpm i\nnpm run build:client \u0026\u0026 node build/prepkg.js linux\n\n# удалим файл development-среды, чтобы запускался в production-режиме\nrm ./server/config/application_env\n\n# запуск inpx-web, тут же будет создан каталог .inpx-web\nnode server --app-dir=.inpx-web\n```\n\n\u003ca id=\"development\" /\u003e\n\n### Разработка\n```sh\nnpm run dev\n```\n\nСвязаться с автором проекта: [bookpauk@gmail.com](mailto:bookpauk@gmail.com)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookpauk%2Finpx-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbookpauk%2Finpx-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookpauk%2Finpx-web/lists"}