Guide de déploiement

Comment héberger PostHog sur un VPS

Déployer sur un VPS Cloud →

Tutoriel

Comment héberger PostHog sur un VPS

Self-hosting9 min de lecture17 étapes

PostHog est la réponse open source à Mixpanel et Amplitude : events, entonnoirs, session recordings, feature flags et A/B testing dans une seule instance auto-hébergée. Sur le cloud de l'éditeur, la facture grimpe dès que le volume d'événements dépasse les paliers gratuits — quelques millions d'events par mois suffisent pour atteindre plusieurs centaines de dollars. Sur votre VPS, le coût est celui du serveur, rien de plus. Vous gardez les données comportementales de vos utilisateurs sur votre infrastructure, vous respectez le RGPD sans contrats supplémentaires, et vous activez la totalité des modules — session replay, feature flags, expériences A/B — sans aucun palier payant. Ce guide couvre l'installation pas à pas via Docker Compose, la configuration d'un reverse proxy nginx avec HTTPS, la mise en place d'un object storage pour les session recordings, le branchement du SDK JavaScript, et l'activation des feature flags.

Sommaire· Ce que PostHog fait que les alternatives SaaS ne permettent pas1/11
  1. 01Ce que PostHog fait que les alternatives SaaS ne permettent pas
  2. 02Comparatif rapide : PostHog self-hosted vs Mixpanel Cloud
  3. 03Prérequis serveur
  4. 04Installer PostHog avec Docker Compose
  5. 05Configurer un reverse proxy nginx pour HTTPS
  6. 06Object storage pour les session recordings (S3 ou MinIO)
  7. 07Envoyer vos premiers events depuis votre application
  8. 08Activer les Feature Flags
  9. 09Optimisation performance : désactivez les session recordings au démarrage
  10. 10Mettre à jour PostHog
  11. 11Documentation officielle

Ce que PostHog fait que les alternatives SaaS ne permettent pas

Mixpanel, Amplitude et Heap sont des outils cloud : vos données partent sur leurs serveurs, leur politique de rétention fixe ce que vous pouvez conserver, et le sampling s'active automatiquement dès que votre volume dépasse certains seuils. PostHog self-hosted supprime ces trois contraintes. Les événements restent dans votre base ClickHouse, sur votre disque ou votre object storage — aucune copie ne part à l'extérieur. La rétention n'a pas de plafond imposé : vous choisissez vous-même quand purger les anciennes données. Le sampling n'existe pas : chaque événement est enregistré, même lors de pics de trafic. Ajoutez à cela la conformité RGPD sans DPA à négocier avec un tiers, la possibilité de modifier le code source, et un accès direct aux données brutes dans ClickHouse pour vos propres analyses SQL.

Comparatif rapide : PostHog self-hosted vs Mixpanel Cloud

Faites défiler le tableau

CritèrePostHog self-hostedMixpanel Cloud
Prix mensuel (1M events/mois)~$15–20 (coût VPS)~$25–100+
Données hébergées chez vousOuiNon
Conformité RGPD simplifiéeOui (pas de DPA tiers)Partielle (DPA requis)
Sampling automatiqueAucunActivé au-delà des paliers
Session recordings inclusesOuiOption payante
Feature flags & A/B testingOui, inclusPayant (plan Growth+)
Accès aux données brutes SQLOui (ClickHouse direct)Non

Prérequis serveur

PostHog embarque ClickHouse, Kafka, Redis et PostgreSQL dans la même stack Docker Compose. C'est la solution d'analytics la plus gourmande en ressources de cette catégorie, et sous-dimensionner le VPS provoque des crashs de ClickHouse ou des timeouts Kafka dès les premiers événements. Prévoyez au minimum 4 vCPU et 8 Go de RAM pour un usage léger (moins d'un million d'events par mois). Pour une charge plus soutenue — 1 à 5 millions d'events par mois — visez 8 vCPU et 16 Go de RAM. Côté stockage, ClickHouse est très efficace en compression, mais les session recordings s'accumulent vite : prévoyez 50 Go de SSD minimum, et ajoutez un object storage externe (S3 ou MinIO) dès que vous activez les recordings. Côté logiciel : Docker Engine 24+ et Docker Compose v2, un nom de domaine avec un enregistrement A pointant vers le VPS, et les ports 80 et 443 ouverts dans votre pare-feu.

