Il repo contiene il prototipo di un'architettura scalabile utilizzabile in un contesto IoT.
I componenti principali dell'applicazione sono:
- Un broker mqtt (mosquitto)
- Un servizio producer (crea un dato finto e lo invia al topic /temperatura)
- Un servizio consumer (quando viene pubblicato un nuovo messaggio su /temperatura invia il dato a un db remoto)
- MongoDB Atlas un istanza online di MongoDB
- FastAPI un framework REST per esporre i dati in database a dei client front-end. 100% compliant allo standard OpenAPI (Swagger)
- Una dashboard responsiva in React.
Ogni componente è dockerizzato (tranne il database). Per far girare l'applicazione la prima volta digitare:
sudo docker-compose up --build
Dopodiché si può omettere --build
(a meno che non si istallino nuove dipendenze).
Una volta che il servizio è attivo, è possibile modificare il sorgente senza bisogno di riavviare per buildare le modifiche.
- Implementare l'autenticazione dei metodi su FastAPI
- Implementare uno scambio di certificati di sicurezza su mqtt
- Sostituire Atlas con un container dedicato e implementare un metodo di autenticazione robusto (flusso consumer -> mongo)
- Creare un clone dell'app che supporti Postgres invece di mongo (va cambiato l'ORM lato FastAPI, ad es. sqlalchemy invece di Motor)
- Creare un clone della dashboard con Vue.JS
- Connettere dei nuovi sensori "fake" e creare nuove route (sul backend) e view (sul frontend)
- Creare un modello di forecasting della temperatura e implementare su FastAPI una route per le predizioni e delle view interessanti su React
- Implementare un meccanismo di job watching e load balancing
- Trovare un modo per aggiornare il componente React del grafico solo se i dati sono diversi (e non ogni volta che viene fatta una richiesta http)
- Implementare CI/CD su gitlab (risolvere prima il networking interno e la build del frontend)
- Implementare un webserver production-ready (nginx)
- Scrivere i test
- Migliorare il networking dell'applicazione
- Risolvere npm start fail su installazioni di docker diverse (probabilmente va rivisto il Dockerfile della dashboard)