build image

This commit is contained in:
2025-11-29 19:51:15 +01:00
parent c688eefe0b
commit a4b7d3c738
177 changed files with 2018 additions and 23366 deletions

89
vm1/DOCKERFILE_NOTES.md Normal file
View File

@@ -0,0 +1,89 @@
# 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
1. **Copia dei sorgenti**: I file Python vengono copiati nell'immagine
2. **Installazione dipendenze**: Usa `uv` per installare le dipendenze Python
3. **Compilazione bytecode**: Compila tutti i file con `python -OO -m compileall`
4. **Rimozione sorgenti**: Elimina tutti i file `.py` lasciando 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.pyc` invece di `.pyc`
### Variabili Ambiente
- `PYTHONUNBUFFERED=1`: Output immediato dei log (no buffering)
- `PYTHONDONTWRITEBYTECODE=1`: Non crea nuovi `.pyc` a runtime (già compilati)
- `PYTHONPATH=/app`: Permette import diretti da `/app`
### Verifica Immagine
Per verificare che l'immagine sia stata buildata correttamente:
```bash
# 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:
```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
# 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
1. **Versioning**: Usa tag semantici per le immagini di produzione
2. **Registry**: Pusha le immagini compilate su un registry privato
3. **Backup**: Tieni sempre i sorgenti in un repository git sicuro
4. **Testing**: Testa l'immagine con `test-pyc-image.sh` prima del deploy
5. **Security**: Combina con autenticazione registry per massima sicurezza