Marketing Digital

Déployer Plausible Analytics sur Hetzner avec Coolify : tutoriel complet 2026

13 min de lecture

📍 Article principal de la série : Plausible Analytics 2026 : guide pratique.

Trente minutes pour transformer un VPS vide en serveur Plausible Analytics de production. Cette procédure est validée chez plusieurs agences digitales et e-commerces à Dakar, Casablanca, Tunis, et Abidjan, avec un coût total de 4,51 € par mois pour un nombre illimité de sites.

Prérequis

  • Hetzner CX23 minimum (2 vCPU, 4 GB RAM) sous Ubuntu 22.04 / Debian 12.
  • Coolify v4 installé.
  • Nom de domaine DNS A vers VPS : analytics.votre-entreprise.com.
  • Niveau attendu : intermédiaire.
  • Temps estimé : 30-45 minutes.

Pour cette installation, vous avez besoin d’un VPS Hetzner CX22 minimum (2 vCPU, 4 Go RAM) avec Coolify déjà installé et fonctionnel. Le DNS de votre domaine doit pointer vers l’IP du serveur. Ouvrez les ports 80 et 443 dans le firewall Hetzner Cloud. Coolify gère automatiquement l’obtention du certificat Let’s Encrypt. Comptez 10-15 minutes pour cette installation initiale si Coolify est déjà opérationnel, 45-60 minutes si vous démarrez de zéro avec un VPS vierge.

Étape 1 — Préparer DNS

dig +short analytics.votre-entreprise.com
# Doit retourner l'IP VPS

Connectez-vous à l’interface de votre registrar (OVH, Namecheap, Cloudflare DNS) et créez un enregistrement A pour le sous-domaine choisi, par exemple plausible.example.com qui pointe vers l’IP publique de votre serveur Hetzner. La propagation DNS prend 5 à 60 minutes selon le TTL. Vérifiez avec dig plausible.example.com que la résolution fonctionne avant de passer à l’étape suivante. Sans DNS résolu, Let’s Encrypt ne peut pas générer le certificat HTTPS.

Étape 2 — Créer service dans Coolify

Resources → + New → Service → rechercher « Plausible ». Coolify déploie le template officiel. Nom : plausible-prod. Server : Hetzner CX23.

Dans l’interface Coolify, cliquez sur Add new resource puis Service. Cherchez Plausible Analytics dans le catalogue de services prêts à l’emploi. Coolify précompose automatiquement la stack docker compose qui inclut Plausible, PostgreSQL et ClickHouse. Assignez le service à un projet et un environnement (production typiquement). Cette automatisation économise 30-45 minutes de configuration docker manuelle par rapport à l’installation classique.

Étape 3 — Variables d’environnement

BASE_URL=https://analytics.votre-entreprise.com
SECRET_KEY_BASE=générez-64-caractères-aléatoires
DATABASE_URL=postgres://plausible:password@plausible-db:5432/plausible
CLICKHOUSE_DATABASE_URL=http://plausible-events-db:8123/plausible_events_db
DISABLE_REGISTRATION=invite_only

# Email (Brevo recommandé)
MAILER_EMAIL=analytics@votre-entreprise.com
SMTP_HOST_ADDR=smtp-relay.brevo.com
SMTP_HOST_PORT=587
SMTP_USER_NAME=votre-login
SMTP_USER_PWD=votre-clé-api
SMTP_HOST_SSL_ENABLED=false
SMTP_RETRIES=2

