# syntax=docker/dockerfile:labs FROM python:3.11-alpine AS builder ARG PAPERLESS_VERSION=2.6.3 WORKDIR /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 \ &&\ curl -sSLO https://github.com/paperless-ngx/paperless-ngx/releases/download/v${PAPERLESS_VERSION}/paperless-ngx-v${PAPERLESS_VERSION}.tar.xz &&\ tar xvJf paperless-ngx-v${PAPERLESS_VERSION}.tar.xz &&\ rm 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 Daniel Berteaud ARG CARETAKERD_VERSION=1.0.8 ENV LANG=fr_FR.utf8 \ TZ=Europe/Paris \ 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=Europe/Paris \ 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=danielberteaud/alpine:24.3-1 /usr/local/bin/minit /usr/local/bin/minit EXPOSE ${PAPERLESS_PORT} USER paperless ENTRYPOINT ["tini", "--", "/entrypoint.sh"] CMD ["paperless"]