allo-chat / Dockerfile
dave
Upload Dockerfile with huggingface_hub
224ef2c verified
Raw
History Blame Contribute Delete
2.97 kB
# Image pour Hugging Face Spaces — mode DEEP (vraie reconnaissance MiewID).
# HF Spaces (CPU basic) = 16 Go RAM gratuits → suffisant pour MiewID (PyTorch).
# Le Space utilise ce fichier comme Dockerfile racine (poussé par le script de déploiement).
FROM python:3.12-slim
WORKDIR /app
# Binaires système : Tesseract (OCR fr+en) + poppler (PDF) pour lire les affiches.
RUN apt-get update \
&& apt-get install -y --no-install-recommends tesseract-ocr tesseract-ocr-fra poppler-utils \
&& rm -rf /var/lib/apt/lists/*
# Deps de base + pile deep (torch/transformers/timm pour MiewID).
COPY backend/requirements.txt ./backend/requirements.txt
RUN pip install --no-cache-dir -r backend/requirements.txt \
&& pip install --no-cache-dir torch torchvision "transformers<5" timm
# Cache des modèles dans /app/.cache (inscriptible par appuser après chown).
# PRÉ-TÉLÉCHARGE les poids du détecteur COCO dans l'image : sinon ~160 Mo sont
# téléchargés au 1er upload, ce qui échouait silencieusement en non-root (cache
# par défaut non inscriptible) → « gate animal » désactivé. Cache déterministe ici.
ENV TORCH_HOME=/app/.cache/torch \
HF_HOME=/app/.cache/huggingface
RUN python -c "from torchvision.models.detection import fasterrcnn_resnet50_fpn, FasterRCNN_ResNet50_FPN_Weights as W; fasterrcnn_resnet50_fpn(weights=W.DEFAULT)"
# Audit MIT #3 — MiewID est chargé avec trust_remote_code=True : il EXÉCUTE du
# code Python distant (depuis le repo HF) à chaque chargement. Sans révision
# épinglée, un repo compromis = exécution de code arbitraire au cold start. On
# FIGE le commit hash audité (immuable) ET on pré-télécharge code+poids À CETTE
# révision dans l'image → plus aucun fetch distant au runtime, code gelé.
# SHA vérifié le 2025-02-13 (huggingface.co/api/models/conservationxlabs/miewid-msv3).
ENV CHATS_MIEWID_REVISION=4f1d7f2b521149e5fe34bb85f377248ce9971a7d
RUN python -c "from transformers import AutoModel; AutoModel.from_pretrained('conservationxlabs/miewid-msv3', trust_remote_code=True, revision='4f1d7f2b521149e5fe34bb85f377248ce9971a7d')"
COPY backend ./backend
COPY web ./web
# Utilisateur NON ROOT (uid 1000 = convention HF Spaces) : si l'app est
# compromise, l'attaquant n'a pas les droits root dans le conteneur. Seuls
# data/ (uploads + SQLite) et le cache HF sont inscriptibles.
RUN useradd -m -u 1000 appuser \
&& mkdir -p /app/data /app/.cache/huggingface \
&& chown -R appuser:appuser /app/data /app/.cache
USER appuser
WORKDIR /app/backend
# MiewID + tête fine-tunée + vrai envoi courriel. La détection lourde reste off
# (recadrage COCO lent ; on garde l'image entière, ce qui convient à MiewID).
ENV CHATS_EMBEDDER=deep \
CHATS_REID_HEAD=1 \
CHATS_DETECT=0 \
CHATS_DEV_OTP=0 \
PYTHONUNBUFFERED=1
# HF Spaces attend l'app sur le port 7860 (app_port dans le README du Space).
EXPOSE 7860
CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-7860}"]