# Estágio 1: Build FROM python:3.13.11-slim AS builder ARG UV_INDEX_TIMBRASIL_PASSWORD ARG UV_INDEX_TIMBRASIL_USERNAME # Dependências de compilação para pacotes com extensão nativa (ex.: annoy via nemoguardrails) RUN apt-get update && apt-get install -y --no-install-recommends build-essential \ && rm -rf /var/lib/apt/lists/* # Instala o uv para gerenciar dependências de forma rápida e eficiente COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv WORKDIR /app # Copia apenas os arquivos de dependências para aproveitar o cache do Docker COPY pyproject.toml uv.lock README.md ./ COPY agent_framework_oci/libs/agent_framework ./agent_framework_oci/libs/agent_framework # Sincroniza as dependências (sem instalar as de desenvolvimento e sem instalar o projeto local agora) # Analisar como ter lock independente da maquina do desenvolvedor RUN uv lock && uv sync --no-dev --no-install-project # Estágio 2: Runtime FROM python:3.13.11-slim COPY tim-custom-ca.crt /usr/local/share/ca-certificates/tim-custom-ca.crt # Instala curl para o healthcheck e cria usuário não-root RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && groupadd -g 1000 appuser \ && update-ca-certificates \ && useradd -u 1000 -g 1000 -m appuser ENV REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt WORKDIR /app # Copia o ambiente virtual criado pelo uv COPY --from=builder /app/.venv /app/.venv # Garante que o python use o venv por padrão ENV PATH="/app/.venv/bin:$PATH" # Copia o código da aplicação # Mudamos a ordem para copiar apenas o necessário e definir permissões COPY . . RUN chown -R appuser:appuser /app # Diretório padrão para configs OCI (montado via volume em runtime) RUN mkdir -p /config && chown appuser:appuser /config # Expõe a porta que o FastAPI utilizará EXPOSE 8000 # Variáveis de ambiente padrão ENV TIM_APP_HOST=0.0.0.0 ENV TIM_APP_PORT=8000 ENV PYTHONPATH=/app ENV PYTHONUNBUFFERED=1 # Troca para o usuário não-root USER appuser # Comando para iniciar a aplicação CMD ["python", "-m", "agente_contas_tim.main"]