Héberger Umami sur un VPS géré, c'est garder la mesure d'audience de vos sites sur une machine à vous, que nos équipes tiennent à jour et supervisent jour et nuit. Umami est un logiciel libre sous licence MIT, qui mesure le trafic sans témoins (cookies). Ce guide suit sa documentation officielle : l'installation avec Docker Compose et PostgreSQL, HTTPS, la première connexion, le script de suivi, ce que dit le projet des données personnelles, les réglages utiles, les sauvegardes et les mises à jour.
Par Simon Vasconcelos Lee
Publié le 15 novembre 2026Lecture : 12 minutes
APP_SECRET et TWO_FACTOR_ENCRYPTION_KEY au hasard, servez Umami en HTTPS sous son propre sous-domaine, puis changez aussitôt le mot de passe du compte admin.<head> de vos pages : le traceur n'utilise pas de témoins.pg_dump, gardez le fichier .env en lieu sûr, et mettez à jour avec docker compose pull.Umami est une plateforme open source de mesure d'audience web et produit. Sa documentation la décrit comme un outil qui réunit le trafic, les campagnes, le comportement des visiteurs, les conversions, la fidélité et le chiffre d'affaires, de la première visite jusqu'aux résultats qui comptent pour votre activité. Elle est écrite en TypeScript sur Next.js, et son image Docker tourne sous un compte sans privilèges.
Une instance suit plusieurs sites : chacun reçoit son identifiant et son script de suivi, et vos collaborateurs s'y retrouvent par comptes et par équipes.
Umami est publié sous licence MIT, au nom d'Umami Software, Inc. Elle accorde gratuitement le droit d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, de sous-licencier et de vendre des copies du logiciel. Vous pouvez donc le faire tourner pour votre entreprise et pour les sites de vos clients, sans licence à acheter.
Sa seule condition : la mention de copyright et le texte de la permission accompagnent toute copie ou partie substantielle du logiciel. Comme toute licence MIT, elle fournit le logiciel « tel quel », sans garantie.
La documentation présente Umami comme une mesure d'audience sans témoins, sans suivi d'un site à l'autre et sans collecte automatique de données personnelles. Auto-hébergé, il garde vos statistiques sur votre propre serveur : vous décidez où elles vivent et combien de temps elles restent.
| Question | Ce qu'en dit le projet | Source |
|---|---|---|
| Témoins | Le traceur web n'utilise pas de témoins ; le besoin d'un bandeau dépend des autres services de votre site et des exigences qui s'y appliquent | FAQ |
| Données collectées | Pages vues, sites référents, navigateurs, systèmes, types d'appareils et localisation approximative | FAQ |
| Adresse IP | La table des sessions n'a pas de colonne pour l'adresse IP ; l'identifiant d'une session est une empreinte du site, de l'adresse, du navigateur et d'un sel qui change chaque mois par défaut | Schéma et code, version 3.4.1 |
| Conservation | Auto-hébergées, les données restent tant que vous ne les supprimez pas | FAQ |
| RGPD | Umami est conçu pour la protection de la vie privée, et la conformité dépend de la façon dont vous le configurez et l'utilisez | FAQ |
| Données envoyées par vous | Un identifiant de visiteur ou des propriétés d'événement que vous choisissez d'envoyer relèvent de votre responsabilité | Introduction |
Trois réglages du script de suivi vont plus loin, si vous le souhaitez : data-exclude-search retire les paramètres de recherche des adresses relevées, data-exclude-hash en retire l'ancre, et data-do-not-track coupe le suivi pour les navigateurs qui expriment la préférence Do Not Track. La documentation rappelle que ce dernier réglage n'est pas, à lui seul, une solution complète de gestion du consentement.
Si vous identifiez les visiteurs connectés avec data-distinct-id ou umami.identify(), la documentation recommande un identifiant interne ou une empreinte plutôt qu'une adresse e-mail : la valeur se lit dans le code HTML de la page.
Le dépôt fournit un docker-compose.yml qui lance Umami et sa base PostgreSQL. Depuis la version 3, PostgreSQL est la seule base prise en charge, en version 12.14 au minimum, et la documentation recommande de la régler sur le fuseau UTC. Sur un serveur où Docker est installé, créez un dossier et commencez par ses secrets, tirés au hasard avec openssl, comme le conseille la documentation :
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
Placez ensuite ce compose.yaml à côté. Il reprend le fichier du projet à la version 3.4.1, avec deux changements : les secrets viennent du fichier .env, et le port n'est publié que sur 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 : la seule variable obligatoire, l'adresse de connexion à la base. Le mot de passe tiré en hexadécimal s'y écrit tel quel ; un mot de passe à caractères spéciaux demanderait l'encodage pourcent.APP_SECRET : une chaîne aléatoire qui protège les jetons d'authentification, propre à chaque installation. Dans le code de la version 3.4.1, elle entre aussi dans le calcul des identifiants de session : gardez-la stable.TWO_FACTOR_ENCRYPTION_KEY : 64 caractères hexadécimaux qui chiffrent les secrets de double authentification. Sans elle, personne ne peut activer la double authentification.admin. La sonde /api/heartbeat répond {"ok":true} quand Umami est prêt.latest suit la dernière version publiée. Le registre du projet publie aussi des étiquettes par version, comme 3.4.1, pour fixer celle que vous faites tourner.La documentation d'installation ne chiffre ni la mémoire ni le processeur. La taille dépend du trafic des sites suivis et du volume de données conservées. Sur un VPS géré, décrivez-nous votre usage et nous vous recommandons la taille qui convient.
Umami écoute en HTTP sur le port 3000, et la documentation propose de le servir derrière votre serveur web, par un mandataire inverse. Donnez-lui son propre sous-domaine, comme stats.example.com, pointé vers le serveur par des enregistrements A et AAAA. Servir Umami sous un chemin passe par BASE_PATH, une variable lue à la construction de l'application : avec l'image publiée, le sous-domaine est la voie directe.
Le mandataire doit aussi transmettre l'adresse du visiteur. Umami la lit dans les en-têtes qu'il reçoit, dont X-Real-IP et X-Forwarded-For : elle lui sert à distinguer les visiteurs et à situer leur pays. Si votre mandataire utilise un autre en-tête, CLIENT_IP_HEADER le désigne.
Caddy obtient lui-même le certificat Let's Encrypt et active HTTPS. Sa directive reverse_proxy ajoute X-Forwarded-For d'office : ces trois lignes suffisent.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Ce bloc reprend l'exemple Nginx de la documentation d'Umami, en écoute sur le port 80 pour laisser Certbot installer HTTPS :
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 installe ensuite le certificat et se charge de le renouveler :
sudo certbot --nginx
À la création de sa base, Umami ouvre un compte administrateur : identifiant admin, mot de passe umami. La documentation demande de changer ce mot de passe dès la première connexion.
admin et umami.Gardez TWO_FACTOR_ENCRYPTION_KEY avec vos sauvegardes : la documentation prévient que perdre ou changer cette clé rend illisibles les secrets déjà enregistrés, et chaque utilisateur doit alors réactiver sa double authentification.
<head> de vos pages, puis visitez votre site : les données paraissent aussitôt dans le tableau de bord.<script defer src="https://stats.example.com/script.js" data-website-id="identifiant-du-site"></script>
next/script plutôt qu'une balise <script> simple.data-domains limite le suivi à vos domaines de production, ce qui garde hors des statistiques vos environnements de test.localStorage.setItem('umami.disabled', 1).Certains bloqueurs de publicité écartent tout ce qui ressemble à de la mesure d'audience. Auto-hébergé, Umami se sert déjà depuis votre propre domaine, et deux variables vont plus loin : TRACKER_SCRIPT_NAME donne un autre nom au script, au lieu de script.js, et COLLECT_API_ENDPOINT renomme l'adresse de collecte, au lieu de /api/send. Le script appelle alors de lui-même la nouvelle adresse ; seule la source du code de suivi change sur vos pages.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Ces variables d'environnement se placent dans le service umami de compose.yaml, puis docker compose up -d recrée le conteneur pour les prendre en compte :
| Variable | Ce qu'elle fait | Valeur |
|---|---|---|
DISABLE_TELEMETRY | Coupe la télémétrie anonyme qu'Umami envoie au projet pour améliorer l'application | 1 |
PRIVATE_MODE | Coupe tout appel réseau extérieur, y compris les icônes des sites, servies par défaut depuis DuckDuckGo | 1 |
DISABLE_UPDATES | Coupe la vérification des nouvelles versions | 1 |
IGNORE_IP | Écarte de la collecte des adresses IP et des plages CIDR, comme celles de vos bureaux | Une liste séparée par des virgules |
SALT_ROTATION | Règle la fréquence à laquelle change le sel des identifiants de session | month par défaut |
REDIS_URL | Ajoute un cache Redis, que la documentation recommande pour les sites à fort trafic ou plusieurs instances | L'adresse de votre Redis |
MCP_ENABLED | Ouvre le point /mcp : votre assistant IA lit vos statistiques en lecture seule, avec une clé d'API créée dans Settings, API keys | 1 |
Tout ce que garde Umami vit dans sa base PostgreSQL : comptes, sites, équipes et statistiques. Exportez-la chaque jour et juste avant chaque mise à jour : auto-hébergées, ces données sont conservées sans limite de durée. À côté de la base, le fichier .env porte les secrets qui la rendent utilisable :
| Élément | Ce qu'il garde | À sauvegarder |
|---|---|---|
| La base PostgreSQL | Comptes, sites, équipes, rapports et toutes les statistiques | Obligatoire, par pg_dump |
.env | Le mot de passe de la base, APP_SECRET et la clé de double authentification | Obligatoire, chiffré |
compose.yaml | La configuration de votre instance | Recommandé |
pg_dump produit un export cohérent pendant que la base sert. Le format personnalisé, -Fc, est compressé et se restaure avec pg_restore :
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Planifiez cette commande sur le serveur au moins une fois par jour, faites le tri parmi les exports, qui s'accumulent, et envoyez-en une copie ailleurs. Posés sur le disque du serveur, ces exports entrent aussi dans ses sauvegardes de nuit.
docker compose stop umami.docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-AAAA-MM-JJ.dump
docker compose start umami
Répétez cet exercice de temps en temps, sur une copie : c'est ainsi que vous vérifiez qu'une sauvegarde fonctionne.
La documentation donne deux commandes, depuis le dossier du compose.yaml. La base reste dans son volume :
docker compose pull
docker compose up --force-recreate -d
Au redémarrage, le conteneur applique de lui-même les migrations du schéma. La 3.4.0 du 17 septembre 2026 en portait deux, pour les annotations et les clés d'API ; la 3.4.1 du 23 octobre 2026 n'en porte aucune. Après une montée de version majeure, comme le passage à la version 3, la documentation conseille de lancer ANALYZE dans PostgreSQL, pour que les tableaux de bord retrouvent leur vitesse :
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine du fichier. Changer de version majeure de PostgreSQL demande un export et une restauration, ou pg_upgrade.L'auto-hébergement demande de tenir le serveur en plus de l'application. Sur un VPS géré, nos équipes prennent le serveur en main et suivent votre instance de manière proactive ; Umami reste votre logiciel, avec ses réglages et ses données.
| Sujet | Nos équipes | Vous |
|---|---|---|
| Le serveur | Mises à jour du système et de la sécurité, interventions sur le serveur comprises | Le moment qui convient à votre activité |
| La supervision | Serveur suivi 24 h/24 et 7 j/7, avec intervention sans attendre votre appel | La lecture des journaux de votre instance |
| Umami | Suivi proactif : erreurs, lenteurs et espace disque repérés, correction recommandée | Son installation, ses mises à jour et ses réglages, que vous appliquez, vous ou votre assistant IA |
| Les sites et les statistiques | Le serveur qui les porte, surveillé et sauvegardé | Les comptes, les sites suivis, le script de suivi et la durée de conservation des données |
| Les sauvegardes | Chaque nuit, chiffrées et gardées hors de la machine ; restauration comprise | Les exports propres à Umami, et la demande de restauration, quand vous en avez besoin |
| La migration | Votre serveur actuel migré, offert | Le moment de la bascule |
Si vous préférez que nos équipes interviennent dans l'application elle-même, cette prestation se facture à l'heure ou au forfait, avec un chiffrage communiqué avant l'intervention.
Avec un VPS géré Simafri, nos équipes tiennent à jour le serveur de votre instance Umami, le surveillent jour et nuit et interviennent sans attendre votre appel ; elles suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez, vous ou votre assistant IA. Les sauvegardes sont chiffrées chaque nuit et gardées hors de la machine, leur restauration est comprise, et la migration de votre serveur actuel est offerte.
Oui. Umami est sous licence MIT : vous pouvez l'utiliser, le modifier et le redistribuer en entreprise sans licence à acheter, en gardant sa mention de copyright. Reste le coût du serveur qui le fait tourner.
Non. La FAQ du projet indique que le traceur web d'Umami n'utilise pas de témoins. Le besoin d'un bandeau de consentement aux témoins sur votre site dépend des autres services que vous y utilisez et des exigences qui s'appliquent.
Plus depuis la version 3 : Umami prend en charge PostgreSQL, en version 12.14 au minimum. Une instance en version 2 sur MySQL passe d'abord ses données vers PostgreSQL, avec le guide de migration du projet, puis monte en version 3.
Reprenez le docker-compose.yml du projet, qui lance Umami et PostgreSQL, avec des secrets tirés au hasard dans un fichier .env et le port publié sur 127.0.0.1. Lancez docker compose up -d, puis placez un mandataire inverse en HTTPS devant, sur un sous-domaine.
Umami crée à l'installation un compte admin, avec le mot de passe umami. Changez-le dès la première connexion, dans Settings puis Profile, et activez la double authentification dans l'onglet Security, une fois TWO_FACTOR_ENCRYPTION_KEY renseignée.
Sur une instance auto-hébergée, TRACKER_SCRIPT_NAME donne au script un autre nom que script.js, et COLLECT_API_ENDPOINT renomme l'adresse de collecte /api/send. Changez ensuite la source du code de suivi sur vos pages.
Exportez chaque jour la base PostgreSQL avec pg_dump, depuis le conteneur de la base, et gardez à part le fichier .env, qui porte APP_SECRET et la clé de double authentification. Restaurez avec pg_restore, et testez la restauration régulièrement.
Un VPS géré couvre le serveur : système, sécurité, supervision et sauvegardes. Nos équipes suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez. Une intervention dans l'application se facture à l'heure ou au forfait.
Simafri
Parlons de votre site web
Dites-nous en deux mots votre projet : on revient vers vous rapidement.
Merci ! Votre demande a bien été envoyée. Nous vous répondrons rapidement.
Vous préférez l'email ? Écrivez-nous à support@simafri.com.