# Stage 1: Builder (Compilación y dependencias) FROM python:3.14-slim as builder WORKDIR /app # Variables de entorno para optimizar Poetry y Pip ENV POETRY_NO_INTERACTION=1 \ POETRY_VIRTUALENVS_IN_PROJECT=1 \ POETRY_VIRTUALENVS_CREATE=1 \ PIP_NO_CACHE_DIR=1 # Instalar Poetry RUN pip install poetry # Copiar archivos de configuración primero para aprovechar el caché de capas COPY pyproject.toml poetry.lock ./ # Instalar dependencias de producción (sin dev) RUN poetry install --without dev --no-root # Stage 2: Runtime (Imagen final limpia) FROM python:3.14-slim as runtime WORKDIR /app ENV VIRTUAL_ENV=/app/.venv \ PATH="/app/.venv/bin:$PATH" \ PYTHONPATH="/app/src" # Copiar el entorno virtual generado en el stage anterior COPY --from=builder /app/.venv /app/.venv # Copiar el código fuente COPY ./src /app/src # Crear directorio public para la playlist RUN mkdir -p /app/public # Usuario no privilegiado por seguridad RUN useradd -m appuser && chown -R appuser /app USER appuser # Exponer el puerto por defecto EXPOSE 8080 # Punto de entrada CMD ["python", "-m", "m3u_list_builder.main"]