# Dockerfile para la API (FastAPI) con yt-dlp y ffmpeg FROM python:3.11-slim ENV PYTHONUNBUFFERED=1 # Instalar ffmpeg, Node.js (LTS via NodeSource) y herramientas necesarias # Node.js + yt-dlp-utils son requeridos para resolver el n-challenge y signature de YouTube RUN apt-get update \ && apt-get install -y --no-install-recommends \ ffmpeg \ curl \ ca-certificates \ gnupg \ && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* \ && npm install -g yt-dlp-utils 2>/dev/null || true WORKDIR /app # Copiar requirements y instalar dependencias Python COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt # Instalar yt-dlp desde la última versión del binario oficial (no pip) para tener siempre la más reciente RUN curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp \ && chmod a+rx /usr/local/bin/yt-dlp # ARG para invalidar caché del COPY al hacer rebuild con --build-arg CACHEBUST=$(date +%s) ARG CACHEBUST=1 # Copiar el resto del código COPY . /app # Crear carpeta data con permisos abiertos para que cualquier UID pueda leer/escribir RUN mkdir -p /app/data && chmod 777 /app/data # Crear usuario appuser (UID 1000) y darle acceso a /app RUN groupadd -g 1000 appgroup && useradd -u 1000 -g appgroup -s /bin/sh appuser \ && chown -R appuser:appgroup /app USER appuser EXPOSE 8000 # Comando por defecto para ejecutar la API CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]