Installer PostHog avec Docker Compose

  1. Installer Docker sur le VPS

    Connectez-vous en SSH, puis installez Docker avec le script officiel : curl -fsSL https://get.docker.com | sh. Ajoutez votre utilisateur au groupe docker pour éviter sudo : usermod -aG docker $USER. Vérifiez avec docker compose version que Compose v2 est disponible.

  2. Cloner le dépôt PostHog et préparer l'environnement

    Clonez le dépôt officiel : git clone https://github.com/PostHog/posthog.git && cd posthog. Copiez le fichier d'environnement exemple : cp .env.example .env. Ouvrez .env dans un éditeur pour configurer les variables essentielles.

  3. Configurer les variables d'environnement

    Dans .env, renseignez au minimum : SECRET_KEY (générez une clé aléatoire de 50 caractères avec python3 -c "import secrets; print(secrets.token_hex(25))"), SITE_URL=https://posthog.votre-domaine.com, DISABLE_SECURE_SSL=false (ou true si vous testez en HTTP local sans certificat). Laissez les valeurs de POSTGRES_*, REDIS_* et CLICKHOUSE_* avec leurs défauts Docker pour un déploiement simple.

  4. Démarrer la stack et attendre la migration

    Lancez tous les services en arrière-plan : docker compose -f docker-compose.yml up -d. La première fois, PostHog exécute automatiquement les migrations de base de données — cela prend 2 à 5 minutes selon la puissance du serveur. Suivez la progression avec docker compose logs -f web jusqu'à voir PostHog server is now listening on port 8000.

  5. Accéder à l'interface et créer votre compte

    Accédez à http://localhost:8000 (ou via votre domaine si le DNS est déjà configuré). L'assistant de premier lancement vous guide pour créer le compte administrateur, nommer votre organisation, et créer votre premier projet. Notez la Project API Key affichée — vous en aurez besoin pour brancher le SDK.

Configurer un reverse proxy nginx pour HTTPS

  1. Installer nginx et Certbot

    Sur la machine hôte (hors Docker) : apt install -y nginx certbot python3-certbot-nginx. Assurez-vous que votre domaine posthog.votre-domaine.com pointe bien vers l'IP du VPS avant cette étape — Certbot doit pouvoir valider via HTTP.

  2. Créer le vhost nginx

    Créez /etc/nginx/sites-available/posthog avec le contenu suivant : server { listen 80; server_name posthog.votre-domaine.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }. Activez-le : ln -s /etc/nginx/sites-available/posthog /etc/nginx/sites-enabled/.

  3. Émettre le certificat TLS

    Lancez certbot --nginx -d posthog.votre-domaine.com. Certbot modifie automatiquement le vhost pour rediriger HTTP vers HTTPS et configure le renouvellement automatique. Testez le renouvellement avec certbot renew --dry-run.

  4. Recharger nginx et vérifier

    Appliquez la configuration : nginx -t && systemctl reload nginx. Ouvrez https://posthog.votre-domaine.com dans un navigateur — vous devriez voir l'interface PostHog avec un certificat valide. Mettez à jour SITE_URL dans .env si ce n'est pas déjà fait, puis redémarrez le service web : docker compose restart web.

Object storage pour les session recordings (S3 ou MinIO)

  1. Comprendre pourquoi un object storage est nécessaire

    Les session recordings génèrent de nombreux fichiers de petite taille (un par segment de session). Les stocker sur le disque local du VPS remplit rapidement le SSD et complique les sauvegardes. Un object storage compatible S3 — qu'il s'agisse d'AWS S3, de Cloudflare R2 ou de MinIO auto-hébergé — externalise ce stockage de façon élastique.

  2. Déployer MinIO sur le même VPS (option auto-hébergée)

    Si vous ne voulez pas dépendre d'un service externe, ajoutez MinIO à votre docker-compose.yml : minio: image: minio/minio environment: MINIO_ROOT_USER: posthog MINIO_ROOT_PASSWORD: changeme-mot-de-passe-fort command: server /data --console-address ':9001' volumes: - ./minio-data:/data. Créez ensuite un bucket nommé posthog dans l'interface MinIO (port 9001).

  3. Configurer les variables d'environnement PostHog

    Dans .env, ajoutez : OBJECT_STORAGE_ENABLED=true, OBJECT_STORAGE_ENDPOINT=http://minio:9000 (ou l'URL de votre bucket S3), OBJECT_STORAGE_ACCESS_KEY_ID=posthog, OBJECT_STORAGE_SECRET_ACCESS_KEY=changeme-mot-de-passe-fort, OBJECT_STORAGE_BUCKET=posthog. Redémarrez la stack : docker compose up -d.

  4. Vérifier avec un premier session recording

    Dans les paramètres du projet PostHog, activez « Session recording ». Naviguez sur votre application pendant quelques secondes, puis retournez dans PostHog sous « Session Recordings ». Un enregistrement devrait apparaître en quelques minutes. Vérifiez dans MinIO (ou S3) que des fichiers ont bien été créés dans le bucket.

