At hoste Umami på en Managed VPS betyder, at analysen af dine websites bliver på en maskine, der er din egen, og som vores teams holder opdateret og overvåger dag og nat. Umami er fri software under MIT-licensen, som måler trafikken uden cookies. Denne guide følger den officielle dokumentation: installation med Docker Compose og PostgreSQL, HTTPS, det første login, sporingsscriptet, hvad projektet siger om persondata, nyttige indstillinger, backup og opdateringer.
Af Simon Vasconcelos Lee
Udgivet den 15. november 2026Læsetid: 12 minutter
APP_SECRET og TWO_FACTOR_ENCRYPTION_KEY tilfældigt, server Umami over HTTPS på sit eget underdomæne, og skift derefter straks adgangskoden til kontoen admin.<head> på dine sider: sporingen bruger ikke cookies.pg_dump, opbevar filen .env et sikkert sted, og opdatér med docker compose pull.Umami er en platform med åben kildekode til web- og produktanalyse. Dens dokumentation beskriver et værktøj, der samler trafik, kampagner, de besøgendes adfærd, konverteringer, fastholdelse og omsætning, fra det første besøg til de resultater, der betyder noget for din virksomhed. Den er skrevet i TypeScript på Next.js, og dens Docker-image kører under en konto uden særlige rettigheder.
Én instans sporer flere websites: hvert får sit eget id og sit eget sporingsscript, og dine kolleger finder rundt via konti og teams.
Umami udgives under MIT-licensen i navnet Umami Software, Inc. Den giver gratis ret til at bruge, kopiere, ændre, sammenflette, udgive, distribuere, underlicensere og sælge kopier af softwaren. Du kan altså køre den for din virksomhed og for dine kunders websites uden at skulle købe en licens.
Dens eneste betingelse: copyrightmeddelelsen og tilladelsesmeddelelsen følger med alle kopier eller væsentlige dele af softwaren. Som enhver MIT-licens leverer den softwaren «som den er», uden garanti.
Dokumentationen præsenterer Umami som analyse uden cookies, uden sporing på tværs af websites og uden automatisk indsamling af persondata. Selvhostet holder den din analyse på din egen server: du bestemmer, hvor den ligger, og hvor længe den bliver.
| Spørgsmål | Hvad projektet siger | Kilde |
|---|---|---|
| Cookies | Websporingen bruger ikke cookies; om dit website har brug for en cookiemeddelelse, afhænger af de andre tjenester, du bruger, og de krav, der gælder | FAQ |
| Indsamlede data | Sidevisninger, henvisende adresser, browsere, styresystemer, enhedstyper og omtrentlig placering | FAQ |
| IP-adresse | Sessionstabellen har ingen kolonne til IP-adressen; et sessions-id er en hash af websitet, adressen, browseren og et salt, der som standard skiftes hver måned | Skema og kode, version 3.4.1 |
| Opbevaring | Selvhostet opbevares dataene, indtil du sletter dem | FAQ |
| GDPR | Umami er udviklet med privatlivet for øje, og overholdelsen afhænger af, hvordan du konfigurerer og bruger den | FAQ |
| Data, du sender | Et besøgs-id eller egenskaber ved hændelser, som du vælger at sende, er dit ansvar | Introduktion |
Tre indstillinger i sporingsscriptet går længere, hvis du ønsker det: data-exclude-search fjerner søgeparametrene fra de registrerede adresser, data-exclude-hash fjerner hashen, og data-do-not-track slår sporingen fra for browsere, der angiver præferencen Do Not Track. Dokumentationen bemærker, at denne sidste indstilling ikke i sig selv er en komplet løsning til håndtering af samtykke.
Hvis du identificerer indloggede besøgende med data-distinct-id eller umami.identify(), anbefaler dokumentationen et internt bruger-id eller en hash frem for en e-mailadresse: værdien kan læses i sidens HTML.
Repositoryet leverer en docker-compose.yml, der starter Umami og dens PostgreSQL-database. Siden version 3 er PostgreSQL den eneste understøttede database, mindst i version 12.14, og dokumentationen anbefaler at sætte den til tidszonen UTC. På en server, hvor Docker er installeret, opretter du en mappe og begynder med dens hemmeligheder, genereret tilfældigt med openssl, som dokumentationen foreslår:
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
Læg derefter denne compose.yaml ved siden af. Den følger projektets fil i version 3.4.1 med to ændringer: hemmelighederne kommer fra filen .env, og porten publiceres kun på 127.0.0.1.
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: den eneste obligatoriske variabel, forbindelsesstrengen til databasen. Den hexadecimale adgangskode indsættes, som den er; en adgangskode med specialtegn ville kræve procentkodning.APP_SECRET: en tilfældig streng, der sikrer godkendelsestokens, unik for hver installation. I koden til version 3.4.1 indgår den også i beregningen af sessions-id'er: hold den stabil.TWO_FACTOR_ENCRYPTION_KEY: 64 hexadecimale tegn, der krypterer hemmelighederne til tofaktorgodkendelse. Uden den kan ingen slå tofaktorgodkendelse til.admin. Sonden /api/heartbeat svarer {"ok":true}, når Umami er klar.latest følger den senest udgivne version. Projektets registry udgiver også versionstags, som 3.4.1, til at fastlåse den, du kører.Installationsdokumentationen opgiver intet tal for hukommelse eller CPU. Størrelsen afhænger af trafikken på de sporede websites og af den mængde data, du gemmer. På en Managed VPS beskriver du blot din brug for os, og vi anbefaler den størrelse, der passer.
Umami lytter over HTTP på port 3000, og dokumentationen foreslår at servere den bag din webserver via en reverse proxy. Giv den sit eget underdomæne, som stats.example.com, der peger på serveren med A- og AAAA-records. At servere Umami under en sti går via BASE_PATH, en variabel, der læses, når applikationen bygges: med det udgivne image er underdomænet den direkte vej.
Proxyen skal også videregive den besøgendes adresse. Umami læser den i de headere, den modtager, blandt andet X-Real-IP og X-Forwarded-For: den bruger den til at skelne de besøgende fra hinanden og til at bestemme deres land. Hvis din proxy bruger en anden header, angiver CLIENT_IP_HEADER dens navn.
Caddy henter selv certifikatet fra Let's Encrypt og slår HTTPS til. Dens direktiv reverse_proxy sætter som standard X-Forwarded-For: disse tre linjer er alt, hvad der skal til.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Denne blok følger Nginx-eksemplet fra Umamis dokumentation og lytter på port 80, så Certbot kan sætte HTTPS op:
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 installerer derefter certifikatet og sørger for at forny det:
sudo certbot --nginx
Når Umami opretter sin database, åbner den en administratorkonto: brugernavn admin, adgangskode umami. Dokumentationen beder dig om at ændre denne adgangskode ved dit første login.
admin og umami.Opbevar TWO_FACTOR_ENCRYPTION_KEY sammen med dine backups: dokumentationen advarer om, at hvis denne nøgle mistes eller ændres, bliver de gemte hemmeligheder ulæselige, og hver bruger skal så tilmelde sig tofaktorgodkendelse igen.
<head> på dine sider, og besøg derefter dit website: dataene vises straks på dashboardet.<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>
next/script frem for et almindeligt <script>-tag.data-domains begrænser sporingen til dine produktionsdomæner, hvilket holder dine testmiljøer uden for statistikken.localStorage.setItem('umami.disabled', 1).Visse annonceblokkere blokerer alt, der ligner analyse. Selvhostet serveres Umami allerede fra dit eget domæne, og to variabler går længere: TRACKER_SCRIPT_NAME giver scriptet et andet navn end script.js, og COLLECT_API_ENDPOINT omdøber indsamlingsendpointet i stedet for /api/send. Scriptet kalder derefter selv det nye endpoint; kun kilden i sporingskoden ændres på dine sider.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Disse miljøvariabler lægges i tjenesten umami i compose.yaml, og derefter genskaber docker compose up -d containeren, så de tages i betragtning:
| Variabel | Hvad den gør | Værdi |
|---|---|---|
DISABLE_TELEMETRY | Slår den anonyme telemetri fra, som Umami sender til projektet for at forbedre applikationen | 1 |
PRIVATE_MODE | Slår alle eksterne netværkskald fra, også websitenes ikoner, som som standard hentes fra DuckDuckGo | 1 |
DISABLE_UPDATES | Slår søgningen efter nye versioner fra | 1 |
IGNORE_IP | Udelukker IP-adresser og CIDR-områder fra indsamlingen, for eksempel dine kontorers | En kommasepareret liste |
SALT_ROTATION | Angiver, hvor ofte saltet bag sessions-id'erne skiftes | month som standard |
REDIS_URL | Tilføjer en Redis-cache, som dokumentationen anbefaler til websites med meget trafik eller til flere instanser | Din Redis-adresse |
MCP_ENABLED | Åbner endpointet /mcp: din AI-assistent læser din analyse med læseadgang via en API-nøgle oprettet under Settings, API keys | 1 |
Alt, hvad Umami gemmer, ligger i dens PostgreSQL-database: konti, websites, teams og analyse. Eksportér den hver dag og lige før hver opdatering: selvhostet opbevares disse data uden tidsbegrænsning. Ved siden af databasen rummer filen .env de hemmeligheder, der gør den brugbar:
| Element | Hvad det rummer | Skal der tages backup |
|---|---|---|
| PostgreSQL-databasen | Konti, websites, teams, rapporter og al analyse | Obligatorisk, med pg_dump |
.env | Databasens adgangskode, APP_SECRET og nøglen til tofaktorgodkendelse | Obligatorisk, krypteret |
compose.yaml | Din instans' konfiguration | Anbefalet |
pg_dump laver en konsistent eksport, mens databasen er i brug. Det tilpassede format, -Fc, er komprimeret og gendannes med pg_restore:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Planlæg denne kommando på serveren mindst én gang om dagen, ryd op i eksporterne, som hober sig op, og send en kopi et andet sted hen. Lagt på serverens disk indgår disse eksporter også i dens natlige backup.
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
Gentag denne øvelse en gang imellem på en kopi: sådan kontrollerer du, at en backup virker.
Dokumentationen giver to kommandoer, fra mappen med compose.yaml. Databasen bliver i sit volumen:
docker compose pull
docker compose up --force-recreate -d
Ved genstart anvender containeren selv skemaets migreringer. Version 3.4.0 fra den 17. september 2026 havde to af dem med, til annoteringer og API-nøgler; version 3.4.1 fra den 23. oktober 2026 har ingen. Efter en større opgradering, som overgangen til version 3, foreslår dokumentationen at køre ANALYZE i PostgreSQL, så dashboardene får deres hastighed tilbage:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine. Overgangen til en ny hovedversion af PostgreSQL kræver en eksport og en gendannelse eller pg_upgrade.Selvhosting kræver, at du holder serveren ud over selve applikationen. På en Managed VPS tager vores teams sig af serveren og følger din instans proaktivt; Umami forbliver din software, med dens indstillinger og data.
| Emne | Vores teams | Dig |
|---|---|---|
| Serveren | Opdateringer af system og sikkerhed, indgreb på serveren inkluderet | Det tidspunkt, der passer til din drift |
| Overvågningen | Serveren følges døgnet rundt, alle ugens dage, med indgreb uden at vente på dit opkald | Gennemlæsning af din instans' logfiler |
| Umami | Proaktiv opfølgning: fejl, langsomme svartider og diskplads opdages, og en rettelse anbefales | Installation, opdateringer og indstillinger, som du gennemfører, selv eller med din AI-assistent |
| Websites og analyse | Den server, der bærer dem, overvåget og sikkerhedskopieret | Kontiene, de sporede websites, sporingsscriptet og opbevaringstiden for dataene |
| Backup | Hver nat, krypteret og opbevaret uden for maskinen; gendannelse inkluderet | De eksporter, der er specifikke for Umami, og anmodningen om gendannelse, når du får brug for den |
| Migreringen | Din nuværende server flyttes, uden beregning | Tidspunktet for omlægningen |
Hvis du foretrækker, at vores teams griber ind i selve applikationen, faktureres den ydelse pr. time eller som fast pris, med et overslag oplyst før indgrebet.
Med en Managed VPS fra Simafri holder vores teams serveren bag din Umami-instans opdateret, overvåger den dag og nat og griber ind uden at vente på dit opkald; de følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører, selv eller med din AI-assistent. Backup krypteres hver nat og opbevares uden for maskinen, gendannelsen er inkluderet, og migreringen af din nuværende server sker uden beregning.
Ja. Umami er under MIT-licensen: du kan bruge, ændre og videredistribuere den i din virksomhed uden at skulle købe en licens, så længe du beholder dens copyrightmeddelelse. Tilbage er udgiften til den server, der kører den.
Nej. Projektets FAQ angiver, at Umamis websporing ikke bruger cookies. Om dit website har brug for en cookiemeddelelse, afhænger af de andre tjenester, du bruger på det, og de krav, der gælder.
Ikke siden version 3: Umami understøtter PostgreSQL, mindst i version 12.14. En instans i version 2 på MySQL flytter først sine data til PostgreSQL med projektets migreringsguide og opgraderer derefter til version 3.
Tag udgangspunkt i projektets docker-compose.yml, som kører Umami og PostgreSQL, med tilfældige hemmeligheder i en fil .env og porten publiceret på 127.0.0.1. Kør docker compose up -d, og sæt derefter en reverse proxy med HTTPS foran på et underdomæne.
Ved installationen opretter Umami en konto admin med adgangskoden umami. Skift den ved dit første login under Settings og derefter Profile, og slå tofaktorgodkendelse til under fanen Security, når TWO_FACTOR_ENCRYPTION_KEY er angivet.
På en selvhostet instans giver TRACKER_SCRIPT_NAME scriptet et andet navn end script.js, og COLLECT_API_ENDPOINT omdøber indsamlingsendpointet /api/send. Ændr derefter kilden i sporingskoden på dine sider.
Eksportér PostgreSQL-databasen hver dag med pg_dump fra databasens container, og opbevar filen .env separat, da den rummer APP_SECRET og nøglen til tofaktorgodkendelse. Gendan med pg_restore, og test gendannelsen regelmæssigt.
En Managed VPS dækker serveren: system, sikkerhed, overvågning og backup. Vores teams følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører. Et indgreb i selve applikationen faktureres pr. time eller som fast pris.
Simafri
Lad os tale om din hjemmeside
Fortæl os om dit projekt med få ord: vi vender hurtigt tilbage til dig.
Tak! Din forespørgsel er sendt. Vi vender tilbage til dig hurtigst muligt.
Foretrækker du e-mail? Skriv til os på support@simafri.com.