]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Feature: Add ahead of time compression of the static files for x86_64 (#4390)
authorTrenton H <797416+stumpylog@users.noreply.github.com>
Fri, 20 Oct 2023 23:22:05 +0000 (16:22 -0700)
committerGitHub <noreply@github.com>
Fri, 20 Oct 2023 23:22:05 +0000 (16:22 -0700)
Compressed staticfiles. x86_64 only at this point

.github/workflows/ci.yml
Dockerfile
src/paperless/settings.py

index 642e9c61b285cfc2c11979ec8628979494250622..7c22e9f987d3e834d03f7fa208247261d3833e1c 100644 (file)
@@ -451,6 +451,12 @@ jobs:
         name: Install Python dependencies
         run: |
           pipenv --python ${{ steps.setup-python.outputs.python-version }} sync --dev
+      -
+        name: Patch whitenoise
+        run: |
+          curl --fail --silent --show-error --location --output 484.patch https://github.com/evansd/whitenoise/pull/484.patch
+          patch -d $(pipenv --venv)/lib/python3.10/site-packages --verbose -p2 < 484.patch
+          rm 484.patch
       -
         name: Install system dependencies
         run: |
index 4f57fd42cfc9886ccc9281bebb9bb42e08870b2d..6122cab8ff69ca72163958240cf796cabefa56f9 100644 (file)
@@ -205,6 +205,10 @@ RUN --mount=type=cache,target=/root/.cache/pip/,id=pip-cache \
     && python3 -m pip install --no-cache-dir --upgrade wheel \
   && echo "Installing Python requirements" \
     && python3 -m pip install --default-timeout=1000 --requirement requirements.txt \
+  && echo "Patching whitenoise for compression speedup" \
+    && curl --fail --silent --show-error --location --output 484.patch https://github.com/evansd/whitenoise/pull/484.patch \
+    && patch -d /usr/local/lib/python3.11/site-packages --verbose -p2 < 484.patch \
+    && rm 484.patch \
   && echo "Installing NLTK data" \
     && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" snowball_data \
     && python3 -W ignore::RuntimeWarning -m nltk.downloader -d "/usr/share/nltk_data" stopwords \
@@ -220,10 +224,10 @@ RUN --mount=type=cache,target=/root/.cache/pip/,id=pip-cache \
     && truncate --size 0 /var/log/*log
 
 # copy backend
-COPY ./src ./
+COPY --chown=1000:1000 ./src ./
 
 # copy frontend
-COPY --from=compile-frontend /src/src/documents/static/frontend/ ./documents/static/frontend/
+COPY --from=compile-frontend --chown=1000:1000 /src/src/documents/static/frontend/ ./documents/static/frontend/
 
 # add users, setup scripts
 # Mount the compiled frontend to expected location
@@ -237,7 +241,7 @@ RUN set -eux \
     && mkdir --parents --verbose /usr/src/paperless/consume \
     && mkdir --parents --verbose /usr/src/paperless/export \
   && echo "Adjusting all permissions" \
-    && chown --recursive paperless:paperless /usr/src/paperless \
+    && chown --from root:root --changes --recursive paperless:paperless /usr/src/paperless \
   && echo "Collecting static files" \
     && gosu paperless python3 manage.py collectstatic --clear --no-input --link \
     && gosu paperless python3 manage.py compilemessages
index c61c551175db2d84953969ff7dd2391bcd3038d2..3cbfb4bff25be02d239b55b8edf9c2fb32ceb74d 100644 (file)
@@ -7,6 +7,7 @@ import re
 import tempfile
 from os import PathLike
 from pathlib import Path
+from platform import machine
 from typing import Final
 from typing import Optional
 from typing import Union
@@ -342,6 +343,17 @@ ASGI_APPLICATION = "paperless.asgi.application"
 STATIC_URL = os.getenv("PAPERLESS_STATIC_URL", BASE_URL + "static/")
 WHITENOISE_STATIC_PREFIX = "/static/"
 
+if machine().lower() == "aarch64":  # pragma: no cover
+    _static_backend = "django.contrib.staticfiles.storage.StaticFilesStorage"
+else:
+    _static_backend = "whitenoise.storage.CompressedStaticFilesStorage"
+
+STORAGES = {
+    "staticfiles": {
+        "BACKEND": _static_backend,
+    },
+}
+
 _CELERY_REDIS_URL, _CHANNELS_REDIS_URL = _parse_redis_url(
     os.getenv("PAPERLESS_REDIS", None),
 )