# Multi-stage build con PyInstaller per protezione totale del codice # Stage 1: Build con PyInstaller FROM python:3.12-slim AS builder # Installa uv e PyInstaller COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv # Installa binutils richiesto da PyInstaller RUN apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copia i file necessari per la build COPY pyproject.toml ./ COPY src/ ./src/ COPY certs/ ./certs/ COPY matlab_func/ ./matlab_func/ # Installa le dipendenze e PyInstaller RUN uv pip install --system -e . && \ uv pip install --system pyinstaller # Compila tutti gli entry point con PyInstaller # Ogni entry point diventa un binario standalone # Include metadata per pacchetti che lo richiedono RUN pyinstaller \ --onefile \ --name load_orchestrator \ --collect-all src \ --collect-all certs \ --collect-all matlab_func \ --collect-all aioftp \ --collect-all aiomysql \ --collect-all aiofiles \ --collect-all aiosmtplib \ --collect-all cryptography \ --hidden-import=src \ --hidden-import=src.utils \ --hidden-import=src.refactory_scripts \ src/load_orchestrator.py && \ pyinstaller \ --onefile \ --name elab_orchestrator \ --collect-all src \ --collect-all certs \ --collect-all matlab_func \ --collect-all aioftp \ --collect-all aiomysql \ --collect-all aiofiles \ --collect-all aiosmtplib \ --collect-all cryptography \ --hidden-import=src \ --hidden-import=src.utils \ --hidden-import=src.refactory_scripts \ src/elab_orchestrator.py && \ pyinstaller \ --onefile \ --name send_orchestrator \ --collect-all src \ --collect-all certs \ --collect-all matlab_func \ --collect-all aioftp \ --collect-all aiomysql \ --collect-all aiofiles \ --collect-all aiosmtplib \ --collect-all cryptography \ --hidden-import=src \ --hidden-import=src.utils \ --hidden-import=src.refactory_scripts \ src/send_orchestrator.py && \ pyinstaller \ --onefile \ --name ftp_csv_receiver \ --collect-all src \ --collect-all certs \ --collect-all matlab_func \ --collect-all aioftp \ --collect-all aiomysql \ --collect-all aiofiles \ --collect-all aiosmtplib \ --collect-all cryptography \ --hidden-import=src \ --hidden-import=src.utils \ --hidden-import=src.refactory_scripts \ src/ftp_csv_receiver.py # Crea directory per runtime (saranno montate come volumi) RUN mkdir -p /app/dist/logs /app/dist/aseftp/csvfs /app/dist/matlab_runtime /app/dist/env # ==================================================================== # STAGE 2: IMMAGINE FINALE (RUNTIME MINIMA) # Contiene solo il binario compilato, nessun codice sorgente. # ==================================================================== FROM python:3.12-slim WORKDIR /app # Copia tutti i binari compilati COPY --from=builder /app/dist/load_orchestrator ./load_orchestrator COPY --from=builder /app/dist/elab_orchestrator ./elab_orchestrator COPY --from=builder /app/dist/send_orchestrator ./send_orchestrator COPY --from=builder /app/dist/ftp_csv_receiver ./ftp_csv_receiver # Copia i dati statici necessari COPY certs/ ./certs/ COPY matlab_func/ ./matlab_func/ # Copia le directory vuote per runtime (saranno montate come volumi) RUN mkdir -p ./logs ./aseftp/csvfs ./matlab_runtime ./env # Rendi tutti gli eseguibili executable RUN chmod +x ./load_orchestrator ./elab_orchestrator ./send_orchestrator ./ftp_csv_receiver # Variabili ambiente ENV PYTHONUNBUFFERED=1 # Default: elab_orchestrator (sarĂ  sovrascritto da docker-compose) CMD ["./elab_orchestrator"]