Umami hosten op een Managed VPS betekent dat de statistieken van uw websites op een machine blijven die van u is, en die ons team bijwerkt en dag en nacht in de gaten houdt. Umami is vrije software onder de MIT-licentie die het verkeer meet zonder cookies. Deze gids volgt de officiële documentatie: de installatie met Docker Compose en PostgreSQL, HTTPS, de eerste aanmelding, het trackingscript, wat het project zegt over persoonsgegevens, nuttige instellingen, back-ups en updates.
Door Simon Vasconcelos Lee
Gepubliceerd op 15 november 2026Leestijd: 12 minuten
APP_SECRET en TWO_FACTOR_ENCRYPTION_KEY willekeurig, bied Umami via HTTPS aan op een eigen subdomein, en wijzig meteen het wachtwoord van het account admin.<head> van uw pagina's: de tracker gebruikt geen cookies.pg_dump, bewaar het bestand .env op een veilige plek, en werk bij met docker compose pull.Umami is een opensourceplatform voor web- en productanalyse. De documentatie beschrijft een hulpmiddel dat verkeer, campagnes, gedrag van bezoekers, conversies, retentie en omzet samenbrengt, van het eerste bezoek tot de resultaten die voor uw bedrijf tellen. Het is in TypeScript geschreven op Next.js, en de Docker-image draait onder een account zonder bijzondere rechten.
Eén instantie volgt meerdere websites: elke site krijgt een eigen ID en een eigen trackingscript, en uw collega's vinden hun weg via accounts en teams.
Umami wordt gepubliceerd onder de MIT-licentie, op naam van Umami Software, Inc. Die kent kosteloos het recht toe om kopieën van de software te gebruiken, te kopiëren, te wijzigen, samen te voegen, te publiceren, te verspreiden, in sublicentie te geven en te verkopen. U kunt het dus draaien voor uw bedrijf en voor de websites van uw klanten, zonder een licentie te kopen.
De enige voorwaarde: de copyrightvermelding en de toestemmingsvermelding gaan mee met alle kopieën of wezenlijke delen van de software. Zoals elke MIT-licentie levert ze de software “zoals hij is”, zonder garantie.
De documentatie stelt Umami voor als analyse zonder cookies, zonder tracking over sites heen en zonder automatische verzameling van persoonsgegevens. Zelf gehost blijven uw statistieken op uw eigen server: u beslist waar ze staan en hoe lang ze blijven.
| Vraag | Wat het project zegt | Bron |
|---|---|---|
| Cookies | De webtracker gebruikt geen cookies; of uw site een cookiemelding nodig heeft, hangt af van de andere diensten die u gebruikt en van de eisen die van toepassing zijn | FAQ |
| Verzamelde gegevens | Paginaweergaven, verwijzende URL's, browsers, besturingssystemen, apparaattypen en een geschatte locatie | FAQ |
| IP-adres | De tabel van de sessies heeft geen kolom voor het IP-adres; een sessie-ID is een hash van de website, het adres, de browser en een salt die standaard elke maand wisselt | Schema en code, versie 3.4.1 |
| Bewaartermijn | Zelf gehost worden de gegevens bewaard tot u ze verwijdert | FAQ |
| AVG | Umami is ontworpen met privacy in gedachten, en de naleving hangt af van hoe u het configureert en gebruikt | FAQ |
| Gegevens die u verstuurt | Een bezoekers-ID of eigenschappen van events die u zelf kiest te versturen, vallen onder uw verantwoordelijkheid | Inleiding |
Drie instellingen van het trackingscript gaan verder, als u dat wilt: data-exclude-search haalt de zoekparameters uit de geregistreerde URL's, data-exclude-hash haalt de hash weg, en data-do-not-track schakelt de tracking uit voor browsers die de voorkeur Do Not Track doorgeven. De documentatie merkt op dat deze laatste instelling op zichzelf geen volledige oplossing voor toestemmingsbeheer is.
Identificeert u aangemelde bezoekers met data-distinct-id of umami.identify(), dan raadt de documentatie een interne gebruikers-ID of een hash aan in plaats van een e-mailadres: de waarde is leesbaar in de HTML van de pagina.
De repository levert een docker-compose.yml mee die Umami en zijn PostgreSQL-database start. Sinds versie 3 is PostgreSQL de enige ondersteunde database, minimaal versie 12.14, en de documentatie raadt aan haar op de tijdzone UTC in te stellen. Maak op een server waar Docker is geïnstalleerd een map aan en begin met de geheimen, willekeurig gegenereerd met openssl, zoals de documentatie voorstelt:
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
Plaats daarna dit compose.yaml ernaast. Het volgt het bestand van het project op versie 3.4.1, met twee wijzigingen: de geheimen komen uit het bestand .env, en de poort wordt alleen op 127.0.0.1 gepubliceerd.
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:
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat
DATABASE_URL: de enige verplichte variabele, de verbindingsreeks van de database. Het hexadecimale wachtwoord gaat er ongewijzigd in; een wachtwoord met speciale tekens zou procentcodering vragen.APP_SECRET: een willekeurige tekenreeks die de authenticatietokens beveiligt, uniek voor elke installatie. In de code van versie 3.4.1 telt ze ook mee in de berekening van de sessie-ID's: houd haar stabiel.TWO_FACTOR_ENCRYPTION_KEY: 64 hexadecimale tekens die de geheimen van de tweestapsverificatie versleutelen. Zonder deze sleutel kan niemand tweestapsverificatie inschakelen.admin aan. De sonde /api/heartbeat antwoordt {"ok":true} zodra Umami klaar is.latest volgt de laatst gepubliceerde versie. Het register van het project publiceert ook versietags, zoals 3.4.1, om de versie vast te leggen die u draait.De installatiedocumentatie noemt geen cijfer voor geheugen of CPU. De grootte hangt af van het verkeer van de gevolgde websites en van het volume aan gegevens dat u bewaart. Vertel ons op een managed VPS over uw gebruik, dan raden wij u de passende grootte aan.
Umami luistert via HTTP op poort 3000, en de documentatie stelt voor het achter uw webserver aan te bieden, via een reverse proxy. Geef het een eigen subdomein, zoals stats.example.com, dat met A- en AAAA-records naar de server wijst. Umami onder een pad aanbieden loopt via BASE_PATH, een variabele die wordt gelezen wanneer de applicatie wordt gebouwd: met de gepubliceerde image is het subdomein de rechtstreekse weg.
De proxy moet ook het adres van de bezoeker doorgeven. Umami leest het uit de headers die het ontvangt, waaronder X-Real-IP en X-Forwarded-For: het gebruikt het om bezoekers van elkaar te onderscheiden en hun land te bepalen. Gebruikt uw proxy een andere header, dan noemt CLIENT_IP_HEADER die.
Caddy verkrijgt zelf het Let's Encrypt-certificaat en schakelt HTTPS zelf in. Zijn directive reverse_proxy zet standaard X-Forwarded-For: deze drie regels zijn alles wat u nodig hebt.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Dit blok volgt het Nginx-voorbeeld uit de documentatie van Umami, en luistert op poort 80 zodat Certbot HTTPS kan plaatsen:
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 plaatst daarna het certificaat en zorgt voor de vernieuwing ervan:
sudo certbot --nginx
Wanneer Umami zijn database aanmaakt, opent het een beheerdersaccount: gebruikersnaam admin, wachtwoord umami. De documentatie vraagt dit wachtwoord bij uw eerste aanmelding te wijzigen.
admin en umami.Bewaar TWO_FACTOR_ENCRYPTION_KEY bij uw back-ups: de documentatie waarschuwt dat het verlies of de wijziging van deze sleutel de opgeslagen geheimen onleesbaar maakt, waarna elke gebruiker de tweestapsverificatie opnieuw moet instellen.
<head> van uw pagina's en bezoek daarna uw website: de gegevens verschijnen meteen in het dashboard.<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>
next/script in plaats van een gewone tag <script>.data-domains beperkt de tracking tot uw productiedomeinen, zodat uw testomgevingen buiten de statistieken blijven.localStorage.setItem('umami.disabled', 1).Sommige adblockers blokkeren alles wat op statistieken lijkt. Zelf gehost wordt Umami al vanaf uw eigen domein aangeboden, en twee variabelen gaan verder: TRACKER_SCRIPT_NAME geeft het script een andere naam dan script.js, en COLLECT_API_ENDPOINT hernoemt het verzamelpunt, in plaats van /api/send. Het script roept het nieuwe punt dan zelf aan; op uw pagina's verandert alleen de bron van de trackingcode.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Deze omgevingsvariabelen komen in de dienst umami van compose.yaml, waarna docker compose up -d de container opnieuw aanmaakt om ze toe te passen:
| Variabele | Wat ze doet | Waarde |
|---|---|---|
DISABLE_TELEMETRY | Schakelt de anonieme telemetrie uit die Umami naar het project stuurt om de applicatie te verbeteren | 1 |
PRIVATE_MODE | Schakelt alle externe netwerkoproepen uit, ook de pictogrammen van websites, die standaard van DuckDuckGo komen | 1 |
DISABLE_UPDATES | Schakelt de controle op nieuwe versies uit | 1 |
IGNORE_IP | Sluit IP-adressen en CIDR-bereiken uit van de verzameling, zoals die van uw kantoren | Een lijst gescheiden door komma's |
SALT_ROTATION | Bepaalt hoe vaak de salt achter de sessie-ID's wisselt | Standaard month |
REDIS_URL | Voegt een Redis-cache toe, die de documentatie aanraadt voor websites met veel verkeer of meerdere instanties | Uw Redis-adres |
MCP_ENABLED | Opent het punt /mcp: uw AI-assistent leest uw statistieken met alleen leestoegang, met een API-sleutel aangemaakt in Settings, API keys | 1 |
Alles wat Umami bewaart, staat in zijn PostgreSQL-database: accounts, websites, teams en statistieken. Exporteer haar elke dag en vlak voor elke update: zelf gehost worden deze gegevens zonder tijdslimiet bewaard. Naast de database bevat het bestand .env de geheimen die haar bruikbaar maken:
| Onderdeel | Wat het bewaart | Back-up |
|---|---|---|
| De PostgreSQL-database | Accounts, websites, teams, rapporten en alle statistieken | Verplicht, met pg_dump |
.env | Het wachtwoord van de database, APP_SECRET en de sleutel van de tweestapsverificatie | Verplicht, versleuteld |
compose.yaml | De configuratie van uw instantie | Aanbevolen |
pg_dump maakt een consistente export terwijl de database in gebruik is. Het eigen formaat, -Fc, is gecomprimeerd en wordt teruggezet met pg_restore:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Plan deze opdracht op de server minstens één keer per dag in, ruim de exports, die zich opstapelen, regelmatig op, en stuur een kopie naar elders. Staan deze exports op de schijf van de server, dan vallen ze ook onder de nachtelijke back-ups.
docker compose stop umami.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
Herhaal deze oefening af en toe, op een kopie: zo controleert u of een back-up werkt.
De documentatie geeft twee opdrachten, vanuit de map van compose.yaml. De database blijft in haar volume:
docker compose pull
docker compose up --force-recreate -d
Bij het herstarten past de container zelf de schemamigraties toe. Versie 3.4.0, van 17 september 2026, bracht er twee mee, voor annotaties en API-sleutels; versie 3.4.1, van 23 oktober 2026, bevat er geen. Na een grote upgrade, zoals de overstap naar versie 3, stelt de documentatie voor ANALYZE uit te voeren in PostgreSQL, zodat de dashboards hun snelheid terugkrijgen:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine van het bestand. De overstap naar een nieuwe hoofdversie van PostgreSQL vraagt een export en terugzetten, of pg_upgrade.Self-hosting vraagt dat u naast de applicatie ook de server beheert. Op een managed VPS neemt ons team de server voor zijn rekening en houdt het uw instantie proactief in de gaten; Umami blijft uw software, met zijn instellingen en gegevens.
| Onderwerp | Ons team | U |
|---|---|---|
| De server | Systeem- en beveiligingsupdates, ingrepen op de server inbegrepen | Het moment dat bij uw activiteit past |
| De monitoring | Server 24 uur per dag en 7 dagen per week bewaakt, met ingrijpen zonder op uw oproep te wachten | Het lezen van de logboeken van uw instantie |
| Umami | Proactief toezicht: fouten, vertragingen en schijfruimte opgespoord, correctie aangeraden | De installatie, de updates en de instellingen, die u toepast, zelf of via uw AI-assistent |
| De websites en de statistieken | De server die ze draagt, bewaakt en geback-upt | De accounts, de gevolgde websites, het trackingscript en de bewaartermijn van de gegevens |
| De back-ups | Elke nacht, versleuteld en buiten de machine bewaard; terugzetten inbegrepen | De eigen exports van Umami, en het verzoek om terug te zetten, wanneer u dat nodig hebt |
| De migratie | Uw huidige server gemigreerd, gratis | Het moment van de overschakeling |
Wilt u liever dat ons team in de applicatie zelf ingrijpt, dan wordt die dienstverlening per uur of tegen een vast bedrag gefactureerd, met een offerte voordat het werk begint.
Met een Managed VPS van Simafri houdt ons team de server van uw Umami-instantie up-to-date, bewaakt hem dag en nacht en grijpt in zonder op uw oproep te wachten; het houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast, zelf of via uw AI-assistent. De back-ups worden elke nacht versleuteld en buiten de machine bewaard, het terugzetten is inbegrepen, en de migratie van uw huidige server is gratis.
Ja. Umami valt onder de MIT-licentie: u mag het in een bedrijf gebruiken, wijzigen en verspreiden zonder een licentie te kopen, op voorwaarde dat u de copyrightvermelding behoudt. Wat overblijft, zijn de kosten van de server waarop het draait.
Nee. De FAQ van het project vermeldt dat de webtracker van Umami geen cookies gebruikt. Of uw website een cookiemelding nodig heeft, hangt af van de andere diensten die u erop gebruikt en van de eisen die van toepassing zijn.
Niet meer sinds versie 3: Umami ondersteunt PostgreSQL, minimaal versie 12.14. Een instantie op versie 2 met MySQL verhuist haar gegevens eerst naar PostgreSQL met de migratiegids van het project, en stapt daarna over naar versie 3.
Vertrek van de docker-compose.yml van het project, die Umami en PostgreSQL start, met willekeurige geheimen in een bestand .env en de poort gepubliceerd op 127.0.0.1. Voer docker compose up -d uit en zet er daarna een reverse proxy met HTTPS voor, op een subdomein.
Bij de installatie maakt Umami een account admin aan met het wachtwoord umami. Wijzig het bij uw eerste aanmelding, in Settings en daarna Profile, en schakel de tweestapsverificatie in via het tabblad Security, zodra TWO_FACTOR_ENCRYPTION_KEY is ingesteld.
Op een zelf gehoste instantie geeft TRACKER_SCRIPT_NAME het script een andere naam dan script.js, en hernoemt COLLECT_API_ENDPOINT het verzamelpunt /api/send. Wijzig daarna de bron van de trackingcode op uw pagina's.
Exporteer de PostgreSQL-database elke dag met pg_dump, vanuit de databasecontainer, en bewaar het bestand .env apart, want het bevat APP_SECRET en de sleutel van de tweestapsverificatie. Zet terug met pg_restore, en test het terugzetten regelmatig.
Een managed VPS dekt de server: systeem, beveiliging, monitoring en back-ups. Ons team houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast. Een ingreep in de applicatie wordt per uur of tegen een vast bedrag gefactureerd.
Simafri
Laten we het over uw website hebben
Vertel ons in een paar woorden over uw project: wij nemen snel contact met u op.
Bedankt! Uw aanvraag is verzonden. We nemen spoedig contact met u op.
Liever per e-mail? Schrijf ons op support@simafri.com.