Pubblicato il Marzo 15, 2024

In sintesi:

  • Il problema non è la mancanza di hardware potente, ma l’approccio: un vecchio portatile con 8GB di RAM è sufficiente se si usano strumenti leggeri come k3s.
  • Replicare un ambiente enterprise a casa è possibile (e formativo) automatizzando tutto con tool come Ansible e Terraform e adottando pratiche GitOps.
  • Impostare il monitoraggio (Prometheus/Grafana) e alert di budget sul cloud è fondamentale per imparare senza rischiare costi imprevisti.
  • Un home lab ben documentato e gestito “as-code” diventa un progetto concreto da presentare ai colloqui di lavoro per dimostrare competenze pratiche.

L’ambizione di ogni studente o sistemista junior è mettere le mani su tecnologie come Docker e Kubernetes. Ma l’entusiasmo si scontra presto con una dura realtà: come fare pratica senza accesso ai server aziendali o senza bruciare centinaia di euro in abbonamenti cloud? Molti pensano che la soluzione sia acquistare hardware costoso o affidarsi ciecamente ai “free tier” dei grandi provider, sperando di non dimenticare un’istanza accesa. Queste soluzioni, però, spesso mancano il punto centrale o introducono rischi inutili.

La verità è che l’ostacolo non è quasi mai il budget. L’ostacolo è l’approccio. Si può imparare di più da un vecchio portatile con risorse limitate che da un account AWS con crediti infiniti, a patto di trattare il proprio laboratorio domestico non come un passatempo, ma come il primo, vero progetto di ingegneria. E se la vera chiave non fosse la potenza di calcolo, ma l’ingegneria della scarsità? Se i limiti di budget e hardware fossero in realtà un’opportunità per imparare a fare scelte strategiche, ottimizzare le risorse e automatizzare i processi, proprio come in un’azienda reale?

Questo articolo non è l’ennesimo tutorial passo-passo. È una guida strategica per costruire un “home lab” DevOps che sia realmente formativo. Esploreremo le scelte tecnologiche intelligenti per far girare un cluster Kubernetes con risorse minime, vedremo come automatizzare la configurazione per renderla riproducibile, implementeremo un sistema di monitoraggio per capire cosa succede “sotto il cofano” e impareremo a gestire il tutto con pratiche GitOps, trasformando un semplice PC in una potente palestra per la tua carriera.

In questa guida, analizzeremo le decisioni chiave che ti trasformeranno da semplice utente di tool a un ingegnere in grado di progettare, costruire e gestire un’infrastruttura moderna e resiliente, il tutto a costo quasi zero. Ecco gli argomenti che affronteremo.

Bastano 8GB di RAM? Come far girare un cluster Kubernetes locale sul tuo vecchio portatile

La prima barriera all’ingresso nel mondo di Kubernetes è spesso psicologica: “Non ho abbastanza potenza”. L’idea di far girare un’orchestratore complesso su un vecchio laptop sembra un’impresa impossibile. In realtà, questa è la prima occasione per applicare l’ingegneria della scarsità: scegliere lo strumento giusto per il lavoro. Invece di una distribuzione Kubernetes completa, esistono alternative ultraleggere progettate proprio per scenari con risorse limitate. Strumenti come k3s, Kind o Minikube sono nati per risolvere questo problema.

La scelta non è banale e dipende dall’obiettivo. k3s, ad esempio, è una distribuzione certificata CNCF ridotta all’osso, ideale per replicare un ambiente di produzione leggero. Kind (Kubernetes in Docker) è perfetto per testare rapidamente la compatibilità dei manifesti, mentre Minikube rimane una scelta solida e versatile per chi inizia. Analizzare il loro consumo di risorse è fondamentale per una scelta consapevole.

Questo confronto, basato su un’ analisi comparativa delle performance, mostra chiaramente come sia possibile operare con un impatto minimo.

Confronto consumo risorse k3s vs Minikube vs Kind su 8GB RAM
Distribuzione RAM Idle CPU Idle RAM con 5 pod Tempo avvio
k3s 423-502 MiB 3.77% ~1GB < 1 min
Minikube ~600 MiB 4.27% 1.2GB 2-3 min
Kind 463-581 MiB 30% ~900MB < 30 sec

Esperienza pratica: cluster k3s su un vecchio laptop

