From bda75a85f29cd233a666465e5b3505c9bf9cdfe9 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 4 Apr 2024 18:27:11 +0700 Subject: [PATCH 1/5] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c325110..c8ed351 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Options: // пустая строка: использовать значение по умолчанию - inpx-файл, что найдется в директории библиотеки "inpx": "", - // конфигурационный файл для фильра по авторам и книгам (см. ниже) + // конфигурационный файл для фильтра по авторам и книгам (см. ниже) // пустая строка: использовать значение по умолчанию - файл filter.json в директории файла конфигурации "inpxFilterFile": "", From 54ec73f8fe2a2fc6fb3dc80d0531a3d090c8ea84 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 4 Apr 2024 18:38:01 +0700 Subject: [PATCH 2/5] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/config/index.js b/server/config/index.js index fc170e1..3f21777 100644 --- a/server/config/index.js +++ b/server/config/index.js @@ -52,7 +52,7 @@ class ConfigManager { return instance; } - async init(tempDataDir, configFile) { + async init(defaultDataDir, configFile) { if (this.inited) throw new Error('already inited'); @@ -69,14 +69,14 @@ class ConfigManager { this.branchConfigFile = __dirname + `/${this.branch}.js`; const config = require(this.branchConfigFile); - if (!tempDataDir) { - tempDataDir = `${config.execDir}/.${config.name}`; + if (!defaultDataDir) { + defaultDataDir = `${config.execDir}/.${config.name}`; } if (configFile) { config.configFile = path.resolve(configFile); } else { - config.configFile = `${tempDataDir}/config.json`; + config.configFile = `${defaultDataDir}/config.json`; } this._config = config; From 4aeb260d28cb70479e4c30fff8125ffc7cc15260 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 4 Jun 2024 20:07:08 +0700 Subject: [PATCH 3/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3:=20=D0=B2=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D1=8F=201.5.7=20=D0=BD=D0=B5=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?(#32)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/config/index.js b/server/config/index.js index 3f21777..307ac66 100644 --- a/server/config/index.js +++ b/server/config/index.js @@ -76,6 +76,7 @@ class ConfigManager { if (configFile) { config.configFile = path.resolve(configFile); } else { + await fs.ensureDir(defaultDataDir); config.configFile = `${defaultDataDir}/config.json`; } From 718204c2a8ec2dedf247743b003e9ca1611b561d Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 4 Jun 2024 20:08:04 +0700 Subject: [PATCH 4/5] v1.5.8 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94eead9..b940eec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "inpx-web", - "version": "1.5.7", + "version": "1.5.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "inpx-web", - "version": "1.5.7", + "version": "1.5.8", "hasInstallScript": true, "license": "CC0-1.0", "dependencies": { diff --git a/package.json b/package.json index 0b78227..74fc7f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "inpx-web", - "version": "1.5.7", + "version": "1.5.8", "author": "Book Pauk ", "license": "CC0-1.0", "repository": "bookpauk/inpx-web", From e910bc30ae61ac4ca57afe00ca50f260eb2adec5 Mon Sep 17 00:00:00 2001 From: Igor Kanyuka Date: Sat, 29 Jul 2023 13:51:08 +0000 Subject: [PATCH 5/5] Add ability to run in docker closes #16 --- Dockerfile | 30 ++++++++++++++++++++++++++++++ README.md | 20 ++++++++++++++++++++ docker_entrypoint.sh | 11 +++++++++++ 3 files changed, 61 insertions(+) create mode 100644 Dockerfile create mode 100755 docker_entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ce7d9dd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM node:20-alpine as build + +WORKDIR /app +ENV PATH /app/node_modules/.bin:$PATH +COPY .babelrc .eslintrc nodemon.json package-lock.json package.json README.md ./ +COPY build ./build/ +COPY client ./client/ +COPY server ./server/ + +RUN apk add zip +RUN npm install +RUN npm run build:client +RUN node build/prepkg.js linux +RUN pkg -t node18-linux-x64 -C Brotli --options max-old-space-size=4096,expose-gc -o dist/linux/inpx-web . + +# Build the prod image +FROM alpine:latest + +# Move to /dist directory as the place for resulting binary folder +WORKDIR /app +RUN apk add libgcc libstdc++ gcompat curl +RUN mkdir -m 0777 data +COPY docker_entrypoint.sh entrypoint.sh +COPY --from=build /app/dist/linux/inpx-web . + +EXPOSE 12380 + +HEALTHCHECK CMD curl --fail http://localhost:12380 || exit 1 + +ENTRYPOINT [ "/app/entrypoint.sh" ] diff --git a/README.md b/README.md index c8ed351..3af254c 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ OPDS-сервер доступен по адресу [http://127.0.0.1:12380/opd [Отблагодарить автора проекта](https://donatty.com/liberama) +## ## * [Возможности программы](#capabilities) * [Использование](#usage) @@ -32,6 +33,7 @@ OPDS-сервер доступен по адресу [http://127.0.0.1:12380/opd * [Сборка релизов](#build) * [Запуск без сборки релиза](#native_run) * [Разработка](#development) +* [Запуск в docker](#docker) @@ -410,4 +412,22 @@ node server --app-dir=.inpx-web npm run dev ``` + + +### Запуск в docker + +Сборка: +```sh +docker build -t inpx-web . +``` + +Запуск: +```sh +docker run -v /path/to/library:/library:ro --user=1000 -p 12380:12380 inpx-web +``` + +- В этом случае база данных и конфигурация будут пересоздаваться при каждом запуске. Для того, что сделать конфигурацию персистентной примонтируйте каталог в /app/data добавлением параметра в docker run: `-v /path/to/app_data:/app_data` +- Использование индекса, находящегося не в директории с библиотекой - передайте в docker run: `-v /path/to/index/flibusta.inpx:/app/index.inpx:ro -e INDEX_FILE=/app/index.inpx` +- Если используется персистентная конфигурация (см выше), но нужно перечитывать индекс при каждом запуске передайте в docker run: `-e RECREATE=1` + Связаться с автором проекта: [bookpauk@gmail.com](mailto:bookpauk@gmail.com) \ No newline at end of file diff --git a/docker_entrypoint.sh b/docker_entrypoint.sh new file mode 100755 index 0000000..a8a8bc8 --- /dev/null +++ b/docker_entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +OPTS="--lib-dir=/library --app-dir=/app/data" + +[ -z ${INDEX_FILE+x} ] || OPTS="$OPTS --inpx=\"${INDEX_FILE}\"" +[ -z ${RECREATE+x} ] || OPTS="$OPTS --recreate" + +echo Starting ./inpx-web $OPTS +./inpx-web $OPTS \ No newline at end of file