72 lines
4.0 KiB
Docker
72 lines
4.0 KiB
Docker
# =============================================================================
|
|
# BASE: Common dependencies (cached across all workspace services)
|
|
# =============================================================================
|
|
FROM lukemathwalker/cargo-chef:latest-rust-1.93-slim-bookworm AS base
|
|
WORKDIR /app
|
|
# Instala dependencias del sistema necesarias para compilar crates de C y linkeo rápido
|
|
RUN apt-get update && apt-get install -y \
|
|
pkg-config libssl-dev build-essential ca-certificates lld \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
# Linker LLD para reducir el tiempo de linkeado significativamente
|
|
ENV RUSTFLAGS="-C link-arg=-fuse-ld=lld"
|
|
ENV CARGO_INCREMENTAL=0
|
|
|
|
# =============================================================================
|
|
# 1. PLANNER: Genera el archivo recipe.json para cachear dependencias
|
|
# =============================================================================
|
|
FROM base AS planner
|
|
# Copiamos solo los archivos que definen dependencias (workspace y miembros)
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY services/shared-lib/Cargo.toml services/shared-lib/Cargo.toml
|
|
COPY services/backend-api/Cargo.toml services/backend-api/Cargo.toml
|
|
COPY services/data-collector/Cargo.toml services/data-collector/Cargo.toml
|
|
COPY services/json-generator/Cargo.toml services/json-generator/Cargo.toml
|
|
COPY services/events-relay/Cargo.toml services/events-relay/Cargo.toml
|
|
COPY services/build-orchestrator/Cargo.toml services/build-orchestrator/Cargo.toml
|
|
COPY services/edge-agent/Cargo.toml services/edge-agent/Cargo.toml
|
|
COPY services/telemetry-ingestor/Cargo.toml services/telemetry-ingestor/Cargo.toml
|
|
|
|
# Creamos estructuras dummy para que cargo metadata no falle (muy importante para la caché)
|
|
RUN mkdir -p services/shared-lib/src && touch services/shared-lib/src/lib.rs && \
|
|
mkdir -p services/backend-api/src && echo "fn main() {}" > services/backend-api/src/main.rs && \
|
|
mkdir -p services/data-collector/src && echo "fn main() {}" > services/data-collector/src/main.rs && \
|
|
mkdir -p services/json-generator/src && echo "fn main() {}" > services/json-generator/src/main.rs && \
|
|
mkdir -p services/events-relay/src && echo "fn main() {}" > services/events-relay/src/main.rs && \
|
|
mkdir -p services/build-orchestrator/src && echo "fn main() {}" > services/build-orchestrator/src/main.rs && \
|
|
mkdir -p services/edge-agent/src && echo "fn main() {}" > services/edge-agent/src/main.rs && \
|
|
mkdir -p services/telemetry-ingestor/src && echo "fn main() {}" > services/telemetry-ingestor/src/main.rs
|
|
|
|
# Generamos la receta solo para este binario
|
|
RUN cargo chef prepare --recipe-path recipe.json --bin data-collector
|
|
|
|
# =============================================================================
|
|
# 2. CACHER: Descarga y compila las dependencias (etapa lenta)
|
|
# =============================================================================
|
|
FROM base AS cacher
|
|
COPY --from=planner /app/recipe.json recipe.json
|
|
# Cook solo lo necesario para este binario para máxima velocidad
|
|
RUN cargo chef cook --release --recipe-path recipe.json --bin data-collector
|
|
|
|
# =============================================================================
|
|
# 3. BUILDER
|
|
# =============================================================================
|
|
FROM base AS builder
|
|
# Copiar el esqueleto dummy y las dependencias pre-compiladas desde el cacher
|
|
COPY --from=cacher /app /app
|
|
COPY --from=cacher /usr/local/cargo /usr/local/cargo
|
|
|
|
# Copiar el código real de los crates que vamos a compilar (sobreescribiendo los stubs)
|
|
COPY services/shared-lib services/shared-lib
|
|
COPY services/data-collector services/data-collector
|
|
RUN cargo build --release --bin data-collector
|
|
|
|
# =============================================================================
|
|
# 4. RUNTIME
|
|
# =============================================================================
|
|
FROM debian:bookworm-slim
|
|
WORKDIR /app
|
|
RUN apt-get update && apt-get install -y libssl3 ca-certificates && rm -rf /var/lib/apt/lists/*
|
|
COPY --from=builder /app/target/release/data-collector .
|
|
ENV RUST_LOG=info
|
|
CMD ["./data-collector"]
|