# ============================================================================= # Dockerfile para HuggingFace Spaces — GeoVision-CLIP Cali # SDK: Docker (puerto 7860) # Build: docker build -t geovision-clip . # ============================================================================= FROM node:20-slim AS frontend-builder WORKDIR /app COPY app/geo-vision-clip-application/ . # Build frontend RUN npm install -g pnpm && \ pnpm install && \ NODE_ENV=production pnpm build # ============================================================================= FROM python:3.11-slim WORKDIR /app # Variables de entorno ENV MODE=prod \ DEVICE=cpu \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ HF_HUB_DISABLE_SYMLINKS_WARNING=1 # Dependencias del sistema RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* # Backend Python + modelos (todo en UN solo RUN para evitar caché parcial) COPY app/geo-vision-clip-application/backend/requirements.txt /app/backend/requirements.txt RUN pip install --no-cache-dir \ -r /app/backend/requirements.txt \ torch>=2.1.0 \ torchvision>=0.16.0 \ open-clip-torch>=2.24.0 \ transformers>=4.36.0 \ huggingface_hub>=0.20.0 \ sentencepiece>=0.1.99 \ tifffile \ pykrige \ scipy \ pandas>=2.0.0 \ scikit-learn>=1.3.0 \ pyarrow>=14.0.0 # Copiar backend COPY app/geo-vision-clip-application/backend/ /app/backend/ # Copiar frontend build desde stage anterior COPY --from=frontend-builder /app/out/ /app/frontend/ # Copiar checkpoints (si existen en build context) COPY app/geo-vision-clip-application/backend/checkpoints/ /app/backend/checkpoints/ # Puerto de HuggingFace Spaces EXPOSE 7860 # Script de entrada: descarga checkpoints si faltan, luego arranca servidor COPY docker-entrypoint.sh /app/docker-entrypoint.sh RUN chmod +x /app/docker-entrypoint.sh ENTRYPOINT ["/app/docker-entrypoint.sh"] CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "7860"]