Spaces:
Sleeping
Sleeping
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Proxy Bidireccional OpenAI β Anthropic | |
| # Optimizado para Hugging Face Spaces (Docker SDK) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # ββββ Etapa 1: Base ligera ββββ | |
| FROM python:3.11-slim AS base | |
| # Evitar prompts interactivos y buffering en logs | |
| ENV DEBIAN_FRONTEND=noninteractive \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| PIP_DISABLE_PIP_VERSION_CHECK=1 | |
| # Dependencias del sistema mΓnimas | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends \ | |
| ca-certificates \ | |
| curl && \ | |
| apt-get clean && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # ββββ Etapa 2: Dependencias Python ββββ | |
| FROM base AS dependencies | |
| WORKDIR /tmp | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # ββββ Etapa 3: AplicaciΓ³n ββββ | |
| FROM base AS production | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Hugging Face Spaces requiere: | |
| # β’ Usuario con UID 1000 | |
| # β’ Puerto 7860 | |
| # β’ Directorio de trabajo /home/user/app | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Crear usuario no-root (requerido por HF) | |
| RUN useradd -m -u 1000 user | |
| # Copiar paquetes Python instalados desde etapa anterior | |
| COPY --from=dependencies /usr/local/lib/python3.11/site-packages \ | |
| /usr/local/lib/python3.11/site-packages | |
| COPY --from=dependencies /usr/local/bin /usr/local/bin | |
| # Directorio de trabajo de HF Spaces | |
| WORKDIR /home/user/app | |
| # Copiar cΓ³digo fuente | |
| COPY --chown=user:user proxy.py . | |
| COPY --chown=user:user requirements.txt . | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Variables de entorno por defecto | |
| # (Se sobreescriben con los Secrets de HF Spaces) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ENV ANTHROPIC_BASE_URL=https://api.anthropic.com \ | |
| OPENAI_BASE_URL=https://api.openai.com \ | |
| PROXY_HOST=0.0.0.0 \ | |
| PROXY_PORT=7860 | |
| # Puerto que HF Spaces espera | |
| EXPOSE 7860 | |
| # Cambiar a usuario no-root | |
| USER user | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Healthcheck para que HF sepa que la app estΓ‘ viva | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ | |
| CMD curl -f http://localhost:7860/health || exit 1 | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Arranque con Uvicorn | |
| # β’ workers=4 β manejo de mΓΊltiples requests | |
| # β’ limit-concurrency=100 β protecciΓ³n contra sobrecarga | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| CMD ["python", "-m", "uvicorn", \ | |
| "proxy:app", \ | |
| "--host", "0.0.0.0", \ | |
| "--port", "7860", \ | |
| "--workers", "4", \ | |
| "--limit-concurrency", "100", \ | |
| "--timeout-keep-alive", "120", \ | |
| "--log-level", "info"] |