lazier

personal summarizer
Log | Files | Refs | README

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"]