# ── Etapa 1: Descargar ONNX Runtime ─────────────────────────────────────────── FROM debian:bookworm-slim AS onnx-download ARG ONNX_VERSION=1.22.0 RUN apt-get update && apt-get install -y --no-install-recommends wget ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN wget -q https://github.com/microsoft/onnxruntime/releases/download/v${ONNX_VERSION}/onnxruntime-linux-x64-${ONNX_VERSION}.tgz \ && tar -xzf onnxruntime-linux-x64-${ONNX_VERSION}.tgz \ && mkdir -p /onnx/lib \ && cp onnxruntime-linux-x64-${ONNX_VERSION}/lib/libonnxruntime.so* /onnx/lib/ \ && rm -rf onnxruntime-linux-x64-${ONNX_VERSION}* # ── Etapa 2: Build ───────────────────────────────────────────────────────────── FROM golang:1.25-bookworm AS builder RUN apt-get update && apt-get install -y --no-install-recommends \ gcc g++ pkg-config \ libtesseract-dev libleptonica-dev \ tesseract-ocr tesseract-ocr-spa \ && rm -rf /var/lib/apt/lists/* COPY --from=onnx-download /onnx/lib/ /usr/local/lib/ RUN ldconfig ENV CGO_ENABLED=1 ENV ONNXRUNTIME_SHARED_LIBRARY=/usr/local/lib/libonnxruntime.so # Limitar paralelismo CGO para evitar OOM en Docker Desktop ENV GOMAXPROCS=2 WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . # -p 2 limita los paquetes compilados en paralelo (menor uso de RAM) RUN go build -p 2 -o /out/api ./cmd/api # ── Etapa 3: Runtime ─────────────────────────────────────────────────────────── FROM debian:bookworm-slim AS runtime RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl \ tesseract-ocr tesseract-ocr-spa \ && rm -rf /var/lib/apt/lists/* COPY --from=onnx-download /onnx/lib/ /usr/local/lib/ RUN ldconfig ENV ONNXRUNTIME_SHARED_LIBRARY=/usr/local/lib/libonnxruntime.so WORKDIR /app COPY --from=builder /out/api /app/api COPY api/openapi.yaml /app/openapi.yaml ENV OPENAPI_PATH=/app/openapi.yaml ENV MODEL_PATH=/app/models/model.onnx ENV INFERENCE_CONFIG=/app/models/inference.json ENV PORT=8080 EXPOSE 8080 CMD ["/app/api"]