Un ottimo esempio pratico è quello di un developer che ha creato un cluster Kubernetes completo utilizzando un vecchio laptop con 8GB di RAM e Ubuntu 20.04. Utilizzando k3s al posto di una distribuzione standard, è riuscito a far girare stabilmente 3 nodi virtuali con Multipass, allocando solo 2GB di RAM a ciascuno. Il cluster era in grado di supportare applicazioni come Rancher per la gestione, Nginx per l’ingress e diverse applicazioni demo. Questa esperienza dimostra che l’hardware di 5-7 anni fa non è un limite, ma un’opportunità per imparare a ottimizzare.

Non serve un server nuovo. Un mini PC usato, un NUC di qualche anno fa o persino il tuo vecchio portatile sono più che sufficienti. Piattaforme come Subito.it, i mercatini di forum specializzati come HardwareUpgrade.it o rivenditori di PC ricondizionati sono miniere d’oro per trovare hardware a meno di 150€.

La vera competenza non sta nell’usare hardware potente, ma nel saper trarre il massimo da quello che si ha a disposizione.

Terraform o Ansible: quale imparare per primo per configurare il tuo laboratorio automaticamente?

Una volta scelto l’hardware e la distribuzione Kubernetes, il passo successivo è evitare la “sindrome da click”. Configurare tutto a mano è un ottimo modo per imparare la prima volta, ma è un pessimo modo di lavorare. L’automazione è il cuore del DevOps e il tuo home lab è il luogo perfetto per padroneggiarla. I due strumenti principali in questo ambito sono Terraform e Ansible. La domanda non è “quale è meglio?”, ma “quale imparare per primo e per fare cosa?”.

La distinzione è fondamentale: Terraform è per il provisioning (dichiarare e creare l’infrastruttura: macchine virtuali, reti, etc.), mentre Ansible è per la configurazione (installare software, gestire file, avviare servizi su infrastruttura già esistente). Impararli entrambi è un obiettivo cruciale, dato che, secondo i dati di Talent.com per il 2024, lo stipendio medio per un DevOps Engineer in Italia è di 42.000€, con una forte richiesta di competenze di automazione.

Confronto visivo tra workflow Ansible e Terraform per automazione DevOps

Nel contesto di un home lab, il percorso più logico è iniziare con Ansible per automatizzare la configurazione del tuo primo nodo (installare Docker, k3s, etc.). Successivamente, si introduce Terraform per creare le macchine virtuali in modo programmatico, per poi passare il testimone ad Ansible per la configurazione finale. Questo approccio combinato è esattamente quello che si usa nelle aziende.

Il tuo piano d’azione per l’automazione: da Ansible a Terraform

  1. Settimane 1-2: Parti dalle basi di Ansible. Impara a installare pacchetti, copiare file di configurazione e gestire i servizi (es. systemd).
  2. Settimana 3: Scrivi il tuo primo playbook Ansible. L’obiettivo è automatizzare l’installazione di Docker e k3s su una macchina pulita con un solo comando.
  3. Settimana 4: Introduci Terraform. Inizia creando macchine virtuali locali usando il provider Docker o un hypervisor come Proxmox.
  4. Settimana 5: Unisci i due mondi. Usa Terraform per creare l’infrastruttura (le VM) e invoca Ansible per eseguirne la configurazione.
  5. Settimana 6: Implementa un workflow completo “Infrastructure as Code”. Committa i tuoi file Terraform e Ansible su Git. Ora hai un “Lab-as-Code”.

Aver automatizzato la creazione e configurazione del tuo lab non è solo una comodità: è la prova tangibile che hai compreso uno dei principi fondamentali delle operation moderne.

Grafana e Prometheus: come vedere cosa succede nel tuo cluster e imparare l’observability

Il tuo cluster è attivo e automatizzato. Le applicazioni girano. Ma cosa succede quando qualcosa va storto? Un pod va in `CrashLoopBackOff`, un’applicazione rallenta senza motivo. Qui entra in gioco l’observability. Non si tratta solo di “monitorare”, ma di avere la capacità di porre domande al tuo sistema per capirne lo stato interno. Nel mondo Kubernetes, la coppia d’oro per l’observability è formata da Prometheus e Grafana.

