# Nur die Web-App. Der Detector läuft auf dem Host, wo die Rechenleistung ist # und wo die Kamera im selben Netz hängt — er gehört nicht in diesen Container. FROM python:3.13-slim WORKDIR /app # gettext fuer 'compilemessages' weiter unten. Die .mo-Dateien sind # Bauartefakte und liegen nicht im Repo; ohne diesen Schritt fiele die # englische Fassung stillschweigend auf die deutschen Texte zurueck. RUN apt-get update \ && apt-get install -y --no-install-recommends gettext \ && rm -rf /var/lib/apt/lists/* COPY requirements-web.txt . RUN pip install --no-cache-dir -r requirements-web.txt COPY web/ ./ # Der Artenkatalog wird von 'seed_dex' importiert. # # 🔴 Hier stand bis zum 09.10.2026 nur species_de.py — und damit hat jede # frisch aufgesetzte Instanz **44 Arten ohne Steckbriefe** bekommen statt der # 148, die README und Oberfläche nennen. seed_dex meldete das sogar # ("Keine Steckbriefe gefunden"), nur hat es nie jemand gelesen: Die laufende # Instanz wurde beim Umzug 1:1 kopiert und nie aus diesem Image geseedet. # # 🔑 Deshalb kommen alle fünf Datenquellen mit, in derselben Reihenfolge, in # der seed_dex sie sucht: # species_de.py 44 heimische Gartenvögel, dazu die Seltenheitsstufen # species_extra.py der Rest auf 148 # species_info.py Steckbriefe # species_info_en.py dieselben auf Englisch # profiles/ die ausführlichen Zusätze # # Nach wie vor NICHT der ganze Detector: Alles hier ist reine Stdlib # (dataclasses), zusammen 280 KB. classify.py und Konsorten bräuchten numpy # und LiteRT und haben in diesem Bild nichts verloren. COPY detector/__init__.py \ detector/species_de.py \ detector/species_extra.py \ detector/species_info.py \ detector/species_info_en.py \ /app/detector/ COPY detector/profiles/ /app/detector/profiles/ # Uebersetzungen binaer erzeugen. Zur Bauzeit, nicht beim Start: sie aendern # sich nur mit dem Code. RUN python manage.py compilemessages COPY entrypoint.sh . RUN chmod +x entrypoint.sh EXPOSE 8000 CMD ["./entrypoint.sh"]