2026-03-28 22:30:24 +01:00
|
|
|
FROM python:3.12-slim
|
|
|
|
|
|
|
|
|
|
# Install system dependencies for WeasyPrint
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
|
libpango-1.0-0 \
|
|
|
|
|
libpangocairo-1.0-0 \
|
|
|
|
|
libgdk-pixbuf-2.0-0 \
|
|
|
|
|
libffi-dev \
|
|
|
|
|
shared-mime-info \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# Install Python dependencies
|
|
|
|
|
COPY requirements.txt .
|
|
|
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
|
|
|
|
|
|
# Copy application code only (data/reports are mounted as volumes)
|
|
|
|
|
COPY app/ ./app/
|
|
|
|
|
|
2026-04-25 20:55:57 +02:00
|
|
|
# Create non-root user and directories (#119 Security)
|
|
|
|
|
RUN adduser --disabled-password --gecos '' --uid 1000 appuser \
|
|
|
|
|
&& mkdir -p /app/data /app/reports \
|
|
|
|
|
&& chown -R appuser:appuser /app
|
|
|
|
|
|
|
|
|
|
USER appuser
|
2026-03-28 22:30:24 +01:00
|
|
|
|
|
|
|
|
# Environment
|
|
|
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
|
|
|
|
|
|
|
|
EXPOSE 8000
|
|
|
|
|
|
|
|
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|