Envoyer vos premiers events depuis votre application

  1. Installer le SDK JavaScript

    Dans votre projet front-end : npm install posthog-js. Si vous utilisez un framework comme React, Vue ou Next.js, importez et initialisez PostHog une seule fois au niveau racine de l'application.

  2. Initialiser avec votre clé de projet et l'URL de votre instance

    Ajoutez l'initialisation : import posthog from 'posthog-js'; posthog.init('phc_VOTRE_PROJECT_API_KEY', { api_host: 'https://posthog.votre-domaine.com', autocapture: true });. Remplacez phc_VOTRE_PROJECT_API_KEY par la clé visible dans les paramètres du projet PostHog. Avec autocapture: true, PostHog enregistre automatiquement les clics, les soumissions de formulaires et les changements de page.

  3. Capturer des events personnalisés

    Pour un event métier précis, appelez : posthog.capture('commande_passee', { montant: 49.90, devise: 'EUR', produit: 'vps-cloud-4vcpu' });. Les propriétés associées à l'event seront disponibles dans les entonnoirs, les cohortes et les requêtes SQL ClickHouse.

  4. Vérifier dans le dashboard

    Rendez-vous dans PostHog sous « Activity » ou « Events ». Les events apparaissent en temps quasi-réel (quelques secondes de latence). Si rien n'arrive au bout de deux minutes, vérifiez que api_host dans l'init correspond exactement à l'URL de votre instance, et que le certificat TLS est valide.

Activer les Feature Flags

Les feature flags permettent de déployer une fonctionnalité progressivement — d'abord pour 5 % des utilisateurs, puis 20 %, puis 100 % — sans recompiler ni redéployer l'application. Dans PostHog, rendez-vous sous « Feature Flags » et créez un nouveau flag avec une clé (mon-nouveau-module), une condition de rollout (pourcentage ou cohorte d'utilisateurs), et optionnellement des variantes pour un vrai test A/B. Côté application JavaScript, évaluez le flag : if (posthog.isFeatureEnabled('mon-nouveau-module')) { /* afficher la nouvelle fonctionnalité */ }. Pour une évaluation côté serveur (Python ou Node.js), utilisez le SDK backend correspondant avec la même PROJECT_API_KEY — l'évaluation se fait alors sans aller-retour client, ce qui évite le flash de contenu. PostHog enregistre automatiquement un event $feature_flag_called à chaque évaluation, ce qui vous permet de corréler l'activation d'un flag avec n'importe quelle métrique de votre dashboard.

Optimisation performance : désactivez les session recordings au démarrage

Si votre VPS est configuré avec le minimum de 4 vCPU / 8 Go de RAM, les session recordings mobilisent des ressources importantes côté ClickHouse dès les premières heures de trafic. Recommandation : laissez les recordings désactivés pendant les 30 premiers jours. Cela vous laisse le temps de valider la stabilité de la stack, d'affiner la configuration de l'object storage, et de monter en RAM si nécessaire. Activez-les ensuite dans les paramètres du projet — tous les recordings futurs seront capturés, et vous pouvez définir un taux d'échantillonnage pour n'enregistrer qu'un pourcentage de sessions et maîtriser l'espace disque.

Mettre à jour PostHog

L'équipe PostHog publie des mises à jour régulières. Pour mettre à jour : git pull origin master dans le répertoire du dépôt, puis docker compose pull pour récupérer les nouvelles images, et enfin docker compose up -d. Les migrations de base de données s'exécutent automatiquement au redémarrage du service web — une interruption de quelques dizaines de secondes est normale. Consultez les release notes avant chaque mise à jour majeure : certaines versions imposent une mise à jour intermédiaire (pas de saut de version).

Documentation officielle

Ce guide couvre l'installation de base sur VPS. Pour les sujets avancés — réplication ClickHouse, SSO SAML, webhooks, intégrations data warehouse, et les options de configuration de Kafka — référez-vous à la documentation officielle de PostHog. Elle reste la référence pour 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