FROM python:3.11-slim
RUN apt-get update && apt-get install -y ffmpeg wget curl aria2 unzip && rm -rf /var/lib/apt/lists/*
# Deno — рекомендованный yt-dlp рантайм для решения n-challenge YouTube.
# Node из Debian bookworm — версия 20, а yt-dlp требует минимум 22 (иначе
# "JS runtimes: node-20.x (unsupported)" и "No video formats found" на путях с cookies).
RUN set -eux; \
    case "$(uname -m)" in \
        x86_64)  DENO_ARCH=x86_64-unknown-linux-gnu ;; \
        aarch64) DENO_ARCH=aarch64-unknown-linux-gnu ;; \
        *) echo "unsupported arch: $(uname -m)" >&2; exit 1 ;; \
    esac; \
    curl -fsSL --retry 5 --retry-all-errors -o /tmp/deno.zip \
        "https://github.com/denoland/deno/releases/latest/download/deno-${DENO_ARCH}.zip"; \
    unzip -q /tmp/deno.zip -d /usr/local/bin; \
    rm /tmp/deno.zip; \
    chmod +x /usr/local/bin/deno; \
    deno --version
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN mkdir -p downloads
ENV PYTHONUNBUFFERED=1
CMD sh -c "gunicorn --workers=1 --timeout=600 --preload --max-requests=20 --max-requests-jitter=5 --bind=0.0.0.0:\${PORT:-5000} app:app"
