NaiRouter / Dockerfile
justadri23's picture
Update Dockerfile
ab00f94 verified
# ═══════════════════════════════════════════════════════════════
# 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"]