Files
proxmox-ha-setup/vm1/Dockerfile.distroless

61 lines
2.0 KiB
Docker

# 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
# Usa -m compileall per generare .pyc standard (non .opt-2.pyc)
RUN python -m compileall /app/src
# Manteniamo i file .py per compatibilità (Python userà comunque i .pyc precompilati)
# Nota: Il codice sorgente è visibile ma Python esegue sempre il bytecode .pyc
# Per protezione completa del codice, considera l'uso di PyArmor o simili
# Rimuovi i .py dalle dipendenze per ridurre la dimensione
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"]