Prometheus è un sistema di time-series database che “raschia” (scrape) metriche dai tuoi componenti e applicazioni. Raccoglie dati su CPU, RAM, richieste di rete, errori HTTP e molto altro. Grafana, invece, è lo strumento di visualizzazione che si collega a Prometheus (e a molte altre fonti dati) per creare dashboard interattive e potenti. Invece di guardare log testuali, puoi vedere l’andamento del consumo di memoria di un pod, correlarlo con un picco di richieste e capire la causa di un problema in pochi secondi.

Implementare questo stack nel tuo home lab non è un lusso, è uno strumento di apprendimento potentissimo. Ogni errore diventa un’opportunità di indagine, un “caso di studio” personale. È il tuo ciclo di feedback personale: deploy, osserva, impara, migliora.

Debug guidato: risolvere un pod in stato “Pending” con Grafana

Immagina questo scenario reale: un’applicazione appena deployata rimane bloccata in stato ‘Pending’. Invece di tirare a indovinare, apri la dashboard di Grafana dedicata a Kubernetes. Noti subito che il nodo del cluster ha solo 500MB di RAM disponibile su 8GB totali. I grafici mostrano un picco anomalo di memoria causato da un altro pod che, per un errore di configurazione, sta consumando 6GB. La causa è chiara. La soluzione è immediata: impostare dei `resource limits` appropriati su quel pod per limitarne il consumo e permettere al nuovo di essere schedulato. Senza observability, avresti perso ore.

Andare oltre la semplice visualizzazione è il passo successivo: configurare alert. Puoi istruire Prometheus per notificarti (via Telegram, Slack, email) quando una metrica supera una soglia critica, ad esempio se un pod riavvia troppe volte o se lo spazio su disco sta per esaurirsi. Questo ti insegna a gestire un sistema in modo proattivo, non reattivo.

Installare Prometheus e Grafana trasforma il tuo lab da una scatola nera a un sistema trasparente, dove ogni evento può essere analizzato e compreso.

L’errore di lasciare istanze AWS accese dopo l’esperimento: come impostare budget alert

Prima o poi, il tuo home lab ti starà stretto e vorrai sperimentare con i servizi cloud reali. AWS, Google Cloud e Azure offrono tutti dei “Free Tier” generosi, perfetti per fare pratica. Ma qui si nasconde la trappola più comune e costosa per un principiante: la distrazione. Crei un’istanza, un database, un load balancer per un test… e ti dimentichi di spegnere tutto. La bolletta a fine mese può essere uno shock.

La prima linea di difesa è la conoscenza. È fondamentale capire che, come specificato nelle FAQ ufficiali AWS, molti servizi del Free Tier sono gratuiti solo per i primi 12 mesi dalla creazione dell’account e hanno dei limiti di utilizzo mensili. Superarli, anche di poco, comporta costi. Affidarsi alla propria memoria per cancellare le risorse è una strategia perdente. La soluzione, ancora una volta, è l’automazione e la gestione proattiva del rischio.

Tutti i principali provider cloud offrono un servizio di budget alert. La prima cosa da fare, ancora prima di creare una VM, è impostare un budget mensile (es. 5€) e configurare un alert che ti avvisi via email quando raggiungi il 50%, 75% e 90% di quella soglia. Questa è la base. Ma per una sicurezza a prova di errore, si può fare un passo in più: un “kill switch” automatico.

L’idea è usare le stesse fondamenta del cloud per proteggersi. Ad esempio, su AWS, si può creare una funzione Lambda che si attiva quando il budget raggiunge una certa soglia e che procede a terminare automaticamente tutte le risorse non critiche. Questo non solo ti salva da bollette inaspettate, ma è anche un eccellente esercizio di “serverless” e automazione avanzata. Ecco i passi per creare uno script del genere:

  • Crea un budget in AWS Budgets con una soglia desiderata (es. 90% di 10€).
  • Configura una notifica SNS (Simple Notification Service) che venga attivata dal budget.
  • Crea una funzione Lambda (in Python o Node.js) che elenchi tutte le tue risorse (istanze EC2, database RDS, etc.) che hanno un tag specifico, come `Environment=dev-lab`.
  • Aggiungi alla funzione la logica per terminare o eliminare tutte le risorse identificate da quel tag.
  • Collega la funzione Lambda alla notifica SNS, in modo che venga eseguita automaticamente quando l’alert scatta.
  • Testa il tutto con un budget molto basso (1€) per assicurarti che funzioni come previsto.

