📍 Article principal de la série : Umami Analytics 2026 : guide pratique.
Vingt minutes pour installer Umami sur Hetzner CX23 (anc. CX22, hausse tarifaire avril 2026). Méthode validée chez agences digitales et e-commerces francophones.
Prérequis
- Hetzner CX23 (anc. CX22, hausse tarifaire avril 2026) ou plus petit (Umami léger).
- Coolify v4.
- Domaine :
analytics.votre-entreprise.com. - Niveau attendu : intermédiaire.
- Temps estimé : 20-30 minutes.
Étape 1 — DNS
dig +short analytics.votre-entreprise.com # IP VPS
Étape 2 — Service Umami dans Coolify
Resources → + New → Service → rechercher « Umami ». Coolify déploie le template officiel avec Postgres 16.
Étape 3 — Variables d’environnement
DATABASE_URL=postgres://umami:password@umami-db:5432/umami
DATABASE_TYPE=postgresql
APP_SECRET=générer-32-octets-base64
TRACKER_SCRIPT_NAME=script.js
DISABLE_TELEMETRY=1
LOG_QUERY=0
Étape 4 — Domaine HTTPS
Onglet Domains : https://analytics.votre-entreprise.com. Force HTTPS.
Étape 5 — Lancer Deploy
Coolify pull umamisoftware/umami + postgres. Comptez 2-3 minutes.
Étape 6 — Premier login
Ouvrir https://analytics.votre-entreprise.com. Login par défaut : admin / umami. Changer immédiatement password fort.
Étape 7 — Premier site
Settings → Websites → + Add → saisir nom + domain. Umami génère Website ID UUID. Copier snippet.
Étape 8 — Coller snippet sur site
<script defer src="https://analytics.votre-entreprise.com/script.js"
data-website-id="VOTRE_UUID"></script>
Visiter site, attendre 30s, retourner Umami → Dashboard → site → real-time visiteurs.
Étape 9 — Création users supplémentaires
Settings → Users → + Add. Roles : admin, view-only. Distribuer login aux clients agence pour reporting.
Étape 10 — Sauvegardes
# Cron quotidien
docker exec umami-db pg_dump -U umami umami | gzip > /tmp/umami-pg.gz
restic backup /tmp/umami-pg.gz
rm /tmp/umami-pg.gz
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| 404 sur /script.js | TRACKER_SCRIPT_NAME incorrect | Vérifier env var |
| Adblockers bloquent | Domain umami.is reconnu | Self-host ne devrait pas avoir ce souci |
| Postgres connect timeout | Réseau Docker | Vérifier service umami-db up |
| Login admin/umami refuse | Premier setup pas terminé | Restart Umami container |
| Stats à 0 | data-website-id mal copié | Recopier UUID exact |
| HTTPS Let’s Encrypt échoue | Port 80 bloqué | UFW allow 80 |
Mise en œuvre dans le contexte sénégalais
Trois précisions. Latence Hetzner FSN1 : 95 ms vers Dakar acceptable pour analytics async. Multi-clients agence : créer un dashboard par client en mode view-only pour reporting transparent. Conformité CDP/ARTCI : Umami zéro données personnelles, conforme natif.
Tutoriels frères
FAQ
Performance VPS petit ? CX11 (1 vCPU, 2 Go) tient 10 sites + 100k pageviews/mois.
Mises à jour ? Coolify Pull image + Redeploy.
Multi-domaine ? Oui, illimité dans une instance.
Plugins ? Pas de plugin system. Customisation via fork.
Multi-tenant SaaS ? Workaround : un Umami par client.
Pour creuser ce sujet
- 🔝 Retour au guide général : guide pratique Umami 2026
- Documentation : umami.is/docs/install
Etape 1 : pourquoi Umami plutot que Google Analytics 4 sur Coolify
Umami est une analytique web open-source ecrite en Node.js qui stocke ses donnees dans Postgres ou MySQL. Au contraire de GA4, elle ne pose aucun cookie, ne renvoie aucune donnee a un tiers et tient sur un VPS a 4 EUR / mois (2625 FCFA). Pour un dev a Dakar, Abidjan ou Cotonou qui veut respecter la directive CEDEAO sur les donnees personnelles sans payer Plausible Cloud (9 USD / mois), c’est l’option rationnelle.
Coolify v4 est un PaaS auto-heberge qui orchestre Docker. Il sait deployer Umami en moins de cinq minutes via son template officiel, gere TLS Let’s Encrypt et redemarre le conteneur en cas de crash. La paire Umami + Coolify + Postgres remplace donc trois SaaS d’un coup : analytics, CMS de configuration et reverse proxy.
Etape 2 : preparer le VPS et installer Coolify v4
Prends un VPS Hetzner CX22 (4,51 EUR HT, soit environ 2960 FCFA) ou Contabo VPS S sous Debian 12. Connecte-toi en SSH puis lance l’installeur officiel.
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
L’installeur tire Docker 27, cree le reseau coolify et expose le tableau de bord sur le port 8000. La premiere connexion sur https://coolify.tondomaine.io te demande de creer le compte admin. Le signal de reussite : la page Resources s’affiche avec un bouton bleu New Resource.
Etape 3 : provisionner la base Postgres dediee a Umami
Dans Coolify, clique New Resource puis Database puis PostgreSQL 16. Renomme l’instance umami-db, choisis le serveur cible (localhost si VPS unique) et clique Deploy. Coolify genere un mot de passe long, configure pg_hba.conf et expose la base sur un reseau Docker prive.
docker exec -it umami-db psql -U postgres -c "CREATE DATABASE umami;"
Tu dois voir CREATE DATABASE en sortie. Note les variables DATABASE_URL et POSTGRES_PASSWORD : Umami les reutilisera a l’etape suivante.
Etape 4 : deployer Umami via le template officiel
Retour sur Resources, choisis One-Click Service puis tape umami dans la barre. Selectionne Umami Analytics (image ghcr.io/umami-software/umami:postgresql-latest, version 2.16 au 5 mai 2026). Renseigne DATABASE_URL = postgresql://postgres:MOT_DE_PASSE@umami-db:5432/umami. Coolify cree le conteneur et lance les migrations Prisma au boot.
Le premier demarrage prend 40 secondes. Ouvre l’URL https://stats.tondomaine.io et connecte-toi avec admin / umami. Change immediatement le mot de passe via Settings then Profile then Change password. Si tu vois un dashboard vide intitule Websites, l’install est OK.
Etape 5 : ajouter ton premier site et coller le tracking script
Dans Settings then Websites then Add website, saisis le domaine (par exemple itskillscenter.io). Umami genere un Website ID et un snippet de 12 lignes. Colle-le avant la balise </head> de ton site. Pour un site WordPress, le plus simple est l’extension Insert Headers and Footers ou un mu-plugin de 4 lignes.
<script async src="https://stats.tondomaine.io/script.js" data-website-id="UUID-GENERE"></script>
Recharge ton site, retourne sur Umami : l’onglet Realtime doit afficher 1 visiteur dans les 30 secondes. Si rien ne remonte, ouvre la console reseau du navigateur et verifie que script.js renvoie HTTP 200 et que /api/send renvoie 204.
Etape 6 : sauvegarder Postgres avec pg_dump et rclone vers Backblaze B2
Une analytique sans backup est une bombe a retardement. Backblaze B2 facture 0,005 USD / Go / mois (3,3 FCFA), bien moins que S3 Standard. Cree un bucket umami-backup en region eu-central, genere une cle B2 avec scope writeFiles, puis configure rclone sur le VPS.
0 3 * * * docker exec umami-db pg_dump -U postgres umami | gzip | rclone rcat b2:umami-backup/umami-$(date +\%F).sql.gz
Cette ligne crontab dump la base chaque nuit a 3h, compresse et pousse vers B2. Verifie le lendemain via rclone ls b2:umami-backup : tu dois voir un fichier d’environ 5 Mo apres 1 mois de trafic moyen.
Etape 7 : durcir la securite avec Fail2ban et Cloudflare
Active Cloudflare en mode proxy DNS sur stats.tondomaine.io et active la regle WAF Umami Login Protection (Bot Fight Mode + rate limit 30 req/min sur /api/auth/login). Sur le VPS, installe fail2ban et ajoute une jail qui scrute /var/log/coolify/umami.log pour les 401 repetes.
Le signal de reussite : tente 6 connexions echouees depuis un VPN, ton IP est bannie 1 heure et un mail postfix t’avertit. Cette double couche bloque 99 % du brute force opportuniste qui scanne les domaines stats.*.
Etape 8 : exporter les evenements vers Metabase pour des dashboards business
Umami expose une API REST documentee sous /api. Tu peux brancher Metabase open-source sur la meme Postgres en lecture seule, definir une question SQL « visiteurs uniques par pays sur 30 jours » et l’epingler sur un dashboard partage avec ton commercial a Abidjan. Tu obtiens ainsi un combo analytics privacy-friendly + BI gratuit, hebergement total environ 4 EUR / mois.
Sur le même thème : stack d’observabilite Grafana + Loki + Prometheus et guide Coolify auto-heberge.
Etape 9 : configurer le SSO via Authentik pour une equipe distribuee
Si tu travailles avec une equipe a Dakar et un freelance a Lome, distribuer le mot de passe admin Umami est une mauvaise pratique. Umami 2.16 supporte l’authentification via reverse proxy header. Couple-le avec Authentik open-source (deploye lui aussi sur Coolify) et tu obtiens un SSO OIDC complet.
Cree une application Authentik avec slug umami, type proxy, et pointe-la vers https://stats.tondomaine.io. Dans Coolify, ajoute le label traefik.http.routers.umami.middlewares=authentik@docker au conteneur Umami. Le signal de reussite : un acces a stats.tondomaine.io te redirige vers ta page Authentik et apres connexion tu retombes sur le dashboard Umami sans saisir de mot de passe local.
traefik.http.middlewares.authentik.forwardauth.address=http://authentik-server:9000/outpost.goauthentik.io/auth/traefik
traefik.http.middlewares.authentik.forwardauth.trustForwardHeader=true
Cette configuration te permet de revoquer un collaborateur en un clic dans Authentik au lieu de tourner les mots de passe sur tous les services. Combine avec un 2FA TOTP obligatoire pour les comptes admin.
Etape 10 : monitorer Umami avec Uptime Kuma et alerter sur Telegram
Une analytique qui tombe pendant 6 heures un dimanche soir, personne ne le remarque tant que le lundi matin un client demande pourquoi son rapport est vide. Deploie Uptime Kuma via Coolify One-Click et cree trois moniteurs : HTTP keyword sur /api/heartbeat (doit renvoyer 200 et le mot ok), TCP sur le port Postgres 5432, et Push pour ton cron de backup.
Connecte un bot Telegram avec @BotFather, recupere le token, ajoute-le dans Uptime Kuma sous Notifications. Tu recois une alerte instantanee sur ton smartphone si Umami tombe ou si le backup nocturne saute. Cout : 0 FCFA, latence d’alerte moyenne 60 secondes.
Etape 11 : optimiser Postgres pour 100 000 evenements par jour
Umami stocke chaque pageview comme une ligne dans la table website_event. A 100 000 evenements / jour la table grossit de 30 Mo / mois. Sans tuning, les requetes de dashboard sur 90 jours peuvent prendre 4 secondes. Trois actions ramenent ca sous 200 ms.
D’abord, ajoute un index BRIN sur created_at qui consomme 100 fois moins d’espace qu’un index B-tree pour des donnees insert-only. Ensuite, active autovacuum_vacuum_scale_factor=0.05 pour declencher VACUUM plus tot. Enfin, programme un pg_repack mensuel pour defragmenter sans bloquer les ecritures.
CREATE INDEX idx_event_created_brin ON website_event USING BRIN (created_at);
ALTER TABLE website_event SET (autovacuum_vacuum_scale_factor = 0.05);
Le signal de reussite : EXPLAIN ANALYZE sur une requete dashboard 90 jours doit afficher Bitmap Index Scan idx_event_created_brin avec un cout total inferieur a 5000.
Etape 12 : conformite directive CEDEAO et information des visiteurs
La directive CEDEAO sur la protection des donnees personnelles transposee au Senegal par la loi 2008-12 et en Cote d’Ivoire par la loi 2013-450 impose une information loyale meme sans cookie. Ajoute une mention courte dans ton pied de page : « Mesure d’audience anonyme via Umami auto-heberge, aucun cookie, aucune donnee personnelle collectee, IP hashee et tronquee ».
Umami hash deja l’IP avec un sel quotidien et la jette apres 24h. Documente cette pratique dans ta page Politique de confidentialite. Tu evites ainsi le bandeau cookie agressif et tu restes conforme aux autorites locales tout en epargnant le visiteur d’un clic supplementaire.
Etape 13 : couts mensuels totaux pour un projet West Africa
Recapitulatif chiffre pour un site qui recoit 50 000 visites / mois depuis Dakar, Abidjan, Cotonou et Lome. VPS Hetzner CX22 : 4,51 EUR HT soit 2960 FCFA. Domaine .io chez Porkbun : 36 USD / an soit 1970 FCFA / mois. Backblaze B2 pour backups : 0,02 USD / mois soit 13 FCFA. Cloudflare plan gratuit : 0 FCFA. Total mensuel approximatif 4943 FCFA, contre environ 16 400 FCFA pour Plausible Cloud equivalent ou 0 FCFA mais perte de souverainete avec GA4.
L’investissement initial en temps est de 90 minutes pour un dev habitue a Docker. Le retour sur investissement se fait des le second mois en economie d’abonnement et en independance technique vis-a-vis de Google.
Etape 9 : configurer le SSO via Authentik pour une equipe distribuee
Si tu travailles avec une equipe a Dakar et un freelance a Lome, distribuer le mot de passe admin Umami est une mauvaise pratique. Umami 2.16 supporte l’authentification via reverse proxy header. Couple-le avec Authentik open-source (deploye lui aussi sur Coolify) et tu obtiens un SSO OIDC complet avec MFA TOTP et journalisation des connexions.
Cree une application Authentik avec slug umami, type proxy, et pointe-la vers https://stats.tondomaine.io. Dans Coolify, ajoute le label traefik forwardauth au conteneur Umami. Le signal de reussite : un acces a stats.tondomaine.io te redirige vers ta page Authentik et apres connexion tu retombes sur le dashboard Umami sans saisir de mot de passe local.
traefik.http.middlewares.authentik.forwardauth.address=http://authentik-server:9000/outpost.goauthentik.io/auth/traefik
traefik.http.middlewares.authentik.forwardauth.trustForwardHeader=true
Cette configuration te permet de revoquer un collaborateur en un clic dans Authentik au lieu de tourner les mots de passe sur tous les services. Combine avec un 2FA TOTP obligatoire pour les comptes admin et un groupe LDAP synchronise depuis ton AD si tu en as un.
Etape 10 : monitorer Umami avec Uptime Kuma et alerter sur Telegram
Une analytique qui tombe pendant 6 heures un dimanche soir, personne ne le remarque tant que le lundi matin un client demande pourquoi son rapport est vide. Deploie Uptime Kuma via Coolify One-Click et cree trois moniteurs : HTTP keyword sur /api/heartbeat (doit renvoyer 200 et le mot ok), TCP sur le port Postgres 5432, et Push pour ton cron de backup nocturne.
Connecte un bot Telegram avec @BotFather, recupere le token, ajoute-le dans Uptime Kuma sous Notifications. Tu recois une alerte instantanee sur ton smartphone si Umami tombe ou si le backup nocturne saute. Cout : 0 FCFA, latence d’alerte moyenne 60 secondes, suffisant pour un SLA artisanal mais respectable.
Etape 11 : optimiser Postgres pour 100 000 evenements par jour
Umami stocke chaque pageview comme une ligne dans la table website_event. A 100 000 evenements / jour la table grossit de 30 Mo / mois. Sans tuning, les requetes de dashboard sur 90 jours peuvent prendre 4 secondes sur un VPS modeste. Trois actions ramenent ca sous 200 ms.
D’abord, ajoute un index BRIN sur created_at qui consomme 100 fois moins d’espace qu’un index B-tree pour des donnees insert-only. Ensuite, active autovacuum_vacuum_scale_factor=0.05 pour declencher VACUUM plus tot. Enfin, programme un pg_repack mensuel pour defragmenter sans bloquer les ecritures de tracking.
CREATE INDEX idx_event_created_brin ON website_event USING BRIN (created_at);
ALTER TABLE website_event SET (autovacuum_vacuum_scale_factor = 0.05);
Le signal de reussite : EXPLAIN ANALYZE sur une requete dashboard 90 jours doit afficher Bitmap Index Scan idx_event_created_brin avec un cout total inferieur a 5000 et une duree d’execution sous 250 ms.
Etape 12 : conformite directive CEDEAO et information des visiteurs
La directive CEDEAO sur la protection des donnees personnelles transposee au Senegal par la loi 2008-12 et en Cote d’Ivoire par la loi 2013-450 impose une information loyale meme sans cookie. Ajoute une mention courte dans ton pied de page : mesure d’audience anonyme via Umami auto-heberge, aucun cookie, aucune donnee personnelle collectee, IP hashee et tronquee apres 24 heures.
Umami hash deja l’IP avec un sel quotidien et la jette apres 24h. Documente cette pratique dans ta page Politique de confidentialite avec lien vers le code source GitHub. Tu evites ainsi le bandeau cookie agressif et tu restes conforme aux autorites locales tout en epargnant le visiteur d’un clic supplementaire.
Etape 13 : couts mensuels totaux pour un projet West Africa
Recapitulatif chiffre pour un site qui recoit 50 000 visites par mois depuis Dakar, Abidjan, Cotonou et Lome. VPS Hetzner CX22 : 4,51 EUR HT soit environ 2960 FCFA. Domaine .io chez Porkbun : 36 USD par an soit 1970 FCFA mensualises. Backblaze B2 pour backups : 0,02 USD soit 13 FCFA. Cloudflare plan gratuit : 0 FCFA. Total approximatif 4943 FCFA mensuels, contre environ 16 400 FCFA pour Plausible Cloud equivalent ou 0 FCFA mais perte de souverainete avec GA4.
L’investissement initial en temps est de 90 minutes pour un dev habitue a Docker. Le retour sur investissement se fait des le second mois en economie d’abonnement et en independance technique vis-a-vis de Google. Bonus : la stack tient sur un seul VPS et peut accueillir simultanement Authentik, Metabase et un blog WordPress sans saturer 4 Go de RAM.