diff --git a/backend/Dockerfile b/backend/Dockerfile index 0d26e7c..057f6e0 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,45 +1,54 @@ - # --------------------------- # 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/* +# Copiamos archivos de dependencias primero (mejor cache) +COPY pyproject.toml ./ +# Creamos wheels (más limpio para producción) +#RUN pip install --upgrade pip && \ +# pip wheel --no-cache-dir --no-deps --wheel-dir /wheels . -# Instalar uv (más rápido que pip) -COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv +RUN pip install --upgrade pip && \ + pip install --prefix=/install --no-warn-script-location . -ENV UV_COMPILE_BYTECODE=1 \ - UV_LINK_MODE=copy - -COPY pyproject.toml uv.lock* ./ - -# Instalar dependencias con uv -RUN uv sync --frozen --no-install-project --no-dev +RUN find /install -type d -name '__pycache__' -exec rm -rf {} + && \ + find /install -type f -name '*.pyc' -delete && \ + find /install -type f -name '*.pyo' -delete # --------------------------- # Runtime stage # --------------------------- FROM python:3.11-alpine - -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - PATH="/app/.venv/bin:$PATH" +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV PYTHONPATH=/usr/local WORKDIR /app - -RUN apk add --no-cache libstdc++ && \ +# Crear usuario no-root (mejor seguridad) +#RUN useradd --create-home 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 código +#COPY . . +# Cambiar propietario +RUN apk add --no-cache libstdc++ libgcc && \ adduser -D -h /app appuser -# Copiar virtualenv -COPY --from=builder /app/.venv /app/.venv - -# Copiar código -COPY --chown=appuser:appuser ./backend ./backend -#COPY --chown=appuser:appuser ./main.py* ./app.py* ./ +COPY --from=builder /install /usr/local +RUN chown -R appuser:appuser /app USER appuser - -EXPOSE 8000 - -CMD ["uvicorn", "beyond_api.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file +ENV BASIC_AUTH_USERNAME=admin +ENV BASIC_AUTH_PASSWORD=admin +EXPOSE 8000 \ No newline at end of file