Questo repository contiene un sistema modulare composto da:
- Back-end Flask (API REST)
- Mobility API (FastAPI + modello predittivo)
- Front-end Statico (HTML/CSS/JS ospitato da Nginx)
- Database SQLite generabili dall'utente
L'obiettivo del sistema è quello di mettere a disposizione dell'utenza della città di Dozza diversi servizi che aiutano alla comprensione dell'attività turistica sul territorio. Il sistema è progettato per essere:
- Completamente dockerizzato
- Utilizzabile anche in modalità standalone
- Flessibile: si può affiancare qualsiasi front-end alternativo
- Estendibile (altri micro-servizi possono essere aggiunti facilmente)
s4c-project/
│
├── backend/
│ └── app/
│ │ ├── api.py
│ │ ├── main.py
│ │ └── shared/
│ │ ├── geoutils.py
│ │ ├── sim.py
│ │ ├── utils.py
│ │ └── __init__.py
│ ├── db/
│ │ └── *.db (creati dall’utente o tramite script SQL)
│ ├── requirements.txt
│ └── Dockerfile
│
├── mobility_api/
│ ├── main.py
│ ├── *.pkl (files per la ricostruzione del modello predittivo)
│ ├── requirements.txt
│ └── Dockerfile
│
├── frontend_static
│ ├── default.conf
│ ├── Dockerfile
│ ├── nginx.conf
│ └── public/
│ ├── *.html
│ └── static/
│ ├── assets/
│ └── images/
│
└── docker-compose.yml
- Installazione di Docker e Docker Compose
- Creazione e popolazione dei database;'; Il back-end utilizza SQLite. Gli script si trovano come da schema nella cartella
sql/.
cd backend/db
sqlite3 utenti.db < ../../sql/utenti.sql
sqlite3 parcheggi.db < ../../sql/parcheggi.sql
sqlite3 linee.db < ../../sql/linee.sql
sqlite3 simulazioni.db < ../../sql/simulazioni.sql
- Copia il file
.env:
cp .env.example .env- Genera una SECRET_KEY:
python3 -c "import secrets; print(secrets.token_hex(32))"- Aggiorna
.envcon la chiave appena generata - Avvio di back-end + mobility API + front-end statico:
docker compose up --build| Servizio | Host port | Descrizione |
|---|---|---|
| Backend | 8080 | API principale |
| Mobility API | 8081 | API per previsioni turistiche |
| Frontend | 3000 | Interfaccia web |
- Crea cartella:
frontend_ex/
- Aggiungi un Dockerfile Nginx:
FROM nginx:stable-alpine
COPY . /usr/share/nginx/html
- Aggiungi al docker-compose:
frontend_ex:
build: ./frontend_ex
ports:
- "4000:80"
networks:
- s4cnet
- Se il tuo frontend è statico utilizza Nginx come reverse proxy verso il backend (vedi default.conf).
Per questo motivo, il container del frontend richiede che il backend sia già in esecuzione al momento dell’avvio.
Il file docker-compose.yml quindi ha bisogno di
depends_onerestart: alwaysper garantire che il frontend venga avviato correttamente anche se il backend richiede qualche secondo in più per inizializzarsi - Il back-end non richiede modifiche: basta che il nuovo front-end punti alle API esposte.
- Crea
new_service/ - Aggiungi un Dockerfile
- Aggiungi al docker-compose:
new_service:
build: ./new_service
networks:
- s4cnet
- Il back-end potrebbe chiamarlo come:
http://new_service:PORT/endpoint
- back-end: vedi
backend/README.md - mobility_api: fai riferimento a questo
- front-end statico: vedi
frontend_static/README.md
Questo progetto nasce dall'unione, il refactoring e la modifica del codice di diverse repository. E' possibile consultare i lavori originali ai seguenti link:
- Interfaccia web + back-end (di Andrea Casarini)
- API Mobility (di Michele Arioli)
L’attuale implementazione rappresenta un refactoring completo, che include:
- separazione chiara tra front-end, back-end e logiche condivise
- ristrutturazione dei moduli e dei componenti riutilizzabili
- revisione dell’architettura API
- gestione più robusta degli errori
- compatibilità con Docker e micro-servizi
- revisione delle configurazioni e dei meccanismi di inizializzazione
L’autorialità originale è pienamente riconosciuta.
Questa repository offre una versione pulita, modulare e pronta alla produzione basata su tali fondamenta.