paperless-ngx/images/paperless-ngx/Dockerfile

124 lines
3.6 KiB
Docker

# syntax=docker/dockerfile:labs
FROM python:3.11-alpine AS builder
ARG PAPERLESS_VERSION=[[ .paperless.version ]]
WORKDIR /opt
ADD https://github.com/paperless-ngx/paperless-ngx/releases/download/v${PAPERLESS_VERSION}/paperless-ngx-v${PAPERLESS_VERSION}.tar.xz /opt
RUN set -euxo pipefail &&\
apk --no-cache add \
git \
make \
cmake \
build-base \
gfortran \
mariadb-dev \
libpq-dev \
freetype-dev \
imagemagick-dev \
libxml2-dev \
openblas-dev \
qpdf-dev \
tar \
xz \
curl \
ca-certificates \
rdfind \
&&\
tar xvJf paperless-ngx-v${PAPERLESS_VERSION}.tar.xz &&\
rm -f paperless-ngx-v${PAPERLESS_VERSION}.tar.xz &&\
mv paperless-ngx paperless &&\
cd paperless &&\
python3 -m venv venv &&\
source venv/bin/activate &&\
pip --no-cache-dir install -r requirements.txt &&\
./src/manage.py collectstatic --no-input &&\
mkdir -p /usr/share/nltk_data &&\
python3 -c "import nltk; nltk.download('stopwords', download_dir='/usr/share/nltk_data')" &&\
python3 -c "import nltk; nltk.download('punkt', download_dir='/usr/share/nltk_data')" &&\
rdfind /opt
FROM python:3.11-alpine
MAINTAINER [[ .docker.maintainer ]]
ARG CARETAKERD_VERSION=1.0.8
ENV LANG=[[ .locale.lang ]] \
TZ=[[ .locale.tz ]] \
PAPERLESS_MODE=all-in-one \
PATH=/opt/paperless/venv/bin:${PATH} \
PAPERLESS_REDIS=redis://127.0.0.1:6379/0 \
PAPERLESS_DBENGINE=postgresql \
PAPERLESS_DBHOST=127.0.0.1 \
PAPERLESS_DBPORT=5432 \
PAPERLESS_DBNAME=paperless \
PAPERLESS_DBUSER=paperless \
PAPERLESS_DBPASS=paperless \
PAPERLESS_CONSUMPTION_DIR=/input \
PAPERLESS_CONSUMER_POLLING=60 \
PAPERLESS_DATA_DIR=/data \
PAPERLESS_MEDIA_ROOT=/data \
PAPERLESS_TRASH_DIR=/data/trash \
PAPERLESS_ADMIN_USER=admin \
PAPERLESS_ADMIN_PASSWORD=password \
PAPERLESS_STATICDIR=/opt/paperless/static \
PAPERLESS_FILENAME_FORMAT={created_year}/{created_month}/{title} \
PAPERLESS_SECRET_KEY=changeme \
PAPERLESS_URL=https://paperless.example.org \
PAPERLESS_OCR_LANGUAGE=fra \
PAPERLESS_TIME_ZONE=[[ .locale.tz ]] \
PAPERLESS_CONSUMER_DELETE_DUPLICATES=true \
PAPERLESS_CONSUMER_RECURSIVE=true \
PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=true \
PAPERLESS_CONSUMER_POLLING=60 \
PAPERLESS_WEBSERVER_WORKERS=1 \
PAPERLESS_BIND_ADDR=0.0.0.0 \
PAPERLESS_PORT=8994 \
PAPERLESS_ADMIN_USER=admin \
PAPERLESS_ADMIN_PASSWORD=admin \
PAPERLESS_ADMIN_EMAIL=admin@localhost
ADD https://git.lapiole.org/nomad/base_tools.git#master /
COPY --from=builder /opt /opt
COPY --from=builder /usr/share/nltk_data /usr/share/nltk_data
RUN set -euxo pipefail &&\
apk --no-cache add \
tini \
curl \
unpaper \
font-liberation \
tesseract-ocr \
tesseract-ocr-data-osd \
tesseract-ocr-data-eng \
tesseract-ocr-data-fra \
optipng \
libpq \
zbar \
poppler-utils \
gnupg \
imagemagick \
ghostscript \
qpdf \
leptonica \
libxml2 \
libmagic \
pngquant \
zlib \
openblas \
&&\
addgroup --gid 8994 paperless &&\
adduser --system --ingroup paperless --disabled-password --uid 8994 --home /opt/paperless --shell /sbin/nologin paperless &&\
mkdir -p /data /input &&\
chown paperless:paperless /data /input
COPY root/ /
COPY --from=[[ .docker.repo ]][[ .docker.base_images.alpine.image ]] /usr/local/bin/minit /usr/local/bin/minit
EXPOSE ${PAPERLESS_PORT}
USER paperless
ENTRYPOINT ["tini", "--", "/entrypoint.sh"]
CMD ["paperless"]