Giuseppe.Rega
← Torna ai progetti

CRI Hub — gestionale a microservizi con SSO

Sette servizi .NET, una PWA React offline e un controllo accessi su ESP32.

  • .NET 8
  • PostgreSQL
  • React PWA
  • TypeScript
  • API Gateway
  • Docker
  • GitHub Actions
  • ESP32

Il problema

Un'organizzazione di volontariato gestiva turni, mezzi, anagrafiche e comunicazioni su fogli di calcolo e gruppi di messaggistica. Serviva un sistema unico, con identità condivisa fra più applicazioni, utilizzabile da un telefono in mezzo a un intervento — quindi anche senza rete.

Risultato

Sette servizi in esecuzione dietro un gateway, due frontend distinti (operatori e amministratori) che condividono un design system, autenticazione centralizzata e deploy automatico a ogni push.

L’architettura

Il sistema è diviso per responsabilità, non per comodità di sviluppo:

Servizio Ruolo
sso Identità unica: registrazione, login, emissione e rinnovo dei token
api-gateway Punto d’ingresso unico: routing, rate limiting, log delle richieste
cri-hub-be Dominio applicativo: turni, mezzi, anagrafiche, permessi
notification-be Notifiche push e comunicazioni verso gli utenti
cri-fe PWA React per gli operatori
admin-cri Pannello di amministrazione
cri-ui Design system condiviso dai due frontend

I servizi comunicano sulla rete interna di Docker; solo il gateway è esposto. È una scelta di sicurezza prima che di architettura: un servizio che non ha un indirizzo pubblico non ha una superficie d’attacco pubblica.

Le decisioni che contano

Single Sign-On vero, non login duplicato. L’autenticazione vive in un servizio separato che emette token firmati; gli altri servizi li verificano senza mai vedere una password. Aggiungere un’applicazione al sistema significa insegnarle a verificare un token, non a gestire utenti.

Offline come requisito, non come rifinitura. Il frontend è una Progressive Web App: chi la usa spesso è in movimento, con connettività discontinua. L’applicazione si installa sul telefono, continua a funzionare senza rete e sincronizza quando torna.

Notifiche push al posto delle chat di gruppo. Un avviso che arriva come notifica di sistema si legge; un messaggio in un gruppo si perde.

Un design system condiviso. I due frontend usano la stessa libreria di componenti. Il pannello amministrativo e l’app operatore non divergono nel tempo perché non hanno due copie dei bottoni.

Controllo accessi su ESP32

Il progetto include un modulo hardware basato su ESP32 che apre gli accessi validando le stesse identità del sistema web. La parte interessante non è il microcontrollore: è che la porta e l’applicazione web condividono un’unica fonte di verità su chi è autorizzato a entrare.

Deploy

Ogni repository ha la sua pipeline GitHub Actions su runner self-hosted. Un push su main ricostruisce l’immagine e riavvia il servizio interessato, senza toccare gli altri. Nginx davanti a tutto, con certificati Let’s Encrypt e rinnovo automatico.