# server/Dockerfile # 🔧 OPTIMIERT: Multi-Stage-Build für ein minimales und sicheres Produktions-Image # Stage 1: Builder - Installiert Abhängigkeiten FROM python:3.13-slim AS builder WORKDIR /app # Installiert nur die für den Build notwendigen Systemabhängigkeiten RUN apt-get update \ && apt-get install -y --no-install-recommends \ libmariadb-dev-compat libmariadb-dev gcc \ && rm -rf /var/lib/apt/lists/* # Kopiert nur die requirements.txt, um den Docker-Cache optimal zu nutzen COPY /server/requirements.txt . # Installiert die Python-Pakete in ein separates Verzeichnis RUN pip install --no-cache-dir --prefix="/install" -r requirements.txt # Stage 2: Final - Das eigentliche Produktions-Image FROM python:3.13-slim # --- Arbeitsverzeichnis --- WORKDIR /app # Installiert nur die für die Laufzeit notwendigen Systemabhängigkeiten RUN apt-get update \ && apt-get install -y --no-install-recommends \ libmariadb-dev-compat locales curl \ && rm -rf /var/lib/apt/lists/* # --- Locale konfigurieren --- RUN sed -i 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen \ && locale-gen ENV LANG=de_DE.UTF-8 \ LC_ALL=de_DE.UTF-8 # Kopiert die installierten Pakete aus der Builder-Stage COPY --from=builder /install /usr/local # --- Applikationscode --- # Kopiert den Server-Code in das Arbeitsverzeichnis COPY server/ ./server COPY models/ ./models # --- Non-Root User anlegen und Rechte setzen --- ARG USER_ID=1000 ARG GROUP_ID=1000 RUN groupadd -g ${GROUP_ID} infoscreen_taa \ && useradd -u ${USER_ID} -g ${GROUP_ID} \ --shell /bin/bash --create-home infoscreen_taa \ && chown -R infoscreen_taa:infoscreen_taa /app USER infoscreen_taa # --- Port für die API exposed --- EXPOSE 8000 # --- Startbefehl für Gunicorn --- CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "server.wsgi:app"]