Pourquoi self-héberger Umami sur un VPS
Umami est une alternative légère à Google Analytics : open source, sans cookies de traçage, sans transfert de données vers des tiers. Sur un VPS, vous en gardez le contrôle total — aucun compte SaaS, aucune limite de sites, aucune donnée partagée. La stack Docker est minimaliste : un conteneur Node.js pour l'application et un conteneur PostgreSQL pour la base de données. Le tout s'installe en moins de dix minutes sur une VM standard avec accès root, et les données restent sur votre serveur.
Comparé à Google Analytics 4, Umami ne nécessite pas de configuration de consentement pour les statistiques anonymisées dans la majorité des juridictions européennes. Comparé à Matomo, son empreinte mémoire est nettement inférieure, et sa configuration Docker se résume à un fichier docker-compose.yml. Pour une agence qui gère dix clients, une seule instance Umami avec dix sites fait le travail d'un abonnement SaaS facturé par utilisateur ou par domaine. La version 2.14 (juillet 2026) a introduit la prise en charge native des événements personnalisés et un tableau de bord exportable en CSV — deux fonctionnalités longtemps attendues par les équipes marketing.
Les bénéfices concrets d'un Umami auto-hébergé
- Conforme à la vie privée : pas de cookies, pas de données personnelles, souvent pas de bannière de consentement requise.
- Vos statistiques d'audience restent sur votre serveur, sans partage avec un tiers.
- Script de suivi de quelques kilo-octets, sans cookie ni collecte de données personnelles.
- Tableau de bord clair et multi-sites depuis une seule instance.
- Coût fixe quel que soit le volume de pages vues.
Prérequis matériels et logiciels
Umami tourne sur n'importe quel VPS avec Docker installé. Le minimum recommandé est 1 vCPU et 512 Mo de RAM pour un usage personnel ou une PME ; au-delà de 200 000 pages vues par mois, 1 Go de RAM évite les ralentissements de PostgreSQL. Vous aurez besoin de : Docker Engine (≥ 20.10) et Docker Compose V2 (docker compose, pas docker-compose), un nom de domaine ou sous-domaine pointant vers votre VPS, et un reverse proxy (nginx ou Caddy) pour servir Umami en HTTPS. Debian 12 et Ubuntu 22 sont les distributions de référence ; les commandes ci-dessous supposent un accès root ou sudo.
Côté serveur, ouvrez les ports 80 et 443 dans votre pare-feu (ufw allow 80/tcp && ufw allow 443/tcp). Umami n'a besoin que du port HTTPS exposé vers l'extérieur ; le port applicatif (3000 par défaut) reste interne et n'est jamais ouvert directement. Si vous utilisez un VPS ServOrbit, le groupe de sécurité par défaut autorise déjà 80 et 443.
Déployer Umami avec Docker et HTTPS
Préparer le VPS et Docker
En SSH, mettez à jour le système et installez Docker via
curl -fsSL https://get.docker.com | sh. Créezmkdir -p /opt/umami && cd /opt/umami.Écrire le docker-compose.yml
Définissez deux services :
ghcr.io/umami-software/umami:postgresql-latestet une basepostgres. RenseignezDATABASE_URLet unAPP_SECRETaléatoire.Lancer les conteneurs
Exécutez
docker compose up -d. Umami écoute en local sur le port 3000 ; la base est initialisée automatiquement au premier démarrage.Configurer le reverse proxy
Avec Caddy :
stats.votre-domaine.com { reverse_proxy localhost:3000 }. Le certificat Let's Encrypt est obtenu et renouvelé automatiquement.Ajouter votre site et le script
Connectez-vous (admin/umami par défaut, à changer immédiatement), ajoutez votre site et collez le snippet de suivi fourni dans le
<head>de vos pages.
Problèmes fréquents au démarrage
Trois causes concentrent la quasi-totalité des échecs signalés en 2026 dans les guides communautaires. Les voici avec leur diagnostic et leur correctif.
1. Restart loop « Can't reach database server » — DATABASE_URL ne correspond pas à POSTGRES_PASSWORD
C'est le piège de copier-coller le plus fréquent : DATABASE_URL contient le mot de passe en clair dans la chaîne de connexion, et ce mot de passe doit être identique à la valeur de POSTGRES_PASSWORD dans le service db. Si vous changez l'un sans l'autre, Umami démarre, échoue à joindre la base, et redémarre en boucle — sans message d'erreur explicite dans les logs Docker.
Vérifiez que vos deux variables sont cohérentes :
# dans .env ou dans le compose
POSTGRES_PASSWORD=mot_de_passe_fort
# dans DATABASE_URL, le même mot de passe en position 3
DATABASE_URL=postgresql://umami:mot_de_passe_fort@db:5432/umamiSi vous utilisez une variable d'interpolation (${POSTGRES_PASSWORD}), assurez-vous que Docker Compose charge bien votre fichier .env.
2. Umami crashe 5 à 10 secondes après le démarrage — depends_on sans healthcheck
Par défaut, depends_on: db attend uniquement que le conteneur PostgreSQL soit démarré, pas qu'il soit prêt à accepter des connexions. Umami tente alors de se connecter alors que PostgreSQL initialise encore ses fichiers de données, échoue, et s'arrête.
Ajoutez un healthcheck sur le service db et un condition: service_healthy dans le depends_on d'Umami :
services:
db:
image: postgres:15-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready -U umami"]
interval: 10s
timeout: 5s
retries: 5
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
depends_on:
db:
condition: service_healthyAvec cette configuration, Umami ne démarre qu'une fois que PostgreSQL répond sur son socket.
3. Erreur 502 après un docker compose pull — port publié modifié
Après une mise à jour (docker compose pull + docker compose up -d), nginx peut renvoyer une erreur 502 si la configuration a changé entre deux versions de l'image : le port interne peut avoir été redirigé ou le binding hôte modifié. Vérifiez d'abord l'état réel des conteneurs :
docker compose psRepérez la colonne PORTS pour confirmer que le conteneur Umami publie bien sur le port attendu (par défaut 3000). Si le port a changé, mettez à jour la directive proxy_pass (ou reverse_proxy) dans nginx ou Caddy pour qu'elle reflète le nouveau port, puis rechargez le service (nginx -s reload ou systemctl reload caddy).
4. docker-compose (v1) vs docker compose (v2) — commandes muettes
Les guides publiés avant 2025 utilisent souvent docker-compose (tiret), le client Python qui n'est plus maintenu. Sur une installation fraîche de Docker Engine, cette commande n'existe pas : le terminal rend simplement command not found, sans dire que v2 s'appelle docker compose (espace). Vérifiez avec docker compose version — si la commande répond, vous avez v2. Tous les exemples de ce guide utilisent docker compose (v2).
Mettre à jour Umami
Sauvegarder la base de données
Avant toute mise à jour :
docker compose exec db pg_dump -U umami umami > umami-backup-$(date +%F).sql. Conservez ce fichier hors du volume Docker — il ne sera pas préservé si vous supprimez le volume.Tirer la dernière image
docker compose pull. Umami publie ses releases sur GitHub (github.com/umami-software/umami/releases) — consultez les notes de version pour identifier les migrations de schéma ou les changements de variables d'environnement.Redémarrer la stack
docker compose up -d. Umami applique les migrations automatiquement au démarrage. Vérifiez les logs avecdocker compose logs -f appet attendez le messageListening on port 3000.Contrôler la version dans l'interface
Paramètres → À propos. Si la version n'a pas changé, l'image n'a peut-être pas été re-tirée :
docker compose imagesaffiche le digest de chaque image en cours d'exécution.Vérifier que le tracking fonctionne
Ouvrez un site suivi dans un onglet privé et attendez 30 secondes — la page Temps réel doit enregistrer la visite. Un 0 persistant après un redémarrage indique souvent un problème de script de tracking côté frontend.
Umami Cloud vs auto-hébergé
Umami propose une offre Cloud gérée (umami.is/pricing) à partir de 9 $/mois pour les équipes qui ne veulent pas maintenir l'infrastructure. L'auto-hébergement sur VPS est pertinent si vous avez déjà une VM, si vous gérez plusieurs sites, ou si la politique de données de votre organisation interdit tout envoi vers un SaaS externe — même RGPD-compatible. Les deux partagent le même code, les mêmes fonctionnalités et le même format d'export.
Changez le mot de passe administrateur par défaut dès la première connexion, et sauvegardez régulièrement la base PostgreSQL : c'est elle qui contient tout votre historique d'audience.
La documentation officielle
Pour la configuration avancée et les options propres à l'outil, référez-vous à la documentation officielle de Umami. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.