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"