67 lines
2.2 KiB
Docker
67 lines
2.2 KiB
Docker
# 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"]
|