fixes
[wolnelektury.git] / Dockerfile
index 7d4c875..d9a71d9 100644 (file)
@@ -12,7 +12,7 @@
 # Global build arguments. Stages using UID/GID must redeclare them
 # (bare `ARG UID`) to bring them into scope; the defaults are set here.
 
-ARG PYTHON_IMAGE=python:3.9-trixie
+ARG PYTHON_IMAGE=python:3.12-trixie
 ARG UID=8100
 ARG GID=8100
 
@@ -40,13 +40,16 @@ RUN     apt-get update && apt-get install -y \
        texlive-fonts-extra-links \
        fonts-noto-core fonts-noto-extra
 
+# Install dart-sass for compiling SCSS.
+ARG DART_SASS_VERSION=1.108.1
+RUN arch=$(dpkg --print-architecture | sed 's/amd64/x64/') && \
+    curl -fsSL "https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-${arch}.tar.gz" \
+    | tar xz -C /opt
 
 COPY requirements/requirements.txt requirements.txt
 
-RUN pip install --no-cache-dir -r requirements.txt
-RUN pip install --no-cache-dir \
-    psycopg2-binary \
-    django-debug-toolbar==3.2.2
+RUN --mount=type=cache,target=/root/.cache/pip \
+    pip install -r requirements.txt
 
 RUN addgroup --gid $GID app && \
     adduser --gid $GID --home /app --uid $UID app
@@ -73,7 +76,8 @@ FROM deps AS app
 
 USER root
 
-RUN pip install --no-cache-dir gunicorn
+RUN --mount=type=cache,target=/root/.cache/pip \
+    pip install gunicorn
 
 USER app
 
@@ -89,6 +93,11 @@ COPY src /app/src
 #
 FROM app AS static-builder
 
+# django-pipeline compiler creates temp dirs in place. Let it.
+USER root
+RUN find /app/src/*/static -type d -exec chown app {} +
+USER app
+
 RUN python manage.py collectstatic --noinput
 
 
@@ -156,7 +165,8 @@ FROM app AS test
 
 USER root
 COPY requirements/requirements-test.txt /tmp/
-RUN pip install --no-cache-dir -r /tmp/requirements-test.txt
+RUN --mount=type=cache,target=/root/.cache/pip \
+    pip install -r /tmp/requirements-test.txt
 USER app
 RUN mkdir -p /app/var/counters
 COPY --from=static-builder /app/var/static/staticfiles.json /app/var/static/staticfiles.json