Dockerfile (2574B)
1 FROM python:3.11-slim 2 3 # Configurar variáveis de ambiente para evitar prompts 4 ENV DEBIAN_FRONTEND=noninteractive 5 ENV PYTHONUNBUFFERED=1 6 7 # Atualizar repositórios e instalar dependências do sistema 8 # Usar && para garantir que cada comando seja executado sequencialmente 9 RUN apt-get update && \ 10 apt-get install -y --no-install-recommends \ 11 ffmpeg \ 12 curl \ 13 git \ 14 ca-certificates \ 15 unzip \ 16 && apt-get clean \ 17 && rm -rf /var/lib/apt/lists/* \ 18 && rm -rf /tmp/* \ 19 && rm -rf /var/tmp/* 20 21 # Verificar se ffmpeg foi instalado corretamente (ffprobe vem junto com ffmpeg) 22 RUN ffmpeg -version && ffprobe -version || (echo "ERRO: ffmpeg não foi instalado" && exit 1) 23 24 # Instalar yt-dlp como executável 25 RUN curl -L --fail --retry 3 --retry-delay 5 \ 26 https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \ 27 -o /usr/local/bin/yt-dlp && \ 28 chmod a+rx /usr/local/bin/yt-dlp && \ 29 yt-dlp --version || (echo "ERRO: yt-dlp não foi instalado" && exit 1) 30 31 # Instalar Deno (JavaScript runtime para yt-dlp funcionar com YouTube) 32 # Baixar binário diretamente do GitHub releases 33 RUN DENO_VERSION=$(curl -s https://api.github.com/repos/denoland/deno/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') && \ 34 curl -L --fail --retry 3 --retry-delay 5 \ 35 "https://github.com/denoland/deno/releases/download/${DENO_VERSION}/deno-x86_64-unknown-linux-gnu.zip" \ 36 -o /tmp/deno.zip && \ 37 unzip /tmp/deno.zip -d /tmp/deno && \ 38 mv /tmp/deno/deno /usr/local/bin/deno && \ 39 chmod +x /usr/local/bin/deno && \ 40 rm -rf /tmp/deno.zip /tmp/deno && \ 41 deno --version || (echo "ERRO: Deno não foi instalado" && exit 1) 42 43 WORKDIR /app 44 45 # Copiar requirements primeiro (para aproveitar cache do Docker) 46 COPY requirements.txt . 47 48 # Atualizar pip e instalar dependências Python 49 RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ 50 pip install --no-cache-dir -r requirements.txt && \ 51 playwright install chromium && \ 52 playwright install-deps chromium 53 54 # Copiar código da aplicação 55 COPY . . 56 57 # Criar diretórios necessários com permissões adequadas 58 RUN mkdir -p /app/data /app/cache /app/uploads /app/outputs && \ 59 chmod -R 755 /app/data /app/cache /app/uploads /app/outputs 60 61 EXPOSE 19283 62 63 # Healthcheck 64 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ 65 CMD python -c "import requests; requests.get('http://localhost:19283/health', timeout=5)" || exit 1 66 67 CMD ["uvicorn", "lazier.api.main:app", "--host", "0.0.0.0", "--port", "19283"]