Ospitare Umami su un VPS gestito: le vostre statistiche web sul vostro server

Ospitare Umami su un VPS gestito significa tenere le statistiche dei vostri siti su una macchina tutta vostra, che i nostri team tengono aggiornata e supervisionano giorno e notte. Umami è un software libero con licenza MIT che misura il traffico senza cookie. Questa guida segue la sua documentazione ufficiale: l'installazione con Docker Compose e PostgreSQL, HTTPS, il primo accesso, lo script di tracciamento, ciò che il progetto dice dei dati personali, le impostazioni utili, i backup e gli aggiornamenti.

Simon Vasconcelos Lee Di Pubblicato il 15 novembre 2026Lettura: 12 minuti

Tutte le guide

In breve

  1. La licenza MIT consente di usare, modificare e ridistribuire Umami liberamente, in azienda come altrove, a condizione di conservarne l'avviso di copyright.
  2. Installatelo con Docker Compose: il file del progetto avvia Umami e il suo database PostgreSQL, l'unico supportato dalla versione 3.
  3. Generate APP_SECRET e TWO_FACTOR_ENCRYPTION_KEY in modo casuale, servite Umami in HTTPS su un sottodominio dedicato, poi cambiate subito la password dell'account admin.
  4. Aggiungete il vostro sito, poi incollate il suo script di tracciamento nel <head> delle vostre pagine: il tracker non usa cookie.
  5. Esportate il database ogni giorno con pg_dump, conservate il file .env in un luogo sicuro, e aggiornate con docker compose pull.

Che cosa fa Umami

Umami è una piattaforma open source di analisi web e di prodotto. La sua documentazione descrive uno strumento che riunisce traffico, campagne, comportamento dei visitatori, conversioni, fidelizzazione e ricavi, dalla prima visita ai risultati che contano per la vostra attività. È scritto in TypeScript su Next.js, e la sua immagine Docker gira con un account non privilegiato.

Un'istanza segue più siti: ognuno riceve il proprio ID e il proprio script di tracciamento, e i vostri colleghi si orientano grazie agli account e ai team.

Che cosa consente la licenza MIT

Umami è pubblicato con la licenza MIT, a nome di Umami Software, Inc. Concede gratuitamente il diritto di usare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e vendere copie del software. Potete quindi farlo girare per la vostra azienda e per i siti dei vostri clienti, senza alcuna licenza da acquistare.

La sua unica condizione: l'avviso di copyright e l'avviso di autorizzazione accompagnano tutte le copie o le parti sostanziali del software. Come ogni licenza MIT, fornisce il software «così com'è», senza garanzia.

Cookie e dati personali: che cosa dice il progetto

La documentazione presenta Umami come un sistema di analisi senza cookie, senza tracciamento tra siti e senza raccolta automatica di dati personali. In self-hosting, tiene le vostre statistiche sul vostro server: decidete voi dove si trovano e per quanto tempo restano.

DomandaChe cosa dice il progettoFonte
CookieIl tracker web non usa cookie; se il vostro sito abbia bisogno di un avviso sui cookie dipende dagli altri servizi che usate e dai requisiti che si applicanoFAQ
Dati raccoltiPagine viste, URL di provenienza, browser, sistemi operativi, tipi di dispositivo e posizione approssimativaFAQ
Indirizzo IPLa tabella delle sessioni non ha una colonna per l'indirizzo IP; un ID di sessione è un hash del sito, dell'indirizzo, del browser e di un sale che cambia ogni mese per impostazione predefinitaSchema e codice, versione 3.4.1
ConservazioneIn self-hosting, i dati restano finché non li eliminateFAQ
GDPRUmami è progettato pensando alla privacy, e la conformità dipende da come lo configurate e lo usateFAQ
Dati che inviateUn ID visitatore o le proprietà di un evento che scegliete di inviare sono sotto la vostra responsabilitàIntroduzione

Tre impostazioni dello script di tracciamento vanno oltre, se lo desiderate: data-exclude-search toglie i parametri di ricerca dagli URL registrati, data-exclude-hash toglie l'hash, e data-do-not-track disattiva il tracciamento per i browser che espongono la preferenza Do Not Track. La documentazione precisa che quest'ultima impostazione non è, da sola, una soluzione completa di gestione del consenso.