Plausible exige plusieurs variables critiques dans son .env. BASE_URL avec l’URL HTTPS complète (https://plausible.example.com). SECRET_KEY_BASE générée via openssl rand -base64 64. DATABASE_URL et CLICKHOUSE_DATABASE_URL pré-remplies par Coolify. ADMIN_USER_NAME, ADMIN_USER_EMAIL, ADMIN_USER_PWD pour le compte super-admin créé automatiquement au premier démarrage. MAILER_EMAIL avec une adresse fonctionnelle pour les notifications. Configurez aussi un SMTP (Brevo gratuit jusqu’à 300 emails/jour) pour les invitations.

Étape 4 — Domaine HTTPS

Onglet Domains : https://analytics.votre-entreprise.com. Force HTTPS : ON.

Dans Coolify, ouvrez l’onglet Domains du service Plausible. Ajoutez votre domaine plausible.example.com et cochez Force HTTPS Redirect. Coolify utilise Traefik en arrière-plan pour générer le certificat Let’s Encrypt automatiquement (challenge HTTP-01). Si la génération échoue, vérifiez que le port 80 est joignable depuis l’extérieur (firewall) et que le DNS est bien propagé. Le certificat se renouvelle automatiquement 30 jours avant expiration.

Étape 5 — Lancer le déploiement

Cliquer Deploy. Coolify pull les images plausible/community-edition, postgres:16, clickhouse-server. Comptez 4 minutes.

Cliquez sur Deploy dans Coolify. La stack Plausible démarre en 2-5 minutes selon la vitesse du disque NVMe. Suivez les logs en temps réel dans l’onglet Logs de Coolify pour vérifier l’absence d’erreurs. PostgreSQL se prépare en premier, puis ClickHouse, enfin l’application Plausible elle-même. Le service est prêt quand le port 8000 (interne) répond avec un statut 200. Coolify health check vérifie automatiquement l’état du service.

Étape 6 — Premier compte admin

Ouvrir https://analytics.votre-entreprise.com/register. Saisir email, password, nom. Le premier compte créé devient admin de l’instance.

Ouvrez https://plausible.example.com dans votre navigateur. Si DISABLE_REGISTRATION=true et que ADMIN_USER_* sont définis, le premier compte admin est créé automatiquement avec les credentials du .env. Sinon, créez un compte via le formulaire d’inscription puis désactivez l’inscription publique en mettant DISABLE_REGISTRATION=true et redéployez. Cette étape évite que des inconnus créent des comptes sur votre instance privée.

Étape 7 — Activer la feature flag SSO (optionnel)

Pour brancher Authentik ou autre IdP via OIDC, ajouter dans config :

SSO_ENABLED=true
OIDC_ISSUER=https://auth.votre-entreprise.com/application/o/plausible/
OIDC_CLIENT_ID=...
OIDC_CLIENT_SECRET=...

Pour les équipes qui veulent intégrer Plausible avec un SSO existant (Authentik, Keycloak, Google Workspace), Plausible CE supporte OIDC depuis la version 2.1.0 via la flag ENABLE_OIDC=true. Configurez OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET dans le .env. Au prochain redémarrage, le bouton de login affiche une option SSO en plus de l’authentification email. Pour les freelances individuels, gardez le login email simple.

Étape 8 — Ajouter votre premier site

Dashboard Plausible → Sites → Add a website. Saisir le domaine (ex : boutique.votre-entreprise.com). Plausible génère le snippet :

<script defer data-domain="boutique.votre-entreprise.com" 
  src="https://analytics.votre-entreprise.com/js/script.js"></script>

Dans le dashboard Plausible, cliquez sur Add Website. Entrez le domaine du site à tracker (sans https://, juste exemple.sn par exemple). Choisissez le fuseau horaire (Africa/Dakar pour le Sénégal, Africa/Abidjan pour la Côte d’Ivoire). Sélectionnez la devise locale si vous utilisez le tracking e-commerce (XOF pour la zone UEMOA). Plausible génère le snippet JavaScript à coller dans l’en-tête HTML de votre site.

Étape 9 — Coller le snippet

Sur WordPress : plugin officiel Plausible Analytics. Sur Next.js/Astro : composant dans le head. Sur sites custom : direct dans <head>.

Le snippet généré ressemble à <script defer data-domain="exemple.sn" src="https://plausible.example.com/js/script.js"></script>. Collez-le dans la balise <head> de votre site avant la fermeture. Pour WordPress, utilisez le plugin Insert Headers and Footers (gratuit). Pour Astro/Next.js/Nuxt, ajoutez-le au layout principal. Le défer assure qu’il ne bloque pas le rendu initial de la page. La taille du script est inférieure à 1 Ko, négligeable même sur 4G.

Étape 10 — Vérifier la collecte

Visiter votre site, attendre 30 secondes, retourner sur le dashboard Plausible. La carte « Real-time » doit afficher au moins 1 visiteur. Sinon, vérifier console browser pour erreurs JavaScript.

Naviguez sur votre site dans un onglet incognito (pour éviter le filtre admin Plausible qui exclut votre IP par défaut). Retournez sur le dashboard Plausible. Le compteur ‘Current visitors’ devrait afficher 1. Si rien ne s’affiche après 30 secondes, vérifiez la console réseau de votre site : la requête vers /api/event doit retourner 202 Accepted. Si elle est bloquée par un AdBlocker, c’est normal — Plausible respecte la décision utilisateur de bloquer le tracking.

Étape 11 — Configurer les sauvegardes

# Backup script /srv/scripts/plausible-backup.sh
docker exec plausible-db pg_dump -U plausible plausible | gzip > /tmp/pg.gz
docker exec plausible-events-db clickhouse-client --query "BACKUP DATABASE plausible_events_db TO Disk('backups', 'ch.zip')"
restic backup /tmp/pg.gz /var/lib/coolify/services/plausible-prod/clickhouse-backups
rm -f /tmp/pg.gz

Plausible stocke deux types de données critiques : config dans PostgreSQL (utilisateurs, sites, paramètres) et événements dans ClickHouse (analytics historiques). Sauvegardez les deux quotidiennement via Restic ou Borg vers un stockage S3 distant (Backblaze B2, Hetzner Storage Box). Pour PostgreSQL, utilisez pg_dump dans un cron container. Pour ClickHouse, utilisez la commande BACKUP TO Disk(‘s3’) qui exporte vers S3. Testez la restauration trimestriellement sur un VPS de staging pour valider que les sauvegardes sont effectivement récupérables.

Erreurs fréquentes

Erreur Cause Solution
ClickHouse refuse de démarrer RAM insuffisante CX23 minimum, sinon CCX13
Email confirmation jamais reçu SMTP non configuré Test avec Brevo + DKIM
Stats pas affichées data-domain mal écrit Casse exacte, sans https://
Adblockers bloquent Script sur domaine third-party Proxifier via Caddy /js/script.js
SSO Authentik refuse OIDC discovery URL incorrect Ajouter /.well-known/openid-configuration
Sauvegarde ClickHouse échoue Permissions volume Mounted /backups dans docker

Mise en œuvre dans le contexte sénégalais

Trois précisions. Latence depuis Afrique : Hetzner Falkenstein 95 ms vers Dakar via ACE, 90 ms vers Casablanca, idéal. Bande passante : Plausible script 1 Ko + 50k pages vues/mois consomme ~ 50 Mo, négligeable. Multi-sites agence : une instance Plausible CE supporte jusqu’à 50 sites confortablement, comparé à Plausible Cloud à 19 USD/site/mois.

Tutoriels frères

Cette installation Plausible se complète bien avec d’autres outils self-hostés. Umami (alternative analytics, encore plus léger) couvre les mêmes besoins. Matomo offre plus de fonctionnalités (heatmaps, funnels, A/B testing) au prix d’une stack plus lourde. Pour le monitoring infra, Grafana + Loki + Prometheus tournent à côté sur le même VPS. Pour les sauvegardes, Restic ou Borg avec Backblaze B2 (6 USD/To/mois) protègent l’ensemble.

FAQ

Combien de sites max sur CX23 ? 50 sites avec 100k pages vues mensuelles cumulées.

Migration depuis Plausible Cloud ? Export CSV via Plausible Cloud, import via API CE. Comptez 15 minutes pour 1 an de données.

HTTP vs HTTPS pour analytics ? Toujours HTTPS, sinon mixed content sur sites HTTPS bloque le tracking.

Mises à jour ? Coolify : Pull latest image + Redeploy. Vérifier changelog GitHub avant updates majeures.

Cumul Plausible Cloud + Plausible CE ? Possible mais dédupliquer manuellement les visiteurs entre les deux.

Sur le même thème

Pour creuser l’écosystème self-hosted analytics, voyez nos tutoriels Umami (alternative légère et privacy-first), comparaison Plausible vs Umami pour choisir, intégration WordPress, et migration depuis Google Analytics 4. Pour les équipes qui veulent aussi auto-héberger leur communication interne, Mattermost, Outline et Authentik forment une stack collaborative cohérente. Cette progression vers le self-hosting réduit la dépendance aux services tiers et la facture mensuelle SaaS.

Étape A — Préparer le serveur Hetzner avant Coolify

Avant d’installer Coolify, vérifiez que votre Hetzner CX22 (2 vCPU, 4 Go RAM, 40 Go SSD, Falkenstein) tourne sur Ubuntu 24.04 LTS à jour. Connectez-vous en SSH et lancez apt update && apt full-upgrade -y && reboot. Ce reboot évite que Coolify échoue à démarrer Docker à cause d’un kernel obsolète. Après reboot, vérifiez avec uname -r que vous êtes bien sur 6.8 ou plus récent.

Plausible Community Edition v3 charge environ 1,2 Go de RAM en idle (Postgres + ClickHouse + app Elixir). Sur un CX22, gardez au moins 1,5 Go libres pour le système. Si vous prévoyez plus de 200 000 événements/mois, passez sur CX32 (4 Go RAM, 7,90 EUR/mois soit 5 182 FCFA) — c’est moins douloureux que de découvrir l’OOM kill un dimanche matin.

Étape B — Hardening SSH avant exposition publique

Dès l’installation, désactivez le login root par mot de passe. Éditez /etc/ssh/sshd_config : PermitRootLogin prohibit-password, PasswordAuthentication no, PubkeyAuthentication yes. Rechargez avec systemctl restart ssh. Vérifiez immédiatement depuis un autre terminal que votre clé SSH fonctionne avant de fermer la session active — sinon vous vous lockez out et il faudra passer par la console Hetzner Rescue System.

Installez ensuite UFW : ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable. Coolify utilise aussi le port 8000 par défaut pour son UI ; ne l’ouvrez pas sur Internet, accédez-y via tunnel SSH ssh -L 8000:localhost:8000 root@votre-ip. Sortie attendue : ufw status liste 22, 80, 443 en ALLOW et le reste implicitement DENY.

Étape C — Comprendre l’architecture Plausible CE v3

Plausible Community Edition v3 (sortie 2024) a fusionné le pricing self-hosted de la version commerciale avec une licence AGPL. L’architecture comprend quatre conteneurs : plausible (Elixir/Phoenix), plausible_db (Postgres 16), plausible_events_db (ClickHouse), et un service mail (Bamboo SMTP). Coolify gère ces quatre conteneurs comme un seul service One Click si vous passez par le marketplace.

Différence clé avec une version sortie d’un fork : v3 inclut Funnels, Goals avec revenue tracking et Custom Properties illimitées. Pas besoin d’acheter une licence — la version self-hosted est complète. Les SSO entreprise et le support payant restent réservés au cloud commercial.

Étape D — Choisir entre OneClick Coolify et Compose manuel

Coolify propose Plausible dans son marketplace OneClick. C’est l’option recommandée si vous démarrez : Coolify gère les volumes, les network bridges, et expose les bonnes variables. Allez dans Resources → New Resource → OneClick → tapez « plausible » → Deploy. Coolify génère SECRET_KEY_BASE et BASE_URL automatiquement.

L’option Docker Compose manuel est utile si vous voulez personnaliser ClickHouse (par exemple ajuster max_memory_usage à 2 Go au lieu du défaut). Récupérez le compose.yml officiel sur le repo GitHub Plausible, collez-le dans Coolify → New Resource → Docker Compose, ajustez les variables, déployez.

Étape E — Configurer SMTP pour les emails de signup

Plausible envoie un email de confirmation au premier signup admin et pour les invites d’équipe. Sans SMTP configuré, vous ne pourrez jamais valider votre compte. Utilisez Brevo (ex-Sendinblue) — plan gratuit 300 emails/jour, suffit largement pour un usage interne.

SMTP_HOST_ADDR=smtp-relay.brevo.com
SMTP_HOST_PORT=587
SMTP_HOST_SSL_ENABLED=false
SMTP_USER_NAME=votre-login@smtp-brevo.com
SMTP_USER_PWD=votre-cle-smtp
MAILER_EMAIL=plausible@votre-domaine.io

Sortie attendue : après redéploiement, le signup envoie un email de validation en 5 à 15 secondes. Si rien n’arrive, vérifiez les logs du conteneur mail via Coolify → Logs et grep « smtp » pour voir le code de retour Brevo (souvent 535 si le mot de passe est wrong).

Étape F — Importer un historique Google Analytics

Si vous migrez depuis GA4, Plausible importe vos données historiques. Settings → Imports & Exports → Import from Google Analytics 4. Vous OAuthifiez votre compte Google, sélectionnez la propriété GA4, choisissez la période (max 36 mois). L’import tourne en background côté ClickHouse — comptez 5 à 30 minutes pour 12 mois de données sur un site moyen.

Vérifiez après import que la timezone matche votre site (Settings → General → Timezone Africa/Dakar). Sinon les sessions journalières apparaîtront décalées de 1h par rapport à GA4 et vos rapports historiques seront illisibles.

Étape G — Maillage avec votre stack Astro et tracking custom

Pour un site Astro déployé selon notre tutoriel Astro sur Cloudflare Pages ou Coolify, ajoutez le snippet Plausible dans BaseLayout.astro, balise head. Utilisez la version plausible.js?ext qui inclut outbound-links, file-downloads et 404 en une ligne :

<script defer data-domain="votre-domaine.io"
  src="https://plausible.votre-domaine.io/js/script.outbound-links.file-downloads.404.js"></script>

Pour le tracking d’événements custom (newsletter signup, paiement Mixx by Yas, click WhatsApp Business), enchaînez avec notre tutoriel custom events Umami dont la philosophie API est très proche de Plausible — vous adapterez en remplaçant umami.track() par plausible('NomEvent', {props:{...}}).

Étape H — Sauvegardes Postgres et ClickHouse hebdomadaires

Coolify intègre des backups automatiques Postgres via S3-compatible (Backblaze B2, Wasabi, ou Hetzner Object Storage à 5,99 EUR/mois pour 1 To). Resources → Plausible → Database → Scheduled Backups → Daily 03:00 UTC. ClickHouse demande un dump manuel : docker exec plausible_events_db clickhouse-client --query "BACKUP DATABASE plausible_events TO Disk('backups', 'weekly.zip')".

Testez la restauration une fois par trimestre sur un VPS jetable. Une sauvegarde jamais restaurée n’est pas une sauvegarde. Documentez la procédure dans le README de votre projet pour qu’un collègue puisse la rejouer sans vous appeler à 23h un samedi.

Partager