docker image su registry e create con pyinstaller
This commit is contained in:
120
vm1/Dockerfile
120
vm1/Dockerfile
@@ -1,34 +1,118 @@
|
||||
FROM python:3.12-slim
|
||||
# Multi-stage build con PyInstaller per protezione totale del codice
|
||||
# Stage 1: Build con PyInstaller
|
||||
FROM python:3.12-slim AS builder
|
||||
|
||||
# Installa uv
|
||||
# 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 pyproject.toml, codice sorgente e file statici
|
||||
# NOTA: env/ NON viene copiato - sarà montato come volume esterno
|
||||
# Copia i file necessari per la build
|
||||
COPY pyproject.toml ./
|
||||
COPY src/ ./src/
|
||||
COPY certs/ ./certs/
|
||||
COPY matlab_func/ ./matlab_func/
|
||||
|
||||
# Installa le dipendenze
|
||||
RUN uv pip install --system -e .
|
||||
# Installa le dipendenze e PyInstaller
|
||||
RUN uv pip install --system -e . && \
|
||||
uv pip install --system pyinstaller
|
||||
|
||||
# Compila tutti i file Python in bytecode
|
||||
# Usa -OO per rimuovere docstring e assert (ottimizzazione massima)
|
||||
RUN python -OO -m compileall /app/src || true
|
||||
# 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
|
||||
|
||||
# Rimuovi tutti i file sorgente .py, lasciando solo i .pyc compilati in __pycache__
|
||||
RUN find /app/src -type f -name "*.py" -delete
|
||||
# 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
|
||||
|
||||
# Crea directory per i log, FTP, MATLAB e ENV (sarà montata)
|
||||
RUN mkdir -p /app/logs /app/aseftp/csvfs /app/certs /app/matlab_runtime /app/matlab_func /app/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
|
||||
ENV PYTHONPATH=/app
|
||||
# Disabilita la creazione di nuovi file .pyc a runtime (non necessari dato che abbiamo già i .pyc)
|
||||
ENV PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# Il comando verrà specificato nel docker-compose.yml per ogni servizio
|
||||
CMD ["python", "-m", "src.elab_orchestrator"]
|
||||
# Default: elab_orchestrator (sarà sovrascritto da docker-compose)
|
||||
CMD ["./elab_orchestrator"]
|
||||
Reference in New Issue
Block a user