# Dockerfile pour FireWatch AI sur Hugging Face Spaces # Modifié par BlackBenAI Team FROM python:3.11-slim # Métadonnées LABEL maintainer="BlackBenAI Team" LABEL description="FireWatch AI - Système de détection d'incendie et d'intrusion" LABEL version="1.1" # Variables d'environnement ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV DEBIAN_FRONTEND=noninteractive ENV PORT=7860 # Répertoire de travail WORKDIR /app # Installation des dépendances système RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ libgl1 \ libglib2.0-0 \ libsm6 \ libxext6 \ libxrender-dev \ libgomp1 \ libgthread-2.0-0 \ libgtk-3-0 \ python3-opencv \ ffmpeg \ wget \ curl \ && rm -rf /var/lib/apt/lists/* # Copier les requirements et installer les dépendances Python COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip RUN pip install --no-cache-dir -r requirements.txt # Créer un utilisateur non-root (user 1000 pour HF Spaces) RUN useradd -m -u 1000 appuser # Créer les répertoires nécessaires et donner les permissions RUN mkdir -p media/uploads/images media/uploads/videos media/results models logs staticfiles RUN chown -R appuser:appuser /app # Passer à l'utilisateur non-root USER appuser # Copier le code de l'application avec les bonnes permissions COPY --chown=appuser:appuser . . # Collecter les fichiers statiques (en tant qu'utilisateur appuser) RUN python manage.py collectstatic --noinput # Exposer le port 7860 (Hugging Face Spaces) EXPOSE 7860 # Commande de santé HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/ || exit 1 # Script de démarrage RUN chmod +x /app/docker-entrypoint.sh # Commande par défaut ENTRYPOINT ["/app/docker-entrypoint.sh"] CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "--timeout", "120", "firewatch_project.wsgi:application"]