FROM python:3.12-slim@sha256:f77ac9e44ae96ef2c90b8053ea08c31f8be030f824196b0ae4db6d462c84e51f AS minifizieren
# Minifizieren (Ladezeiten, 30.10.2026): JS/CSS aus timbre_api/static mit esbuild (MIT), gepinntes Linux-Binary mit sha256
# (werkzeuge/minifizieren.py) – kein npm; ins Laufzeit-Abbild kommen nur die Ergebnisse (timbre_api/static_min, gleiche Namen).
# Die App liefert sie aus (timbre_api/statisch.py), TIMBRE_MINIFIZIERT=0 schaltet zurück auf die Quelle.
WORKDIR /bau
COPY werkzeuge/minifizieren.py ./
COPY timbre_api/static ./static
RUN python3 minifizieren.py static static_min

FROM python:3.12-slim@sha256:f77ac9e44ae96ef2c90b8053ea08c31f8be030f824196b0ae4db6d462c84e51f
# apt-get upgrade (Sicherheitsaudit 24.10.2026, G6): die Basis ist per Digest gepinnt, die Debian-Sicherheitsupdates
# (openssl, libexpat, libpng, …) kommen so bei jedem Bau mit.
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends libchromaprint-tools ffmpeg \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
COPY --from=minifizieren /bau/static_min /app/timbre_api/static_min
RUN useradd -u 1000 -m timbre && mkdir -p /arbeit && chown timbre /arbeit
USER timbre
# Kein Zugriffslog: Querystrings (z. B. Suchtexte der Klangsuche, N10) gehören nicht in die Docker-Logs.
CMD ["uvicorn", "timbre_api.app:app", "--host", "0.0.0.0", "--port", "8000", "--no-access-log"]
