# Usar una imagen base de Python basada en Debian estable (Bookworm es la versión actual) FROM python:3.10-slim-bookworm # Evitar que 'apt' solicite entradas interactivas durante la construcción ENV DEBIAN_FRONTEND=noninteractive # 1. Instalar dependencias del sistema (El "Paso GDAL" crítico) # - libgdal-dev: Proporciona los encabezados de C++ y la herramienta gdal-config # que 'pip' necesita para compilar los bindings de geopandas/fiona. # - build-essential: Compiladores C/C++ básicos. RUN apt-get update && \ apt-get install -y --no-install-recommends \ gdal-bin \ libgdal-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* # 2. Configurar el entorno de la aplicación WORKDIR /app # Crear un usuario no-root por seguridad, una buena práctica en contenedores RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH # 3. Instalar dependencias de Python # Copiar solo requirements.txt primero para aprovechar el caché de capas de Docker. # Si requirements.txt no cambia, Docker no volverá a ejecutar este paso. COPY --chown=user requirements.txt . # Instalar usando pip en el directorio del usuario, sin guardar caché para mantener la imagen ligera. RUN pip install --no-cache-dir --user -r requirements.txt # 4. Copiar el resto del código de la aplicación # El 'chown' asegura que el usuario 'user' sea el propietario de los archivos. COPY --chown=user . . # 5. Exponer el puerto que Hugging Face Spaces espera EXPOSE 7860 # 6. Comando para ejecutar la aplicación # Usar Gunicorn como un servidor WSGI de producción, no el servidor de desarrollo de Dash. # app_00:server -> Busca la variable 'server' en el archivo 'app_00.py'. # --bind 0.0.0.0:7860 -> Escucha en todas las interfaces de red en el puerto 7860. CMD ["gunicorn", "app_00:server", "--workers", "4", "--bind", "0.0.0.0:7860"]