78 lines
3.0 KiB
Docker
78 lines
3.0 KiB
Docker
# ── 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 ./
|
|
# La red hacia proxy.golang.org puede ser intermitente en Docker Desktop.
|
|
# Reintentar conserva la verificación de go.sum; si el proxy oficial sigue
|
|
# caído, la última tentativa descarga directamente desde el repositorio origen.
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
set -eu; \
|
|
attempt=1; \
|
|
while [ "$attempt" -le 3 ]; do \
|
|
if GOPROXY=https://proxy.golang.org go mod download; then \
|
|
exit 0; \
|
|
fi; \
|
|
echo "go mod download falló (intento ${attempt}/3); reintentando..."; \
|
|
sleep $((attempt * 5)); \
|
|
attempt=$((attempt + 1)); \
|
|
done; \
|
|
echo "proxy.golang.org no respondió; intentando descarga directa..."; \
|
|
GOPROXY=direct 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"]
|