# Multi-stage build per distroless # Stage 1: Build con immagine completa FROM python:3.12-slim AS builder # Installa uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv WORKDIR /app # Copia i file necessari per la build # NOTA: env/ NON viene copiato - sarà montato come volume esterno COPY pyproject.toml ./ COPY src/ ./src/ COPY certs/ ./certs/ COPY matlab_func/ ./matlab_func/ # Installa le dipendenze in una directory separata RUN uv pip install --python=/usr/local/bin/python3 --target=/app/deps . # Compila tutti i file Python in bytecode RUN python -OO -m compileall /app/src || true # Rimuovi tutti i file sorgente .py, lasciando solo i .pyc compilati RUN find /app/src -type f -name "*.py" -delete # Rimuovi anche i .py dalle dipendenze RUN find /app/deps -type f -name "*.py" -delete || true # Crea directory vuote per runtime (saranno montate come volumi) RUN mkdir -p /app/logs /app/aseftp/csvfs /app/matlab_runtime /app/env # Stage 2: Immagine distroless finale FROM gcr.io/distroless/python3-debian12 WORKDIR /app # Copia le dipendenze installate COPY --from=builder /app/deps /app/deps # Copia il codice compilato (solo .pyc) # NOTA: env/ NON viene copiato - sarà montato come volume dal docker-compose COPY --from=builder /app/src ./src/ COPY --from=builder /app/certs ./certs/ COPY --from=builder /app/matlab_func ./matlab_func/ # Copia le directory vuote (i volumi le sovrascriveranno) COPY --from=builder /app/logs ./logs/ COPY --from=builder /app/aseftp ./aseftp/ COPY --from=builder /app/matlab_runtime ./matlab_runtime/ COPY --from=builder /app/env ./env/ # Variabili ambiente ENV PYTHONUNBUFFERED=1 ENV PYTHONPATH=/app:/app/deps ENV PYTHONDONTWRITEBYTECODE=1 # Comando di default (sarà sovrascritto da docker-compose) CMD ["python", "-m", "src.elab_orchestrator"]