File size: 1,836 Bytes
67aa1ca
 
 
 
 
 
 
 
60470b6
67aa1ca
 
 
 
 
 
 
60470b6
67aa1ca
 
 
60470b6
 
67aa1ca
 
 
 
 
 
60470b6
67aa1ca
 
 
 
60470b6
67aa1ca
 
60470b6
67aa1ca
 
60470b6
67aa1ca
 
 
 
 
60470b6
67aa1ca
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# =============================================================================
# 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}"]