FROM python:3.12-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ curl \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Piper voices for the reader's read-aloud feature (see tts/piper_engine.py). # Fetched at build time rather than kept in git or bind-mounted — there's no # existing volume-mount pattern for extra binary assets in this repo, and # baking them into the image keeps the watchtower "just pull the new image" # deploy flow working unchanged. RUN mkdir -p /app/tts_models && \ curl -fsSL -o /app/tts_models/de_DE-thorsten-medium.onnx \ https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/medium/de_DE-thorsten-medium.onnx && \ curl -fsSL -o /app/tts_models/de_DE-thorsten-medium.onnx.json \ https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/medium/de_DE-thorsten-medium.onnx.json && \ curl -fsSL -o /app/tts_models/en_US-lessac-medium.onnx \ https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx && \ curl -fsSL -o /app/tts_models/en_US-lessac-medium.onnx.json \ https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json ARG BUILD_TIME ENV BUILD_TIME=${BUILD_TIME} COPY . . RUN python manage.py collectstatic --noinput && mkdir -p /app/data EXPOSE 8000 CMD ["sh", "-c", "python manage.py migrate --noinput && gunicorn diora.wsgi:application --bind 0.0.0.0:8000 --workers 4 --worker-class gevent --timeout 120"]