Héberger Umami sur un VPS infogéré : vos statistiques web sur votre serveur

Héberger Umami sur un VPS infogé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 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.

Simon Vasconcelos Lee Par Publié le 15 novembre 2026Lecture : 13 minutes

Tous les guides

L'essentiel

  1. La licence MIT permet d’utiliser, de modifier et de redistribuer Umami librement, en entreprise comme ailleurs, en gardant sa mention de copyright.
  2. Installez-le avec Docker Compose : le fichier du projet lance Umami et sa base PostgreSQL, seule base prise en charge depuis la version 3.
  3. Tirez 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.
  4. Ajoutez votre site, puis collez son script de suivi dans le <head> de vos pages : le traceur n’utilise pas de cookies.
  5. Exportez chaque jour la base avec pg_dump, gardez le fichier .env en lieu sûr, et mettez à jour avec docker compose pull.

Ce que fait Umami

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.

Ce que permet la licence MIT

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.

Cookies et données personnelles : ce que dit le projet

La documentation présente Umami comme une mesure d'audience sans cookies, 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.

QuestionCe qu’en dit le projetSource
CookiesLe traceur web n’utilise pas de cookies ; le besoin d’un bandeau dépend des autres services de votre site et des exigences qui s’y appliquentFAQ
Données collectéesPages vues, sites référents, navigateurs, systèmes, types d’appareils et localisation approximativeFAQ
Adresse IPLa 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éfautSchéma et code, version 3.4.1
ConservationAuto-hébergées, les données restent tant que vous ne les supprimez pasFAQ
RGPDUmami 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’utilisezFAQ
Données envoyées par vousUn 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.

L'installation avec Docker Compose et PostgreSQL

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 :

Terminal
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.

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:
Terminal
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat

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 infogéré, décrivez-nous votre usage et nous vous recommandons la taille qui convient.

HTTPS : le proxy inverse

Umami écoute en HTTP sur le port 3000, et la documentation propose de le servir derrière votre serveur web, par un proxy 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 proxy 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 proxy utilise un autre en-tête, CLIENT_IP_HEADER le désigne.

Avec Caddy

Caddy obtient lui-même le certificat Let's Encrypt et active HTTPS. Sa directive reverse_proxy pose X-Forwarded-For d'office : ces trois lignes suffisent.

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

Avec Nginx et Certbot

Ce bloc reprend l'exemple Nginx de la documentation d'Umami, en écoute sur le port 80 pour laisser Certbot poser HTTPS :

Bloc 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 pose ensuite le certificat et se charge de le renouveler :

Terminal
sudo certbot --nginx

La première connexion : le compte admin et la double authentification

À 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.

  1. Ouvrez votre adresse HTTPS et connectez-vous avec admin et umami.
  2. Ouvrez Settings depuis le bouton de profil de la barre latérale, puis Profile, et cliquez sur Change password.
  3. Dans l’onglet Security, activez la double authentification : scannez le code QR avec votre application d’authentification, saisissez le code à six chiffres, puis rangez en lieu sûr les dix codes de secours, affichés une seule fois.

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.

Ajouter un site et son script de suivi

  1. Dans Websites, cliquez sur Add website.
  2. Donnez un nom au site, puis son domaine : Umami s’en sert pour écarter vos propres pages de la liste des sites référents.
  3. Ouvrez Edit sur ce site et copiez le code de la section Tracking code.
  4. Collez-le dans le <head> de vos pages, puis visitez votre site : les données paraissent aussitôt dans le tableau de bord.
Le code de suivi, dans le head
<script defer src="https://stats.example.com/script.js" data-website-id="identifiant-du-site"></script>

Un nom de script à vous

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.

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

Les réglages utiles

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 :

VariableCe qu’elle faitValeur
DISABLE_TELEMETRYCoupe la télémétrie anonyme qu’Umami envoie au projet pour améliorer l’application1
PRIVATE_MODECoupe tout appel réseau extérieur, y compris les icônes des sites, servies par défaut depuis DuckDuckGo1
DISABLE_UPDATESCoupe la vérification des nouvelles versions1
IGNORE_IPÉcarte de la collecte des adresses IP et des plages CIDR, comme celles de vos bureauxUne liste séparée par des virgules
SALT_ROTATIONRègle la fréquence à laquelle change le sel des identifiants de sessionmonth par défaut
REDIS_URLAjoute un cache Redis, que la documentation recommande pour les sites à fort trafic ou plusieurs instancesL’adresse de votre Redis
MCP_ENABLEDOuvre le point /mcp : votre assistant IA lit vos statistiques en lecture seule, avec une clé d’API créée dans Settings, API keys1

Les sauvegardes

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émentCe qu’il gardeÀ sauvegarder
La base PostgreSQLComptes, sites, équipes, rapports et toutes les statistiquesObligatoire, par pg_dump
.envLe mot de passe de la base, APP_SECRET et la clé de double authentificationObligatoire, chiffré
compose.yamlLa configuration de votre instanceRecommandé

Exporter la base, service en marche

pg_dump produit un export cohérent pendant que la base sert. Le format personnalisé, -Fc, est compressé et se restaure avec pg_restore :

Terminal, dans le dossier du compose.yaml
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.

Restaurer

  1. Arrêtez Umami, en laissant la base en marche : docker compose stop umami.
  2. Restaurez l’export dans la base, en remplaçant les objets existants.
  3. Relancez Umami, puis vérifiez que vos sites et leurs statistiques sont là.
Terminal
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.

Les mises à jour

La documentation donne deux commandes, depuis le dossier du compose.yaml. La base reste dans son volume :

Terminal
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 :

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

Qui fait quoi sur un VPS infogéré

L'auto-hébergement demande de tenir le serveur en plus de l'application. Sur un VPS infogé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.

SujetNos équipesVous
Le serveurMises à jour du système et de la sécurité, interventions sur le serveur comprisesLe moment qui convient à votre activité
La supervisionServeur suivi 24 h/24 et 7 j/7, avec intervention sans attendre votre appelLa lecture des journaux de votre instance
UmamiSuivi proactif : erreurs, lenteurs et espace disque repérés, correction recommandéeSon installation, ses mises à jour et ses réglages, que vous appliquez, vous ou votre assistant IA
Les sites et les statistiquesLe 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 sauvegardesChaque nuit, chiffrées et gardées hors de la machine ; restauration compriseLes exports propres à Umami, et la demande de restauration, quand vous en avez besoin
La migrationVotre serveur actuel migré, offertLe 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.

Umami, sur un serveur tenu pour vous

Avec un VPS infogé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.

Découvrir les VPS infogérés

Questions fréquentes

Umami est-il gratuit pour une entreprise ?

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.

Umami utilise-t-il des cookies ?

Non. La FAQ du projet indique que le traceur web d'Umami n'utilise pas de cookies. Le besoin d'un bandeau de cookies sur votre site dépend des autres services que vous y utilisez et des exigences qui s'appliquent.

Umami fonctionne-t-il avec MySQL ?

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.

Comment installer Umami avec Docker Compose ?

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 proxy inverse en HTTPS devant, sur un sous-domaine.

Quels sont les identifiants par défaut d'Umami ?

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.

Comment renommer le script de suivi d'Umami ?

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.

Comment sauvegarder Umami ?

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 infogéré couvre-t-il Umami ?

Un VPS infogé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.

Sources et documentation officielle

Contactez-nous