# Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker # you will also find guides on how best to write your Dockerfile FROM python:3.11-slim AS builder # Instalar herramientas necesarias solo en el stage de build RUN apt-get update \ && apt-get install -y --no-install-recommends build-essential gcc libffi-dev wget ca-certificates tar \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copiar requirements e instalar en un prefijo temporal (/install) COPY requirements.txt ./requirements.txt RUN python -m pip install --upgrade pip setuptools wheel \ && python -m pip install --no-cache-dir --prefix=/install -r requirements.txt # Descargar y extraer openvscode-server en el stage de build (no queda en la imagen final si no se copia) RUN wget https://github.com/gitpod-io/openvscode-server/releases/download/openvscode-server-v1.101.2/openvscode-server-v1.101.2-linux-x64.tar.gz -O /tmp/openvscode-server.tar.gz \ && tar -xzf /tmp/openvscode-server.tar.gz -C /opt \ && rm /tmp/openvscode-server.tar.gz \ && mv /opt/openvscode-server-v1.101.2-linux-x64 /opt/openvscode-server \ && chown -R 1000:1000 /opt/openvscode-server # --- Final minimal image --- FROM python:3.11-slim # Crear user no-root recomendado por Spaces RUN useradd -m -u 1000 user ENV PATH="/home/user/.local/bin:$PATH" ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 WORKDIR /app # Copiar los paquetes instalados desde el builder al entorno de runtime COPY --from=builder /install /usr/local # Copiar openvscode desde el builder (ya está listo en /opt/openvscode-server) COPY --from=builder /opt/openvscode-server /opt/openvscode-server RUN chown -R 1000:1000 /opt/openvscode-server || true # Copiar código y asignar al user no-root COPY --chown=user:user . /app USER user EXPOSE 7860 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]