Se identificate i visitatori connessi con data-distinct-id o umami.identify(), la documentazione raccomanda un ID utente interno o un hash anziché un indirizzo e-mail: il valore si legge nell'HTML della pagina.

L'installazione con Docker Compose e PostgreSQL

Il repository fornisce un docker-compose.yml che avvia Umami e il suo database PostgreSQL. Dalla versione 3, PostgreSQL è l'unico database supportato, almeno nella versione 12.14, e la documentazione raccomanda di impostarlo sul fuso orario UTC. Su un server in cui Docker è installato, create una cartella e cominciate dai segreti, generati in modo casuale con openssl, come suggerisce la documentazione:

Terminale
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
TWO_FACTOR_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env

Collocate poi accanto questo compose.yaml. Segue il file del progetto alla versione 3.4.1, con due modifiche: i segreti arrivano dal file .env, e la porta è pubblicata solo su 127.0.0.1.

compose.yaml
services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
      APP_SECRET: ${APP_SECRET}
      TWO_FACTOR_ENCRYPTION_KEY: ${TWO_FACTOR_ENCRYPTION_KEY}
    depends_on:
      db:
        condition: service_healthy
    init: true
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
      interval: 5s
      timeout: 5s
      retries: 5
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
volumes:
  umami-db-data:
Terminale
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat

La documentazione di installazione non indica alcun valore di memoria o di CPU. La taglia dipende dal traffico dei siti seguiti e dal volume di dati che conservate. Su un VPS gestito, descrivetici il vostro uso e vi raccomandiamo la taglia adatta.

HTTPS: il reverse proxy

Umami ascolta in HTTP sulla porta 3000, e la documentazione suggerisce di servirlo dietro il vostro server web, tramite un reverse proxy. Dategli un sottodominio dedicato, come stats.example.com, che punta al server con record A e AAAA. Servire Umami in un percorso passa da BASE_PATH, una variabile letta alla compilazione dell'applicazione: con l'immagine pubblicata, il sottodominio è la strada diretta.

Il proxy deve anche trasmettere l'indirizzo del visitatore. Umami lo legge dalle intestazioni che riceve, tra cui X-Real-IP e X-Forwarded-For: lo usa per distinguere i visitatori e per localizzarne il paese. Se il vostro proxy usa un'altra intestazione, CLIENT_IP_HEADER la indica.

Con Caddy

Caddy ottiene il certificato Let's Encrypt e attiva HTTPS da solo. La sua direttiva reverse_proxy imposta X-Forwarded-For per impostazione predefinita: bastano queste tre righe.

Caddyfile
stats.example.com {
  reverse_proxy 127.0.0.1:3000
}

Con Nginx e Certbot

Questo blocco segue l'esempio Nginx della documentazione di Umami, in ascolto sulla porta 80 per lasciare a Certbot l'attivazione di HTTPS:

