Files
rehearshalhub/worker/Dockerfile
2026-03-29 20:44:23 +02:00

31 lines
1.1 KiB
Docker

# Stage 1: Essentia builder
# Essentia doesn't have wheels for Python 3.12 yet; we use the official image
# and copy the bindings into our final stage via a bind mount.
FROM docker.io/mtgupf/essentia:latest AS essentia-builder
FROM python:3.12-slim AS base
WORKDIR /app
# System dependencies for audio processing
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
libsndfile1 \
&& rm -rf /var/lib/apt/lists/*
# Copy Essentia Python bindings from builder (best-effort: no-op if the library
# wasn't built for this Python version or the path doesn't exist).
# COPY does not support shell redirections, so we use RUN --mount instead.
RUN --mount=type=bind,from=essentia-builder,source=/usr/local/lib,target=/essentia_lib \
find /essentia_lib -maxdepth 4 -name "essentia*" \
-exec cp -r {} /usr/local/lib/python3.12/site-packages/ \; \
2>/dev/null || true
RUN pip install uv
FROM base AS production
COPY pyproject.toml .
RUN uv sync --no-dev --frozen || uv sync --no-dev
COPY . .
ENV PYTHONPATH=/app/src
CMD ["uv", "run", "python", "-m", "worker.main"]