diff --git a/backend/Dockerfile b/backend/Dockerfile index 96a5be9..d64351d 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,89 +1,45 @@ -# backend/Dockerfile -#FROM python:3.11-slim -# Evitar .pyc y buffering -#ENV PYTHONDONTWRITEBYTECODE3=1 -#ENV PYTHONUNBUFFERED=1 - -#WORKDIR /app - -# Dependencias del sistema mínimas -#RUN apt-get update && apt-get install -y --no-install-recommends \ -# build-essential \ -# && rm -rf /var/lib/apt/lists/* - -# Copiamos pyproject y lock si lo hubiera -#COPY pyproject.toml ./ - -# Instalamos dependencias -#RUN pip install --upgrade pip && \ -# pip install . - -# Copiamos el resto del código (respetando .dockerignore) -#COPY . . - -# Variables de autenticación básica -#ENV BASIC_AUTH_USERNAME=admin -#ENV BASIC_AUTH_PASSWORD=admin - -#EXPOSE 8000 - -#CMD ["python", "-m", "uvicorn", "beyond_api.main:app", "--host", "0.0.0.0", "--port", "8000"] # --------------------------- # Builder stage # --------------------------- FROM python:3.11-slim AS builder -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 - WORKDIR /app -# Solo para compilar dependencias -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - && rm -rf /var/lib/apt/lists/* +# Instalar uv (más rápido que pip) +COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv -# Copiamos archivos de dependencias primero (mejor cache) -COPY pyproject.toml ./ +ENV UV_COMPILE_BYTECODE=1 \ + UV_LINK_MODE=copy -# Creamos wheels (más limpio para producción) -RUN pip install --upgrade pip && \ - pip wheel --no-cache-dir --no-deps --wheel-dir /wheels . +COPY pyproject.toml uv.lock* ./ +# Instalar dependencias con uv +RUN uv sync --frozen --no-install-project --no-dev # --------------------------- # Runtime stage # --------------------------- -FROM python:3.11-slim +FROM python:3.11-alpine -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PATH="/app/.venv/bin:$PATH" WORKDIR /app -# Crear usuario no-root (mejor seguridad) -RUN useradd --create-home appuser +RUN apk add --no-cache libstdc++ && \ + adduser -D -h /app appuser -# Copiar wheels generados -COPY --from=builder /wheels /wheels - -# Instalar dependencias sin herramientas de compilación -RUN pip install --upgrade pip && \ - pip install --no-cache-dir /wheels/* && \ - rm -rf /wheels +# Copiar virtualenv +COPY --from=builder /app/.venv /app/.venv # Copiar código -COPY . . - -# Cambiar propietario -RUN chown -R appuser:appuser /app +COPY --chown=appuser:appuser ./src ./src +COPY --chown=appuser:appuser ./main.py* ./app.py* ./ USER appuser -ENV BASIC_AUTH_USERNAME=admin -ENV BASIC_AUTH_PASSWORD=admin - EXPOSE 8000 -CMD ["uvicorn", "beyond_api.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file