Blocco Nginx
server {
  listen 80;
  listen [::]:80;
  server_name stats.example.com;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

Certbot installa poi il certificato e si occupa di rinnovarlo:

Terminale
sudo certbot --nginx

Il primo accesso: l'account admin e l'autenticazione a due fattori

Quando crea il proprio database, Umami apre un account amministratore: nome utente admin, password umami. La documentazione chiede di cambiare questa password al primo accesso.

  1. Aprite il vostro indirizzo HTTPS e accedete con admin e umami.
  2. Aprite Settings dal pulsante del profilo nella barra laterale, poi Profile, e fate clic su Change password.
  3. Nella scheda Security, attivate l'autenticazione a due fattori: scansionate il codice QR con la vostra app di autenticazione, inserite il codice a sei cifre, poi conservate in un luogo sicuro i dieci codici di emergenza, mostrati una sola volta.

Conservate TWO_FACTOR_ENCRYPTION_KEY insieme ai vostri backup: la documentazione avverte che perdere o cambiare questa chiave rende illeggibili i segreti registrati, e ogni utente deve allora configurare di nuovo l'autenticazione a due fattori.

Aggiungere un sito e il suo script di tracciamento

  1. In Websites, fate clic su Add website.
  2. Date un nome al sito, poi il suo dominio: Umami lo usa per escludere le vostre stesse pagine dall'elenco dei siti di provenienza.
  3. Aprite Edit su quel sito e copiate il codice della sezione Tracking code.
  4. Incollatelo nel <head> delle vostre pagine, poi visitate il vostro sito: i dati compaiono subito nella dashboard.
Il codice di tracciamento, nel head
<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>

Uno script con un nome tutto vostro

Alcuni ad blocker bloccano tutto ciò che somiglia a uno strumento di analisi. In self-hosting, Umami è già servito dal vostro dominio, e due variabili vanno oltre: TRACKER_SCRIPT_NAME dà allo script un nome diverso da script.js, e COLLECT_API_ENDPOINT rinomina il punto di raccolta, al posto di /api/send. Lo script chiama poi da solo il nuovo punto; sulle vostre pagine cambia solo la sorgente del codice di tracciamento.

compose.yaml, in environment
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"

Le impostazioni utili

Queste variabili d'ambiente vanno nel servizio umami di compose.yaml, poi docker compose up -d ricrea il container perché vengano prese in considerazione:

VariabileChe cosa faValore
DISABLE_TELEMETRYDisattiva la telemetria anonima che Umami invia al progetto per migliorare l'applicazione1
PRIVATE_MODEDisattiva tutte le chiamate di rete esterne, comprese le icone dei siti, servite da DuckDuckGo per impostazione predefinita1
DISABLE_UPDATESDisattiva la verifica delle nuove versioni1
IGNORE_IPEsclude dalla raccolta indirizzi IP e reti CIDR, come quelli dei vostri ufficiUn elenco separato da virgole
SALT_ROTATIONFissa la frequenza con cui cambia il sale degli ID di sessionemonth per impostazione predefinita
REDIS_URLAggiunge una cache Redis, che la documentazione raccomanda per i siti molto visitati o per più istanzeIl vostro indirizzo Redis
MCP_ENABLEDApre il punto /mcp: il vostro assistente IA legge le vostre statistiche in sola lettura, con una chiave API creata in Settings, API keys1

I backup

Tutto ciò che Umami conserva vive nel suo database PostgreSQL: account, siti, team e statistiche. Esportatelo ogni giorno e subito prima di ogni aggiornamento: in self-hosting, questi dati si conservano senza limiti di tempo. Accanto al database, il file .env contiene i segreti che lo rendono utilizzabile:

ElementoChe cosa conservaDa salvare
Il database PostgreSQLAccount, siti, team, report e tutte le statisticheObbligatorio, con pg_dump
.envLa password del database, APP_SECRET e la chiave dell'autenticazione a due fattoriObbligatorio, cifrato
compose.yamlLa configurazione della vostra istanzaRaccomandato

Esportare il database in funzione

pg_dump produce un'esportazione coerente mentre il database è in uso. Il formato personalizzato, -Fc, è compresso e si ripristina con pg_restore:

Terminale, nella cartella del compose.yaml
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump

Pianificate questo comando sul server almeno una volta al giorno, fate pulizia tra le esportazioni, che si accumulano, e inviatene una copia altrove. Conservate sul disco del server, queste esportazioni rientrano anche nei suoi backup notturni.

Ripristinare

  1. Fermate Umami, lasciando in funzione il database: docker compose stop umami.
  2. Ripristinate l'esportazione nel database, sostituendo gli oggetti esistenti.
  3. Rilanciate Umami, poi verificate che i vostri siti e le loro statistiche ci siano.
Terminale
docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-YYYY-MM-DD.dump
docker compose start umami

Ripetete questo esercizio di tanto in tanto, su una copia: è così che verificate che un backup funzioni.

Gli aggiornamenti

La documentazione fornisce due comandi, dalla cartella del compose.yaml. Il database resta nel suo volume:

Terminale
docker compose pull
docker compose up --force-recreate -d

Al riavvio, il container applica da solo le migrazioni dello schema. La versione 3.4.0, del 17 settembre 2026, ne conteneva due, per le annotazioni e le chiavi API; la versione 3.4.1, del 23 ottobre 2026, non ne contiene. Dopo un aggiornamento importante, come il passaggio alla versione 3, la documentazione suggerisce di lanciare ANALYZE in PostgreSQL perché le dashboard ritrovino la loro velocità:

Terminale
docker compose exec db psql -U umami -d umami -c "ANALYZE;"

Chi fa che cosa su un VPS gestito

Il self-hosting richiede di occuparsi del server oltre che dell'applicazione. Su un VPS gestito, i nostri team prendono in carico il server e seguono la vostra istanza in modo proattivo; Umami resta il vostro software, con le sue impostazioni e i suoi dati.

ArgomentoI nostri teamVoi
Il serverAggiornamenti del sistema e della sicurezza, interventi sul server compresiIl momento più adatto alla vostra attività
La supervisioneServer seguito 24 ore su 24, 7 giorni su 7, con intervento senza attendere la vostra chiamataLa lettura dei log della vostra istanza
UmamiMonitoraggio proattivo: errori, rallentamenti e spazio su disco individuati, correzione raccomandataLa sua installazione, i suoi aggiornamenti e le sue impostazioni, che applicate voi o il vostro assistente IA
I siti e le statisticheIl server che li ospita, sorvegliato e salvatoGli account, i siti seguiti, lo script di tracciamento e la durata di conservazione dei dati
I backupOgni notte, cifrati e conservati fuori dalla macchina; ripristino compresoLe esportazioni proprie di Umami e la richiesta di ripristino, quando ne avete bisogno
La migrazioneIl vostro server attuale migrato, in omaggioIl momento del passaggio

Se preferite che i nostri team intervengano nell'applicazione stessa, questa prestazione si fattura a ore o a forfait, con un preventivo comunicato prima dell'intervento.

Umami, su un server gestito per voi

Con un VPS gestito Simafri, i nostri team tengono aggiornato il server della vostra istanza Umami, lo sorvegliano giorno e notte e intervengono senza attendere la vostra chiamata; seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi o il vostro assistente IA. I backup sono cifrati ogni notte e conservati fuori dalla macchina, il loro ripristino è compreso e la migrazione del vostro server attuale è in omaggio.

Scoprire i VPS gestiti

Domande frequenti

Umami è gratuito per un'azienda?

Sì. Umami ha licenza MIT: potete usarlo, modificarlo e ridistribuirlo in azienda senza alcuna licenza da acquistare, a condizione di conservarne l'avviso di copyright. Resta il costo del server che lo fa girare.

Umami usa i cookie?

No. La FAQ del progetto indica che il tracker web di Umami non usa cookie. Se il vostro sito abbia bisogno di un avviso sui cookie dipende dagli altri servizi che vi usate e dai requisiti che si applicano.

Umami funziona con MySQL?

Non dalla versione 3: Umami supporta PostgreSQL, almeno nella versione 12.14. Un'istanza in versione 2 su MySQL sposta prima i propri dati su PostgreSQL con la guida alla migrazione del progetto, poi passa alla versione 3.

Come installare Umami con Docker Compose?

Partite dal docker-compose.yml del progetto, che avvia Umami e PostgreSQL, con segreti casuali in un file .env e la porta pubblicata su 127.0.0.1. Lanciate docker compose up -d, poi collocate davanti un reverse proxy in HTTPS, su un sottodominio.

Quali sono le credenziali predefinite di Umami?

All'installazione, Umami crea un account admin con la password umami. Cambiatela al primo accesso, in Settings poi Profile, e attivate l'autenticazione a due fattori nella scheda Security, una volta impostata TWO_FACTOR_ENCRYPTION_KEY.

Come rinominare lo script di tracciamento di Umami?

Su un'istanza self-hosted, TRACKER_SCRIPT_NAME dà allo script un nome diverso da script.js, e COLLECT_API_ENDPOINT rinomina il punto di raccolta /api/send. Cambiate poi la sorgente del codice di tracciamento sulle vostre pagine.

Come fare il backup di Umami?

Esportate ogni giorno il database PostgreSQL con pg_dump, dal container del database, e conservate a parte il file .env, che contiene APP_SECRET e la chiave dell'autenticazione a due fattori. Ripristinate con pg_restore, e provate regolarmente il ripristino.

Un VPS gestito copre Umami?

Un VPS gestito copre il server: sistema, sicurezza, supervisione e backup. I nostri team seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi. Un intervento nell'applicazione si fattura a ore o a forfait.

Fonti e documentazione ufficiale

Contattaci