2.8 KiB
2.8 KiB
Note sul Dockerfile
Protezione del Codice Sorgente
Questo Dockerfile è configurato per proteggere il codice sorgente Python rimuovendo i file .py e mantenendo solo il bytecode compilato (.pyc).
Processo di Build
- Copia dei sorgenti: I file Python vengono copiati nell'immagine
- Installazione dipendenze: Usa
uvper installare le dipendenze Python - Compilazione bytecode: Compila tutti i file con
python -OO -m compileall - Rimozione sorgenti: Elimina tutti i file
.pylasciando solo i.pyc
Ottimizzazione -OO
L'opzione -OO di Python:
- Rimuove le istruzioni
assert - Rimuove le docstring (
__doc__) - Rimuove il flag
__debug__ - Produce file
.opt-2.pycinvece di.pyc
Variabili Ambiente
PYTHONUNBUFFERED=1: Output immediato dei log (no buffering)PYTHONDONTWRITEBYTECODE=1: Non crea nuovi.pyca runtime (già compilati)PYTHONPATH=/app: Permette import diretti da/app
Verifica Immagine
Per verificare che l'immagine sia stata buildata correttamente:
# Build locale
docker build -t orchestrator-app:test .
# Test immagine
../scripts/test-pyc-image.sh orchestrator-app:test
# Verifica manualmente
docker run --rm orchestrator-app:test find /app/src -name "*.py" # Deve restituire nulla
docker run --rm orchestrator-app:test find /app/src -name "*.pyc" # Deve mostrare i .pyc
Limitazioni
⚠️ Debug: I traceback non mostrano il codice sorgente ⚠️ Sviluppo: Non usare questa configurazione per sviluppo locale ⚠️ Repository: Mantieni sempre i sorgenti in git
Alternative
Se vuoi disabilitare la rimozione dei sorgenti (per debug), commenta queste righe nel Dockerfile:
# Commenta queste righe per mantenere i file .py
# RUN python -OO -m compileall /app/src /app/env || true
# RUN find /app/src -type f -name "*.py" -delete && \
# find /app/env -type f -name "*.py" -delete || true
Build con Sorgenti (Debug)
Per build temporanee con codice sorgente visibile:
# Dockerfile.debug
FROM python:3.12-slim
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
WORKDIR /app
COPY pyproject.toml ./
COPY src/ ./src/
COPY env/ ./env/
COPY certs/ ./certs/
COPY matlab_func/ ./matlab_func/
RUN uv pip install --system -e .
# NO COMPILATION - NO DELETION
RUN mkdir -p /app/logs /app/aseftp/csvfs /app/certs /app/matlab_runtime /app/matlab_func
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app
CMD ["python", "-m", "src.elab_orchestrator"]
Best Practices
- Versioning: Usa tag semantici per le immagini di produzione
- Registry: Pusha le immagini compilate su un registry privato
- Backup: Tieni sempre i sorgenti in un repository git sicuro
- Testing: Testa l'immagine con
test-pyc-image.shprima del deploy - Security: Combina con autenticazione registry per massima sicurezza