Imparare a controllare i costi è una competenza tanto importante quanto saper scrivere un Dockerfile. Dimostra maturità e responsabilità professionale.

GitOps nel piccolo: come gestire le modifiche al tuo lab come se fossi in un team enterprise

Hai un cluster funzionante, l’infrastruttura è definita come codice (IaC) e il monitoring è attivo. Ora, come gestisci i deployment e le modifiche alle tue applicazioni? L’approccio manuale con `kubectl apply -f` funziona, ma non è scalabile, tracciabile né sicuro. È qui che il tuo home lab può fare il salto di qualità definitivo, adottando una metodologia che sta rivoluzionando il settore: il GitOps.

Il principio del GitOps è semplice e potente: un repository Git è l’unica fonte di verità (`single source of truth`) per lo stato desiderato della tua infrastruttura e delle tue applicazioni. Qualsiasi modifica, dal cambio di versione di un’immagine Docker all’aggiunta di una nuova applicazione, avviene tramite un `git push`. Uno strumento automatico, chiamato “operatore” (come Argo CD o Flux), rileva la differenza tra lo stato descritto in Git e quello attuale del cluster e si occupa di applicare le modifiche necessarie per sincronizzarli.

Adottare GitOps nel tuo lab ti offre vantaggi enormi. Ogni modifica è una commit, quindi hai una cronologia completa di chi ha fatto cosa e perché. Tornare a una versione precedente è facile come fare un `git revert`. E soprattutto, separi le credenziali di accesso al cluster dagli utenti: nessuno, nemmeno tu, dovrebbe più usare `kubectl` direttamente per le modifiche.

Esempio di struttura: un repository “Lab-as-Code”

Un eccellente punto di partenza per strutturare il tuo progetto è analizzare repository pubblici di altri appassionati. Ad esempio, esistono template su GitHub che mostrano una configurazione completa di un home lab basato su Kubernetes. Questi repository solitamente includono la configurazione Terraform per il provisioning, i manifesti YAML delle applicazioni organizzati per namespace, la configurazione di Argo CD per il workflow GitOps e persino policy di sicurezza. Anche se l’autore ha poi migrato ad altre tecnologie, la struttura del repository rimane una lezione preziosa su come organizzare il proprio “Lab-as-Code”, separando nettamente infrastruttura e applicazioni.

Avere un home lab gestito in GitOps è un argomento potentissimo durante un colloquio. Dimostra che non sei solo capace di usare gli strumenti, ma che comprendi le best practice per la gestione di sistemi complessi in modo sicuro e collaborativo. Ecco come puoi presentarlo:

  • Descrivi l’architettura: “Ho implementato un cluster k3s multi-nodo gestito interamente in modalità GitOps con Argo CD.”
  • Quantifica l’automazione: “Grazie a questo approccio, il tempo per deployare una nuova versione di un’app è passato da un processo manuale di 15 minuti a un `git push` che richiede meno di 2 minuti per la sincronizzazione.”
  • Sottolinea le competenze: “Utilizzo Terraform per l’Infrastructure as Code, mentre lo stato di tutte le applicazioni è definito dichiarativamente in un repository Git.”
  • Menziona la sicurezza: “Ho implementato RBAC, network policies e gestisco i segreti in modo sicuro tramite Sealed Secrets, tutto via Git.”

Il tuo home lab smette di essere un esperimento e diventa un portfolio vivente delle tue competenze DevOps più avanzate.

Perché “sul mio computer funziona” non è più una scusa accettabile con i Container?

Facciamo un passo indietro per affrontare il “perché” fondamentale dietro a tutto questo sforzo. Per anni, la frase “strano, sul mio computer funziona!” è stata la croce di ogni sviluppatore e sistemista. Un’applicazione sviluppata su una macchina con una certa versione di Python e specifiche librerie si rifiutava di partire in produzione, dove l’ambiente era leggermente diverso. Questo problema, noto come “deriva ambientale”, causava ritardi, frustrazione e infiniti cicli di debug. I container, e Docker in particolare, sono nati per risolvere esattamente questo.

Un container è un pacchetto standardizzato che include un’applicazione e tutte le sue dipendenze: librerie, file di configurazione, runtime. Questo pacchetto è isolato dal sistema operativo sottostante e garantisce che l’applicazione si comporti esattamente nello stesso modo ovunque venga eseguita, dal portatile dello sviluppatore al server di produzione nel cloud. Come sottolinea il team di GeeksforGeeks:

