Da anni rimando questo articolo. L’ho promesso nel bilancio di fine 2025, l’ho citato di passaggio in altri post, e ogni volta ho trovato una scusa per non scriverlo. Oggi si fa.
Partiamo dall’inizio: cos’è il self-hosting? È quella pratica — chiamatela moda, tendenza, filosofia — che porta informatici e curiosi a volersi ospitare da soli i servizi digitali che di solito deleghiamo ad altri, principalmente le grandi aziende tech. Il motivo principale è quello più ovvio: privacy e controllo. Se il servizio gira sulla tua macchina, lo controlli tu. Nessun altro legge i tuoi dati, non ci sono termini di servizio che cambiano, non ci sono account che vengono sospesi senza preavviso.
I trade-off che nessuno ti dice
C’è però un lato della medaglia che si sente troppo poco. Quelle aziende multimiliardarie che stai sostituendo hanno strutture, team e ridondanze che tu, come singolo, non puoi replicare. Un errore umano nel tuo setup — e credetemi, succede — può essere fatale. A me è capitato: ho perso dati personali perché non avevo fatto i backup come si deve e il servizio non era ripristinabile in modo semplice. Non è una storia piacevole da raccontare, ma è una storia onesta.
Come in tutte le cose, ci sono trade-off. Bisogna decidere su quali servizi si è disposti ad accettare compromessi e su quali no. Il password manager, per esempio, è un servizio su cui non transigo: se lo gestisco io, voglio che sia inattaccabile e ridondante. Un servizio di streaming di film auto-hostato, invece, se muore per una settimana non è la fine del mondo.
L’infrastruttura: Oracle Cloud e Docker
Tutto il mio ambiente di self-hosting vive su Oracle Cloud, e la scelta è motivata da un’unica ragione: è l’unico grande provider cloud che offre un piano permanentemente gratuito degno di questo nome.
Nel free tier di Oracle è incluso un VPS ARM64 con 4 OCPU, 24 GB di RAM e fino a 200 GB di spazio su disco. Un’offerta assolutamente generosa. Esiste anche una variante x86 con la possibilità di creare due o tre macchine virtuali — utile per chi vuole giocare con Kubernetes invece di Docker — ma con 100 GB o meno per macchina diventa limitante. Per il mio caso d’uso, un singolo ARM64 con tanta RAM è la scelta giusta.
Vale la pena notare che Oracle ha cambiato le regole nel tempo: per sbloccare il free tier completo e creare il server ora è necessario inserire una carta di credito. Non addebita nulla, ma la carta ci vuole — il che significa, di fatto, attendere i 18 anni.
Prima di Oracle usavo un Raspberry Pi 4 — uno degli acquisti tech più soddisfacenti che abbia mai fatto, ne parlerò dopo. Per i servizi cloud, però, il Raspberry non bastava più.
Tutto il mio self-hosting passa da Docker. Ho un unico file docker-compose principale che richiama altri file compose annidati — una struttura diventata necessaria quando i servizi erano troppi per stare in un unico file leggibile. Trovate la struttura completa, con tutti i compose e la gestione di secret e credenziali, nel mio repository GitLab.
Vaultwarden: il password manager
Il primo servizio che ho migrato in self-hosting è stato il password manager. Il percorso è stato lungo: ho iniziato con LastPass quando ancora era gratis e funzionava bene, poi verso il 2017-18 sono passato a Bitwarden in cloud — ancora un servizio esterno, ma open source e con un track record migliore.
Il self-hosting vero è arrivato quando ho iniziato ad avere le competenze per farlo e il Raspberry Pi su cui farlo girare. Bitwarden self-hosted all’epoca era completo: installavi il server e ottenevi tutte le funzionalità della versione pro. Poi le cose sono cambiate, ma per fortuna la community ha risposto creando un fork: Vaultwarden, nato come riscrittura in Rust di Bitwarden e tuttora il software che utilizzo.
Vaultwarden è uno di quei servizi che se smettesse di funzionare mi creerebbe seri problemi. Tutte le password, le credenziali, le chiavi SSH e i secret passeranno presto tutti da lì. È trattato con il rispetto che merita: backup ridondanti, monitoraggio attivo, zero esperimenti sopra di esso.
Da NPM a Traefik: il reverse proxy
Per anni ho usato Nginx Proxy Manager per gestire reverse proxy e certificati HTTPS. Funziona, ha un’interfaccia grafica carina, ma ha un problema fondamentale: va gestito graficamente. Ogni volta che creo, distruggo o modifico un container, devo aprire l’interfaccia web e fare le modifiche a mano. Con il numero di servizi che ho, questo era diventato insostenibile.
Il passaggio a Traefik era in lista da tempo, e l’ho fatto verso settembre dell’anno scorso. Traefik si configura via file — tutto è codice, tutto è versionabile, tutto sta nel repository insieme ai compose. La feature che ha reso il passaggio possibile in modo pulito e che ha fatto fare un salto di qualità all’intero stack è stata, diciamolo senza giri di parole, l’arrivo degli agenti AI.
Gli agenti AI: il vero game changer
Apro una parentesi a cui tengo molto, e che approfondirò in un [articolo dedicato].
Configurare Traefik non è banale. Richiede di incastrare regole di routing, middleware, certificatori, reti Docker e una quantità di configurazione YAML che, scritta a mano, porta facilmente a errori silenziosi che ti fanno perdere ore. Fino a qualche tempo fa, fare tutto questo era un processo lungo e frustrante. Oggi no.
Quando ho provato Claude Code all’inizio del 2025 ero già impressionato, ma i modelli dell’epoca avevano ancora troppi limiti: si confondevano con troppi file aperti in contemporanea, non erano efficienti nel navigare codebase complesse, il contesto era limitato. Il risultato era che per compiti come la system administration e il DevOps, gli agenti erano poco utili.
Da settembre-ottobre 2025 la situazione è cambiata radicalmente. I modelli attuali — Sonnet 4.5, Opus 4.1, GPT 5.2, e gli open weight come Kimi, Minimax e DeepSeek v4 — hanno una comprensione della codebase che è su un altro pianeta rispetto a prima. Sanno navigare decine di file di configurazione, capiscono il contesto globale, realizzano modifiche complesse in modo preciso e veloce.
Il risultato pratico: il mio stack Docker è oggi molto più solido di quanto sarebbe mai stato senza questi strumenti. Divisioni di rete complesse, configurazioni Traefik con più strati di sicurezza, middleware personalizzati — cose che a mano mi avrebbero richiesto giorni, realizzate in sessioni di lavoro misurate in ore. Sarebbe interessante fare un git log del repository e misurare concretamente tutto quello che è cambiato da quando gli agenti sono entrati in questo workflow.
OpenWebUI: la mia interfaccia per i modelli
Un altro servizio che uso ogni giorno è OpenWebUI, un’interfaccia unificata per accedere alle API dei principali provider di modelli linguistici. Con OpenWebUI ho accesso a qualsiasi modello di qualsiasi produttore dalla stessa schermata, pagando solo quello che uso effettivamente via API.
La versione recente ha introdotto una feature importante: il native function calling. L’interfaccia espone al modello le proprie utilità — creazione di immagini, esecuzione di codice Python, calendario, task scheduler, automazioni via cron — come tool diretti. Il modello le invoca autonomamente, la piattaforma esegue e restituisce l’output, e il modello continua il ragionamento fino a soddisfare la richiesta. Esattamente come funzionano ChatGPT o Claude, ma con la differenza che puoi vedere ogni singolo passaggio in trasparenza.
C’è poi la questione economica, che vale la pena sottolineare. In questo momento tantissime persone pagano 20, 100 o anche 200 euro al mese per abbonamenti a ChatGPT, Claude o Gemini senza minimamente saturare i limiti del piano. Il consumo medio di chi usa questi strumenti come assistente conversazionale è risibile rispetto a quello che serviva per giustificare un abbonamento mensile. Con OpenWebUI e le API dirette si paga solo quello che si consuma, e per la maggior parte degli utenti il risparmio è sostanziale. È una cosa su cui bisognerebbe creare più consapevolezza.
Quando finirà il mio piano Gemini Pro attuale, probabilmente non rinnoverò nessun abbonamento. Rimarrò su OpenWebUI e userò le API.
Nextcloud e OpenCloud: lo storage
Nextcloud è la mia alternativa a Google Drive. È in self-hosting da quando avevo il Raspberry Pi — uno dei software più datati del mio stack — e ospita i backup di tutti i miei documenti GoodNotes e i file in generale. È rinomatissimo, maturo, fa quello che deve fare.
Affiancato a Nextcloud c’è OpenCloud, che è un po’ la storia di un fork di un fork. Nextcloud nasce come fork di ownCloud, il progetto originale di storage self-hosted. Nel 2023-24 ownCloud viene forkato di nuovo e nasce OpenCloud. Perché è interessante? Perché è costruito su un’architettura a microservizi — ordini di grandezza più leggero di Nextcloud — e ha un’integrazione nativa con l’ecosistema Amazon S3 e compatibili.
Questo significa che OpenCloud non occupa quasi nulla in termini di risorse ma può gestire terabyte di dati perché tutto finisce su un bucket S3. Nel mio caso uso uno storage S3-compatibile che non è Amazon — i 200 GB del VPS di Oracle sono preziosi e non posso sprecarli per archiviare file pesanti. OpenCloud risolve elegantemente il problema: i file importanti o voluminosi vanno lì, e lì restano senza consumare spazio sul disco principale.
È anche il servizio con cui ho perso i dati di cui parlavo all’inizio. La lezione è stata imparata nel modo peggiore, ma imparata.
SpeechForge: il servizio pubblico
Una piccola deviazione verso qualcosa che ho costruito e reso pubblico: SpeechForge (speechforge.jshep.xyz).
È un’applicazione per trascrivere audio di qualsiasi lunghezza — non ha limiti pratici perché spezzetta automaticamente il file prima di inviarlo all’API. Usa Voxtral di Mistral come motore di trascrizione, con risultati molto accurati. L’ho costruita in vibe coding usando un mix di Claude, GPT-5.5 e DeepSeek. Questo è, non a caso, lo stesso servizio che ha trascritto l’audio da cui è nato questo articolo.
Authentik, SyncThing, Immich, N8N, Hermes
Gli altri servizi, in rapida carrellata.
Authentik è il mio sistema di single sign-on. Gestisce l’autenticazione centralizzata per tutti i servizi esposti: per accedere a Nextcloud, OpenCloud o altri, bisogna avere un account su Authentik. Vaultwarden richiede sia Authentik che la sua password nativa — doppio layer. È uno di quei servizi di infrastruttura che non si notano finché funzionano, e che si rimpiangono quando non ci sono.
SyncThing è la soluzione per sincronizzare cartelle specifiche senza passare da Nextcloud. Leggero, peer-to-peer, affidabile.
Immich — o IMIC come dicono i creatori, nome che trovo decisamente cacofonico — è la gestione delle foto. Una delle aggiunte più recenti.
N8N è la piattaforma low-code per le automazioni. Ci ho costruito sopra il mio primo agente personale, MyAssist, che però è in fase di dismissione.
Hermes è l’ultima aggiunta allo stack, e quella a cui dedicherò presto un [articolo separato]. È il nuovo assistente personale AI che sostituisce MyAssist su N8N. Lo uso da circa una settimana e mezza, funziona molto meglio di quanto mi aspettassi — decisamente più leggero e production ready rispetto a OpenClaw, che avevo provato sul Raspberry con risultati deludenti.
Networking: Tailscale e Cloudflare
Per interconnettere tutto uso Tailscale. È una VPN mesh che permette di collegare il VPS, il Raspberry e il computer di casa in modo seamless, senza dover configurare firewall o port forwarding. Funziona sotto qualsiasi tipologia di rete, è praticamente invisibile una volta configurato.
Per il DNS ho scelto Cloudflare. È la scelta migliore disponibile, e lo so. Riconosco anche che è un enorme single point of failure — se Cloudflare crolla, crolla letteralmente metà di internet con lei — ma cambiare DNS in questo momento richiederebbe anche spostare il dominio, e francamente non ne ho voglia. Si va avanti.
L’homelab domestico
Il mondo del mio homelab non è solo il VPS in cloud. C’è anche il Raspberry Pi 4, che è ancora attivo e connesso al tutto via Tailscale. In questo momento ospita Home Assistant a casa di mio nonno, per una futura gestione della domotica e delle telecamere esterne. Uno dei migliori acquisti tech della mia vita — non me ne pento.
C’è poi il computer di casa, che in gran parte funziona anche da server remoto. Ho accesso via Wake-on-LAN e posso accenderlo a distanza (quando non si spegne male, che è una storia a parte). Ospita Jellyfin con 6 TB di storage totale — è la mia base multimediale, con la libreria di film gestita localmente. Ci sono anche altri servizi, principalmente di backup.
Questo è il quadro completo. È un setup che ho costruito nel tempo, pezzo per pezzo, e che continua a evolversi — soprattutto da quando gli agenti AI sono diventati strumenti seri. Se avete domande o volete esplorare qualcosa in dettaglio, il repository è qui, i compose sono leggibili e i commenti sono aperti.
~Joe
P.S. Articolo derivato da una registrazione vocale, trascritto da Voxtral e arrangiato da Claude