Skip to content

Commit 977eeb3

Browse files
committed
Add ability to run in docker
closes #16
1 parent 84843fb commit 977eeb3

File tree

5 files changed

+107
-46
lines changed

5 files changed

+107
-46
lines changed

Dockerfile

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM node:20-alpine as build
2+
3+
WORKDIR /app
4+
ENV PATH /app/node_modules/.bin:$PATH
5+
COPY .babelrc .eslintrc nodemon.json package-lock.json package.json README.md ./
6+
COPY build ./build/
7+
COPY client ./client/
8+
COPY server ./server/
9+
10+
RUN apk add zip
11+
RUN npm install --omit=dev
12+
RUN npm run build:client
13+
RUN node build/prepkg.js linux
14+
RUN pkg -t node18-linux-x64 -C GZip --options max-old-space-size=4096,expose-gc -o dist/linux/inpx-web .
15+
16+
# Build the prod image
17+
FROM alpine:latest
18+
19+
# Move to /dist directory as the place for resulting binary folder
20+
WORKDIR /app
21+
RUN apk add libgcc libstdc++ gcompat
22+
RUN mkdir -m 0777 data
23+
COPY docker_entrypoint.sh entrypoint.sh
24+
COPY --from=build /app/dist/linux/inpx-web .
25+
26+
EXPOSE 12380
27+
28+
HEALTHCHECK CMD curl --fail http://localhost:12380 || exit 1
29+
30+
ENTRYPOINT [ "/app/entrypoint.sh" ]

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ OPDS-сервер доступен по адресу [http://127.0.0.1:12380/opd
2121

2222
[Отблагодарить автора проекта](https://donatty.com/liberama)
2323

24+
##
2425
##
2526
* [Возможности программы](#capabilities)
2627
* [Использование](#usage)
@@ -32,6 +33,7 @@ OPDS-сервер доступен по адресу [http://127.0.0.1:12380/opd
3233
* [Сборка релизов](#build)
3334
* [Запуск без сборки релиза](#native_run)
3435
* [Разработка](#development)
36+
* [Запуск в docker](#docker)
3537

3638
<a id="capabilities" />
3739

@@ -369,4 +371,22 @@ node server --app-dir=.inpx-web
369371
npm run dev
370372
```
371373

374+
<a id="docker" />
375+
376+
### Запуск в docker
377+
378+
Сборка:
379+
```sh
380+
docker build -t inpx-web .
381+
```
382+
383+
Запуск:
384+
```sh
385+
docker run -v /path/to/library:/library:ro --user=1000 -p 12380:12380 inpx-web
386+
```
387+
388+
- В этом случае база данных и конфигурация будут пересоздаваться при каждом запуске. Для того, что сделать конфигурацию персистентной примонтируйте каталог в /app/data добавлением параметра в docker run: `-v /path/to/app_data:/app_data`
389+
- Использование индекса, находящегося не в директории с библиотекой - передайте в docker run: `-v /path/to/index/flibusta.inpx:/app/index.inpx:ro -e INDEX_FILE=/app/index.inpx`
390+
- Если используется персистентная конфигурация (см выше), но нужно перечитывать индекс при каждом запуске передайте в docker run: `-e RECREATE=1`
391+
372392
Связаться с автором проекта: [[email protected]](mailto:[email protected])

docker_entrypoint.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
OPTS="--lib-dir=/library --app-dir=/app/data"
6+
7+
[ -z ${INDEX_FILE+x} ] || OPTS="$OPTS --inpx=\"${INDEX_FILE}\""
8+
[ -z ${RECREATE+x} ] || OPTS="$OPTS --recreate"
9+
10+
echo Starting ./inpx-web $OPTS
11+
./inpx-web $OPTS

package-lock.json

Lines changed: 25 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,62 +17,62 @@
1717
"build:client-dev": "webpack --config build/webpack.dev.config.js",
1818
"build:all": "npm run build:linux && npm run build:win && npm run build:macos && npm run build:linux-arm64",
1919
"release": "npm run build:all && node build/release.js",
20-
"postinstall": "npm run build:client-dev"
20+
"postinstall": "npm run build:client"
2121
},
2222
"bin": "server/index.js",
2323
"pkg": {
2424
"scripts": "server/config/*.js",
2525
"assets": "dist/public.json"
2626
},
2727
"devDependencies": {
28+
},
29+
"dependencies": {
2830
"@babel/core": "^7.20.5",
2931
"@babel/eslint-parser": "^7.19.1",
3032
"@babel/eslint-plugin": "^7.19.1",
3133
"@babel/plugin-proposal-decorators": "^7.20.5",
3234
"@babel/preset-env": "^7.20.2",
35+
"@quasar/extras": "^1.15.6",
3336
"@vue/compiler-sfc": "^3.2.22",
37+
"axios": "^0.27.2",
3438
"babel-loader": "^9.1.0",
39+
"chardet": "^1.5.0",
3540
"copy-webpack-plugin": "^11.0.0",
3641
"css-loader": "^6.7.2",
3742
"css-minimizer-webpack-plugin": "^4.2.2",
38-
"eslint": "^8.28.0",
39-
"eslint-plugin-vue": "^9.8.0",
40-
"html-webpack-plugin": "^5.5.0",
41-
"mini-css-extract-plugin": "^2.7.1",
42-
"pkg": "^5.8.0",
43-
"showdown": "^2.1.0",
44-
"terser-webpack-plugin": "^5.3.6",
45-
"vue-eslint-parser": "^9.1.0",
46-
"vue-loader": "^17.0.1",
47-
"vue-style-loader": "^4.1.3",
48-
"webpack": "^5.75.0",
49-
"webpack-cli": "^5.0.0",
50-
"webpack-dev-middleware": "^6.0.1",
51-
"webpack-hot-middleware": "^2.25.3",
52-
"webpack-merge": "^5.8.0"
53-
},
54-
"dependencies": {
55-
"@quasar/extras": "^1.15.6",
56-
"axios": "^0.27.2",
57-
"chardet": "^1.5.0",
5843
"dayjs": "^1.11.6",
5944
"express": "^4.18.2",
6045
"express-basic-auth": "^1.2.1",
46+
"eslint": "^8.28.0",
47+
"eslint-plugin-vue": "^9.8.0",
6148
"fs-extra": "^10.1.0",
6249
"he": "^1.2.0",
50+
"html-webpack-plugin": "^5.5.0",
6351
"iconv-lite": "^0.6.3",
6452
"jembadb": "^5.1.7",
6553
"localforage": "^1.10.0",
6654
"lodash": "^4.17.21",
55+
"mini-css-extract-plugin": "^2.7.1",
6756
"minimist": "^1.2.7",
6857
"node-stream-zip": "^1.15.0",
58+
"pkg": "^5.8.0",
6959
"quasar": "^2.10.2",
7060
"safe-buffer": "^5.2.1",
61+
"showdown": "^2.1.0",
62+
"terser-webpack-plugin": "^5.3.6",
7163
"vue": "^3.2.37",
64+
"vue-loader": "^17.0.1",
7265
"vue-router": "^4.1.6",
7366
"vuex": "^4.1.0",
67+
"vue-eslint-parser": "^9.1.0",
7468
"vuex-persist": "^3.1.3",
69+
"vue-style-loader": "^4.1.3",
7570
"ws": "^8.11.0",
71+
"webpack": "^5.75.0",
72+
"webpack-cli": "^5.0.0",
73+
"webpack-dev-middleware": "^6.0.1",
74+
"webpack-hot-middleware": "^2.25.3",
75+
"webpack-merge": "^5.8.0",
7676
"yazl": "^2.5.1"
7777
}
7878
}

0 commit comments

Comments
 (0)