Docker è uno strumento che semplifica il processo di sviluppo, packaging e deployment delle applicazioni. Utilizzando i container, Docker ti permette di creare ambienti leggeri e autonomi che funzionano in modo coerente su qualsiasi sistema.

– GeeksforGeeks DevOps Team, Docker Tutorial – GeeksforGeeks

Costruire un container riproducibile, tuttavia, richiede disciplina. Non basta scrivere un `Dockerfile` generico. Bisogna essere meticolosi per garantire che l’ambiente sia veramente sigillato e prevedibile. Ecco una checklist essenziale per passare dal codice locale a un container a prova di bomba:

  • Specificità Assoluta: Nel tuo `Dockerfile`, specifica sempre la versione esatta del linguaggio o dell’immagine base (es. `FROM node:18.17.0-alpine` invece di `FROM node`).
  • Dipendenze Bloccate: Assicurati che il tuo file di dipendenze (es. `package-lock.json`, `requirements.txt`) contenga le versioni esatte di ogni libreria, non range approssimativi.
  • Variabili d’Ambiente: Non inserire mai dati sensibili o configurazioni variabili nel `Dockerfile`. Usa un file `.env.example` per documentare le variabili necessarie e forniscile al container al momento dell’esecuzione.
  • Build Multi-Stage: Per linguaggi compilati, usa build multi-stage per separare l’ambiente di compilazione da quello di runtime. Questo riduce drasticamente la dimensione dell’immagine finale e la sua superficie d’attacco.
  • Test Locale: Prima di inviare l’immagine a un registro, testala in locale con `docker-compose` per simulare l’interazione con altri servizi, come un database.

Padroneggiare i container significa eliminare l’incertezza dal processo di deployment, rendendo la scusa “funziona da me” un ricordo del passato.

L’errore di scrivere codice troppo legato alle API proprietarie del provider cloud

Man mano che acquisisci familiarità con un provider cloud come AWS, è facile cadere nella tentazione di usare i suoi servizi gestiti più specifici. Perché gestire un database PostgreSQL in un container quando c’è Amazon RDS? Perché configurare un message queue quando c’è SQS? Questi servizi sono potenti e convenienti, ma nascondono un rischio strategico: il vendor lock-in. Scrivere codice che dipende pesantemente dalle API proprietarie di un singolo provider ti lega a quell’ecosistema, rendendo difficile e costoso un eventuale passaggio a un altro cloud o un ritorno a un’infrastruttura on-premise.

Questa non è una preoccupazione puramente teorica. Nel mercato del lavoro attuale, la flessibilità è una competenza chiave. Un’analisi delle posizioni aperte rivela una tendenza chiara: secondo i dati di Glassdoor a Novembre 2023, oltre 600 posizioni DevOps aperte in Italia richiedevano esplicitamente competenze multi-cloud (AWS, Azure, GCP). Le aziende cercano professionisti in grado di operare in ambienti ibridi e di non essere vincolati a un unico fornitore. Il tuo home lab è il posto ideale per coltivare questa mentalità cloud-agnostica.

L’approccio consiste nell’utilizzare, per quanto possibile, tecnologie open-source che offrano API compatibili con gli standard di mercato. Ad esempio, invece di usare direttamente AWS S3, puoi installare nel tuo cluster Kubernetes un software come MinIO.

MinIO: Storage S3-compatible per sviluppo cloud-agnostic

MinIO è un server di object storage ad alte prestazioni che espone un’API compatibile al 100% con quella di Amazon S3. Implementandolo nel tuo home lab, puoi sviluppare e testare applicazioni che interagiscono con lo storage esattamente come farebbero con S3. Il vantaggio è enorme: il giorno in cui deciderai di deployare la tua applicazione su AWS, dovrai semplicemente cambiare l’endpoint e le credenziali nel file di configurazione. Il codice applicativo rimarrà identico. Lo stesso vale se decidi di spostarti su Google Cloud Storage o su un altro provider che supporta l’API S3. Hai eliminato il lock-in a livello di codice.

Questo principio si applica a molti altri ambiti: usare PostgreSQL o MySQL in un container invece di un servizio di database proprietario, o RabbitMQ invece di una coda di messaggi specifica. L’obiettivo non è evitare il cloud, ma imparare a usarlo in modo strategico, mantenendo il controllo e la portabilità del proprio lavoro.

