Guide de déploiement

Comment héberger Umami sur un VPS

Déployer sur un VPS Cloud →

Tutoriel

Comment héberger Umami sur un VPS

Self-hosting7 min de lecture10 étapes

Umami est un outil d'analytics web open source, léger et respectueux de la vie privée : il mesure votre audience sans cookies ni collecte de données personnelles. Auto-hébergé sur votre VPS, il vous rend propriétaire de vos statistiques de trafic, sans les confier à une régie publicitaire. Voici comment le déployer avec Docker, une base de données PostgreSQL, un reverse proxy et un certificat TLS — et comment résoudre les trois problèmes qui bloquent le plus souvent au démarrage.

Sommaire· Pourquoi self-héberger Umami sur un VPS1/8
  1. 01Pourquoi self-héberger Umami sur un VPS
  2. 02Les bénéfices concrets d'un Umami auto-hébergé
  3. 03Prérequis matériels et logiciels
  4. 04Déployer Umami avec Docker et HTTPS
  5. 05Problèmes fréquents au démarrage
  6. 06Mettre à jour Umami
  7. 07Umami Cloud vs auto-hébergé
  8. 08La documentation officielle

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

  1. 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éez mkdir -p /opt/umami && cd /opt/umami.

  2. Écrire le docker-compose.yml

    Définissez deux services : ghcr.io/umami-software/umami:postgresql-latest et une base postgres. Renseignez DATABASE_URL et un APP_SECRET aléatoire.

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

  4. Configurer le reverse proxy

    Avec Caddy : stats.votre-domaine.com { reverse_proxy localhost:3000 }. Le certificat Let's Encrypt est obtenu et renouvelé automatiquement.

  5. 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/umami

Si 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_healthy

Avec 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 ps

Repé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

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

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

  3. Redémarrer la stack

    docker compose up -d. Umami applique les migrations automatiquement au démarrage. Vérifiez les logs avec docker compose logs -f app et attendez le message Listening on port 3000.

  4. 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 images affiche le digest de chaque image en cours d'exécution.

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

Déployez votre instance sur un VPS Cloud ServOrbit

Un VPS Cloud ServOrbit avec Docker préconfiguré et des ressources évolutives vous laisse installer cet outil sans friction, et ajuster RAM et vCPU à mesure que l'usage grandit.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet