diff --git a/Dockerfile b/Dockerfile index 16868ac..f4d7e97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,26 @@ -# Vogliamo usare una versione di linux leggera con già uv installato -# Infatti scegliamo l'immagine ufficiale di uv che ha già tutto configurato -FROM ghcr.io/astral-sh/uv:python3.12-alpine +# Utilizziamo Debian slim invece di Alpine per migliore compatibilità +FROM debian:bookworm-slim +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* -# Dopo aver definito la workdir mi trovo già in essa -WORKDIR /app +# Installiamo uv +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:$PATH" -# Settiamo variabili d'ambiente per usare python del sistema invece che venv -ENV UV_PROJECT_ENVIRONMENT=/usr/local +# Configuriamo UV per usare copy mode ed evitare problemi di linking ENV UV_LINK_MODE=copy -# Copiamo prima i file di configurazione delle dipendenze e installiamo le dipendenze +# Impostiamo la directory di lavoro +WORKDIR /app + +# Copiamo i file del progetto COPY pyproject.toml ./ COPY uv.lock ./ -RUN uv sync --frozen --no-cache +COPY LICENSE ./ +COPY src/ ./src/ -# Copiamo i file sorgente dopo aver installato le dipendenze per sfruttare la cache di Docker -COPY LICENSE . -COPY src ./src +# Creiamo l'ambiente virtuale con tutto già presente +RUN uv sync +ENV PYTHONPATH="/app/src" -# Comando di default all'avvio dell'applicazione -CMD ["echo", "Benvenuto in UPO AppAI!"] -CMD ["uv", "run", "src/app.py"] +# Comando di avvio dell'applicazione +CMD ["uv", "run", "src/app"] diff --git a/README.md b/README.md index a545c92..8671638 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,10 @@ L'installazione di questo progetto richiede 3 passaggi totali (+1 se si vuole sv ### **1. Variabili d'Ambiente** -Copia il file `.env.example` in `.env` e modificalo con le tue API keys: +Copia il file `.env.example` in `.env` e successivamente modificalo con le tue API keys: ```sh cp .env.example .env +nano .env # esempio di modifica del file ``` Le API Keys devono essere inserite nelle variabili opportune dopo l'uguale e ***senza*** spazi. Esse si possono ottenere tramite i loro providers (alcune sono gratuite, altre a pagamento).\ @@ -58,11 +59,6 @@ I modelli usati dall'applicazione sono visibili in [src/app/models.py](src/app/m Se si vuole solamente avviare il progetto, si consiglia di utilizzare [Docker](https://www.docker.com), dato che sono stati creati i files [Dockerfile](Dockerfile) e [docker-compose.yaml](docker-compose.yaml) per creare il container con tutti i file necessari e già in esecuzione. ```sh -# Configura le variabili d'ambiente -cp .env.example .env -nano .env # Modifica il file - -# Avvia il container docker compose up --build -d ``` @@ -80,16 +76,17 @@ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | ie curl -LsSf https://astral.sh/uv/install.sh | sh ``` -UV installerà python e creerà automaticamente l'ambiente virtuale con le dipendenze corrette (nota che questo passaggio è opzionale, dato che uv, ogni volta che si esegue un comando, controlla se l'ambiente è attivo e se le dipendenze sono installate): +Dopodiché bisogna creare un ambiente virtuale per lo sviluppo locale e impostare PYTHONPATH. Questo passaggio è necessario per far sì che Python riesca a trovare tutti i moduli del progetto e ad installare tutte le dipendenze. Fortunatamente uv semplifica molto questo processo: ```sh -uv sync --frozen --no-cache +uv venv +uv pip install -e . ``` -A questo punto si può far partire il progetto tramite il comando: +A questo punto si può già modificare il codice e, quando necessario, far partire il progetto tramite il comando: ```sh -uv run python src/app.py +uv run python src/app ``` # **Applicazione** diff --git a/src/app.py b/src/app/__main__.py similarity index 100% rename from src/app.py rename to src/app/__main__.py