Sviluppare competenze portabili ti rende un professionista più prezioso e versatile, capace di adattarsi a qualsiasi contesto tecnologico.

Da ricordare

  • L’ingegneria della scarsità è la tua migliore alleata: i limiti hardware ti costringono a fare scelte ingegneristiche intelligenti.
  • “Lab-as-Code”: tratta il tuo laboratorio come un prodotto software, con tutta l’infrastruttura e la configurazione gestite su Git.
  • L’observability non è solo monitoraggio, ma il tuo principale strumento di apprendimento per capire il comportamento dei sistemi distribuiti.
  • La gestione dei costi cloud tramite alert e automazione è una competenza professionale, non un dettaglio amministrativo.
  • Pensa sempre in modo cloud-agnostico, privilegiando standard aperti per garantire la portabilità delle tue competenze e delle tue applicazioni.

Function-as-a-Service (FaaS): quando conviene usare AWS Lambda invece di un server virtuale classico?

Ora che hai padroneggiato l’arte di gestire container e cluster, il tuo orizzonte si allarga. Sai costruire e gestire server virtuali (VPS) e servizi complessi. Ma c’è un’altra filosofia di calcolo che sta prendendo sempre più piede: il serverless, e in particolare il modello Function-as-a-Service (FaaS), di cui AWS Lambda è l’esempio più noto. La domanda sorge spontanea: quando ha senso abbandonare il controllo di un server per affidarsi a una funzione che “gira nel vuoto”?

La risposta, come sempre in ingegneria, è: “dipende dal carico di lavoro”. Un server virtuale classico (o un pod in Kubernetes) è come un’automobile: la paghi (in termini di risorse o denaro) sia che tu la stia usando sia che sia ferma in garage. È sempre accesa, pronta a rispondere, ideale per carichi di lavoro costanti e prevedibili. Una funzione FaaS, invece, è come un taxi: esiste solo quando ne hai bisogno. Scrivi una piccola porzione di codice, la carichi sul cloud e il provider si occupa di eseguirla solo quando viene attivata da un evento (una richiesta HTTP, un file caricato su uno storage, etc.). Paghi solo per i millisecondi di esecuzione. Se non viene chiamata, il costo è zero.

Capire questo trade-off tra latenza/controllo e costo/scalabilità è un segno di maturità ingegneristica. Un home lab ti permette di sperimentare entrambi gli approcci per capire quale si adatta meglio a diversi scenari. Per carichi di lavoro sporadici o imprevedibili, il FaaS è quasi sempre la scelta economicamente più vantaggiosa.

Questa matrice decisionale può aiutarti a scegliere la soluzione giusta a seconda dello scenario, basandosi su una logica di ottimizzazione dei costi e delle performance.

Matrice decisionale: FaaS vs VPS per carichi di lavoro comuni
Scenario Volume richieste Soluzione consigliata Motivazione
Elaborazione notturna dati 1 volta/giorno FaaS Paghi solo 5 minuti di esecuzione invece di 24h di VM
API per app mobile Variabile (0-10000/ora) FaaS Auto-scaling automatico, nessun costo durante inattività
E-commerce B2C Costante (>1000/ora) VPS economico Costo prevedibile, latenza costante
Blog personale Basso (<100/giorno) FaaS o static hosting Costi quasi zero per traffico minimo

Saper scegliere lo strumento giusto per il problema giusto è il cuore del nostro mestiere. Per orientarti meglio in queste decisioni, ripassa gli scenari ideali per ogni approccio computazionale.

Il tuo laboratorio DevOps casalingo ti ha trasformato. Non sei più solo uno studente che impara una tecnologia, ma un ingegnere che progetta soluzioni. Hai imparato a lavorare con risorse limitate, ad automatizzare, a osservare, a gestire i rischi e a pensare in modo strategico. Inizia oggi a costruire il tuo primo playbook Ansible o il tuo primo `Dockerfile`. Il tuo prossimo passo di carriera inizia lì, nel tuo home lab.

Scritto da Alessandro Volpi, System Administrator e Network Engineer certificato, specializzato in infrastrutture critiche, connettività e Green IT. Ha gestito datacenter e reti aziendali complesse per oltre 18 anni.