# ============================================================================= # Imagen Docker del backend (FastAPI + MongoDB). # Pensada para desplegarse en HuggingFace Spaces (SDK: docker). # # HuggingFace ejecuta el contenedor con el usuario UID 1000 y expone el # puerto declarado en `app_port` del README (7860 por defecto). # ============================================================================= FROM python:3.11-slim # - PYTHONDONTWRITEBYTECODE: no genera archivos .pyc # - PYTHONUNBUFFERED: logs sin buffer (visibles en tiempo real en HF) # - PORT: puerto de escucha (HuggingFace Spaces usa 7860) ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PORT=7860 # ca-certificates es necesario para la conexión TLS a MongoDB Atlas. RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates \ && rm -rf /var/lib/apt/lists/* # HuggingFace Spaces ejecuta el contenedor como el usuario UID 1000. RUN useradd --create-home --uid 1000 appuser WORKDIR /app # Instala las dependencias primero para aprovechar la caché de capas. COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copia el código de la aplicación. COPY app ./app # Ejecuta sin privilegios de root. USER appuser # Documenta el puerto expuesto (debe coincidir con `app_port` del README). EXPOSE 7860 # Comprobación de salud del contenedor. HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD python -c "import os,urllib.request,sys; \ url='http://127.0.0.1:%s/health' % os.environ.get('PORT','7860'); \ sys.exit(0 if urllib.request.urlopen(url, timeout=4).status == 200 else 1)" # El puerto se toma de la variable de entorno PORT (7860 en HuggingFace). CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-7860}"]