diff --git a/Dockerfile b/Dockerfile index 2a689c98e..85eadc21e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,8 @@ COPY Pipfile* ./ #Dependencies RUN apt-get update \ - && apt-get -y --no-install-recommends install \ + && apt-get -y --no-install-recommends install \ + anacron \ build-essential \ curl \ ghostscript \ @@ -43,30 +44,38 @@ RUN apt-get update \ tesseract-ocr-spa \ tzdata \ unpaper \ - && pip install --upgrade pipenv \ + && pip install --upgrade pipenv supervisor \ && pipenv install --system --deploy \ && pipenv --clear \ && apt-get -y purge build-essential \ && apt-get -y autoremove --purge \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* \ + && mkdir /var/log/supervisord /var/run/supervisord -# # Copy application +# copy scripts +# this fixes issues with imagemagick and PDF +COPY scripts/imagemagick-policy.xml /etc/ImageMagick-6/policy.xml COPY scripts/gunicorn.conf.py ./ +COPY scripts/supervisord.conf /etc/supervisord.conf +COPY scripts/paperless-cron /etc/cron.daily/ +COPY scripts/docker-entrypoint.sh /sbin/docker-entrypoint.sh + +# copy app COPY src/ ./src/ COPY --from=frontend /usr/src/paperless/src-ui/dist/paperless-ui/ ./src/documents/static/ -RUN addgroup --gid 1000 paperless && \ - useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless && \ - chown -R paperless:paperless . +# add users, setup scripts +RUN addgroup --gid 1000 paperless \ + && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ + && chown -R paperless:paperless . \ + && chmod 755 /sbin/docker-entrypoint.sh \ + && chmod +x /etc/cron.daily/paperless-cron \ + && rm /etc/cron.daily/apt-compat /etc/cron.daily/dpkg WORKDIR /usr/src/paperless/src/ RUN sudo -HEu paperless python3 manage.py collectstatic --clear --no-input VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/consume", "/usr/src/paperless/export"] - -COPY scripts/docker-entrypoint.sh /sbin/docker-entrypoint.sh -RUN chmod 755 /sbin/docker-entrypoint.sh ENTRYPOINT ["/sbin/docker-entrypoint.sh"] - -CMD ["--help"] +CMD ["python3", "manage.py", "--help"] diff --git a/docker-compose.yml.example b/docker-compose.yml.example index 5c5123fd8..88936fb4c 100644 --- a/docker-compose.yml.example +++ b/docker-compose.yml.example @@ -1,4 +1,4 @@ -version: "3.8" +version: "3.4" services: db: image: postgres:13 @@ -27,23 +27,12 @@ services: - data:/usr/src/paperless/data - media:/usr/src/paperless/media - ./export:/usr/src/paperless/export + - ./consume:/usr/src/paperless/consume env_file: docker-compose.env environment: - PAPERLESS_OCR_LANGUAGES= - command: ["gunicorn", "-b", "0.0.0.0:8000"] + command: ["supervisord", "-c", "/etc/supervisord.conf"] - consumer: - image: paperless_app - depends_on: - - webserver - - db - restart: on-failure:5 - volumes: - - data:/usr/src/paperless/data - - media:/usr/src/paperless/media - - ./consume:/usr/src/paperless/consume - env_file: docker-compose.env - command: ["document_consumer"] volumes: data: diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh index 9d4a429f4..20cabc8ea 100644 --- a/scripts/docker-entrypoint.sh +++ b/scripts/docker-entrypoint.sh @@ -79,22 +79,11 @@ install_languages() { done } -if [[ "$1" != "/"* ]]; then - initialize - - # Install additional languages if specified - if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then - install_languages "$PAPERLESS_OCR_LANGUAGES" - fi - - if [[ "$1" = "gunicorn" ]]; then - shift - cd /usr/src/paperless/src/ && \ - exec sudo -HEu paperless gunicorn -c /usr/src/paperless/gunicorn.conf.py "$@" paperless.wsgi - fi - - exec sudo -HEu paperless python3 manage.py "$@" +initialize +# Install additional languages if specified +if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then + install_languages "$PAPERLESS_OCR_LANGUAGES" fi exec "$@" diff --git a/scripts/imagemagick-policy.xml b/scripts/imagemagick-policy.xml new file mode 100644 index 000000000..095355706 --- /dev/null +++ b/scripts/imagemagick-policy.xml @@ -0,0 +1,96 @@ + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/paperless-cron b/scripts/paperless-cron new file mode 100644 index 000000000..238857227 --- /dev/null +++ b/scripts/paperless-cron @@ -0,0 +1,5 @@ +#!/bin/sh + +cd /usr/src/paperless/src + +sudo -HEu paperless python3 manage.py document_create_classifier diff --git a/scripts/supervisord.conf b/scripts/supervisord.conf new file mode 100644 index 000000000..d3ff288de --- /dev/null +++ b/scripts/supervisord.conf @@ -0,0 +1,33 @@ +[supervisord] +nodaemon=true ; start in foreground if true; default false +logfile=/var/log/supervisord/supervisord.log ; main log file; default $CWD/supervisord.log +pidfile=/var/log/supervisord/supervisord.pid ; supervisord pidfile; default supervisord.pid +logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB +logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 +loglevel=info ; log level; default info; others: debug,warn,trace + +[program:gunicorn] +command=gunicorn -c /usr/src/paperless/gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi +user=paperless + +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:consumer] +command=python3 manage.py document_consumer +user=paperless + +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[program:anacron] +command=anacron -d + +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0