Skip to content

Modular microservices architecture for the analysis, management, and visualization of tourism and mobility data for the city of Dozza.

Notifications You must be signed in to change notification settings

DkAngelo/S4C_Project_Microservices_Architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏛️ S4C – Microservices Architecture

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)

Struttura attuale del progetto:

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

Avvio del sistema

  1. Installazione di Docker e Docker Compose
  2. 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
  1. Copia il file .env:
cp .env.example .env
  1. Genera una SECRET_KEY:
python3 -c "import secrets; print(secrets.token_hex(32))"
  1. Aggiorna .env con la chiave appena generata
  2. Avvio di back-end + mobility API + front-end statico:
docker compose up --build

Servizi esposti

Servizio Host port Descrizione
Backend 8080 API principale
Mobility API 8081 API per previsioni turistiche
Frontend 3000 Interfaccia web

Aggiungere un nuovo front-end

  1. Crea cartella:
frontend_ex/
  1. Aggiungi un Dockerfile Nginx:
FROM nginx:stable-alpine
COPY . /usr/share/nginx/html
  1. Aggiungi al docker-compose:
frontend_ex:
	 build: ./frontend_ex
	 ports:
	   - "4000:80"
	 networks:
	   - s4cnet

⚠️ Note:

  • 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_on e restart: always per 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.

Aggiungere nuovi micro-servizi

  1. Crea new_service/
  2. Aggiungi un Dockerfile
  3. Aggiungi al docker-compose:
new_service:
  build: ./new_service
  networks:
    - s4cnet
  1. Il back-end potrebbe chiamarlo come:
http://new_service:PORT/endpoint

Documentazione:

  • back-end: vedi backend/README.md
  • mobility_api: fai riferimento a questo
  • front-end statico: vedi frontend_static/README.md

📎 Riferimenti

Questo progetto nasce dall'unione, il refactoring e la modifica del codice di diverse repository. E' possibile consultare i lavori originali ai seguenti link:

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.

About

Modular microservices architecture for the analysis, management, and visualization of tourism and mobility data for the city of Dozza.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published