[{"data":1,"prerenderedAt":166},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-langfuse-vps-ma-fr":6,"promo-bar-likely":165},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-langfuse-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":98,"ctaBody":99,"ctaButton":100,"ctaUrl":101,"relatedPosts":102},177,"self-host-langfuse-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-langfuse-on-a-vps-llm-observability-no-saas-bill","استضافة-langfuse-على-vps-مراقبة-llm-بلا-فاتورة-saas","alojar-langfuse-en-un-vps","Héberger Langfuse sur un VPS : observabilité LLM sans SaaS","Auto-hébergez Langfuse sur un VPS : traçage, évaluation de prompts et suivi des coûts LLM. Guide complet : installation, nginx, TLS, SDK Python\u002FJS, dépannage.",11,2,false,"2026-07-12T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},1,"Intelligence Artificielle","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-langfuse-vps-poster.svg",{"categorySlug":27,"appSlug":34},"langfuse","Toute application propulsée par un LLM finit par soulever une question à laquelle ses développeurs ne peuvent pas répondre à partir des seuls logs : pourquoi cette réponse s'est-elle dégradée, quelle version de prompt a été la plus performante, et où part l'argent ? Langfuse (MIT, ~30 k étoiles sur GitHub, v3.212.0) est la réponse open source : une plateforme d'observabilité full-stack pour applications LLM, que vous déployez sur votre propre VPS et connectez à n'importe quel fournisseur de modèles en quelques minutes.",[37,41,51,54,79,82,86,89,92,95],{"type":38,"title":39,"body":40},"h2","Pourquoi les applications LLM nécessitent une observabilité dédiée","Les outils d'APM traditionnels (Datadog, New Relic) capturent la latence HTTP et les taux d'erreur, mais ils sont aveugles à ce qui se passe à l'intérieur d'un appel LLM. Une réponse qui arrive en 800 ms peut malgré tout être factuellement fausse, vague au point d'être inutile, ou trois fois plus coûteuse que celle de la veille parce qu'une régression de prompt est passée entre les mailles de la revue de code. Langfuse résout ce problème en traitant chaque interaction LLM comme une trace structurée : il enregistre le prompt complet (y compris le message système et l'historique de conversation), la complétion, le modèle utilisé, le décompte de tokens, la ventilation de la latence par span, ainsi que tous les scores d'évaluation que votre équipe y attache. Vous pouvez ensuite filtrer, comparer et reproduire n'importe quelle trace, individuellement ou de façon agrégée.",{"type":42,"title":43,"items":44},"ul","Ce que Langfuse vous offre d'emblée",[45,46,47,48,49,50],"Traçage LLM full-stack : prompt, complétion, latence, coût et nombre de tokens — y compris les spans imbriqués pour les chaînes d'agents (LangChain, LlamaIndex, Dify).","Hub de gestion des prompts : versionnez vos prompts, préparez des variantes, faites des tests A\u002FB en production et promouvez la gagnante sans déploiement de code.","Framework d'évaluation : lancez du LLM-as-a-judge, des files d'annotation humaine ou des fonctions de scoring personnalisées sur n'importe quelle trace ou dataset.","Analytique des coûts : suivez la consommation de tokens par modèle, endpoint, utilisateur et session — changez de fournisseur en vous appuyant sur des données concrètes, pas sur des suppositions.","Gestion des datasets : capturez les traces de production comme jeux de tests de référence pour l'évaluation hors ligne et la détection de régressions.","SDK natif pour Python et TypeScript, plus une intégration automatique avec LiteLLM, LangChain, LlamaIndex, Dify, Haystack et VercelAI.",{"type":38,"title":52,"body":53},"Sur quoi tourne Langfuse (et pourquoi il lui faut 4 Go de RAM)","Langfuse v3 se présente comme une stack Docker Compose à six services : `langfuse` (frontend Next.js + API), `langfuse-worker` (tâches d'arrière-plan et évaluations), `postgres` (état de l'application), `clickhouse` (analytique des traces — stockage en colonnes optimisé pour les séries temporelles à forte cardinalité), `redis` (file d'attente et cache) et `minio` (stockage d'objets compatible S3 pour les pièces jointes média). ClickHouse justifie le minimum de 4 Go : son compilateur JIT et son moteur d'exécution vectorielle ont besoin de marge. Sur un VPS peu sollicité, la stack complète tourne au repos autour de 1,5–2 Go ; sous une charge de production modérée, prévoyez 4 Go, et 8 Go pour un traçage soutenu à haut débit. Les six services démarrent d'un seul `docker compose up -d` et sont gérés par AWX dans le flux en un clic de ServOrbit.",{"type":55,"title":56,"steps":57},"steps","Déployer Langfuse sur votre VPS en six étapes",[58,61,64,67,70,73,76],{"title":59,"body":60},"Commandez un VPS Power (8 GB de RAM)","Langfuse réclame au moins 4 Go de RAM : au catalogue, le premier plan qui les dépasse est le VPS Power (4 vCPU, 8 GB), à installer sous Ubuntu 24.04 — de quoi absorber aussi un trafic de production permanent. Choisissez un domaine ou sous-domaine que vous contrôlez — les cookies de session NextAuth de Langfuse exigent un véritable domaine en HTTPS.",{"title":62,"body":63},"Installation en un clic depuis le Marketplace","Ouvrez votre panneau de contrôle ServOrbit, allez dans Marketplace → Intelligence Artificielle → Langfuse, puis cliquez sur Déployer. Saisissez votre domaine lorsque cela vous est demandé. Docker Compose télécharge les six images et les démarre ; l'interface web est prête sur le port 3000 en 60 à 90 secondes (l'initialisation de ClickHouse au premier démarrage est la plus longue).",{"title":65,"body":66},"Ouvrez l'interface web et créez votre premier projet","Rendez-vous sur `https:\u002F\u002Fvotre-domaine.com`. Langfuse affiche l'écran d'inscription au premier démarrage. Créez votre compte administrateur, puis allez dans Paramètres → Projets → Créer un projet. Copiez la **Clé publique** et la **Clé secrète** depuis les paramètres du projet — vous en aurez besoin dans votre application.",{"title":68,"body":69},"Instrumentez votre application Python ou TypeScript","En Python : `pip install langfuse`, définissez `LANGFUSE_HOST=https:\u002F\u002Fvotre-domaine.com`, `LANGFUSE_PUBLIC_KEY` et `LANGFUSE_SECRET_KEY`, puis décorez vos appels LLM avec `@observe()` ou utilisez `langfuse.trace()`. En TypeScript : `npm install langfuse`, initialisez le client avec votre host et vos clés. Les traces apparaissent dans le tableau de bord quelques secondes après le premier appel.",{"title":71,"body":72},"Activez le traçage automatique si vous utilisez LiteLLM","Si LiteLLM fait déjà partie de votre stack (ce qui est probable si vous utilisez la stack IA de ServOrbit), ajoutez `success_callback = [\"langfuse\"]` à `litellm_config.yaml` et définissez les trois variables d'environnement Langfuse. Chaque appel LLM relayé par le proxy — sur l'ensemble des modèles en aval — est tracé automatiquement, avec les données de coût et de tokens jointes.",{"title":74,"body":75},"Lancez votre première évaluation","Allez dans Traces, filtrez un échantillon représentatif, cliquez sur « Ajouter au dataset ». Ouvrez Datasets → votre dataset → Lancer l'évaluation, choisissez le LLM-as-a-judge avec un modèle de prompt (« Évaluez la pertinence de cette réponse sur une échelle de 1 à 5 »), puis validez. Les scores apparaissent sur chaque trace de l'ensemble et alimentent le tableau de bord analytique agrégé.",{"title":77,"body":78},"Se connecter la première fois","L'URL ouvre l'écran Langfuse avec un lien « Sign up » : créez votre compte, puis votre organisation et votre premier projet dans l'assistant.",{"type":38,"title":80,"body":81},"Configuration post-installation : reverse proxy nginx, TLS et variables d'environnement clés","L'installation Marketplace de ServOrbit configure nginx et le certificat TLS pour vous. Si vous partez d'une installation manuelle, voici les points critiques.\n\n**Reverse proxy nginx.** Langfuse écoute sur le port 3000. Votre vhost nginx doit proxifier ce port et transmettre les en-têtes nécessaires à NextAuth :\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name votre-domaine.com;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nSi `X-Forwarded-Proto` n'est pas transmis, NextAuth génère des URLs de callback en `http:\u002F\u002F` et les cookies de session ne s'attachent pas sur la réponse HTTPS — symptôme : boucle de redirection après la connexion.\n\n**Variables d'environnement clés.** Le fichier `.env` de la stack Langfuse porte trois variables à personnaliser impérativement avant le premier démarrage :\n\n- `NEXTAUTH_SECRET` : chaîne aléatoire longue (32 caractères minimum). Sans elle, les sessions ne persistent pas entre redémarrages.\n- `NEXTAUTH_URL` : URL publique complète de votre instance (`https:\u002F\u002Fvotre-domaine.com`). Doit correspondre exactement au domaine nginx.\n- `LANGFUSE_INIT_ORG_ID`, `LANGFUSE_INIT_PROJECT_ID`, `LANGFUSE_INIT_PROJECT_PUBLIC_KEY`, `LANGFUSE_INIT_PROJECT_SECRET_KEY` : optionnels, mais utiles pour provisionner une organisation et un projet au premier démarrage sans passer par l'interface.\n\n**TLS.** Le déploiement ServOrbit utilise Let's Encrypt via certbot en mode DNS-01 — aucun port 80 à ouvrir. Si vous configurez le certificat manuellement, pointez les directives `ssl_certificate` et `ssl_certificate_key` vers les fichiers émis par certbot et activez le renouvellement automatique (`certbot renew --quiet` en cron).",{"type":83,"title":84,"body":85},"tip","Associez-le à LiteLLM pour une visibilité complète sur les coûts de l'IA","La stack IA de ServOrbit inclut déjà LiteLLM comme passerelle compatible OpenAI. Connectez Langfuse à LiteLLM avec trois variables d'environnement et vous obtenez une vue d'ensemble complète : LiteLLM applique les limites de débit et route entre les fournisseurs ; Langfuse enregistre chaque trace avec le prompt complet, la complétion, le modèle, les tokens et le coût. Ensemble, ils vous offrent une couche d'opérations IA privée et auditable — pas d'intermédiaire SaaS, aucune donnée qui quitte votre infrastructure.",{"type":38,"title":87,"body":88},"Intégration SDK : tracer vos agents LLM en Python et TypeScript","Langfuse propose deux SDK officiels couvrant les principaux frameworks d'agents.\n\n**Python — décorateur `@observe()`.**\nLa façon la plus directe de tracer un agent :\n\n```python\nfrom langfuse.decorators import observe, langfuse_context\n\n@observe()\ndef run_agent(user_message: str) -> str:\n    # chaque appel LLM imbriqué est automatiquement capturé\n    response = openai_client.chat.completions.create(\n        model=\"gpt-4o\",\n        messages=[{\"role\": \"user\", \"content\": user_message}]\n    )\n    return response.choices[0].message.content\n```\n\nToutes les fonctions imbriquées décorées avec `@observe()` apparaissent comme des spans enfants dans la même trace. Pour attacher des métadonnées (identifiant utilisateur, tags de session) :\n\n```python\nlangfuse_context.update_current_trace(\n    user_id=\"user-42\",\n    session_id=\"session-abc\",\n    tags=[\"production\", \"agent-v2\"]\n)\n```\n\n**LangChain.** L'intégration native s'active en une ligne :\n\n```python\nfrom langfuse.callback import CallbackHandler\nhandler = CallbackHandler()  # lit LANGFUSE_* depuis l'env\nchain.invoke({\"input\": query}, config={\"callbacks\": [handler]})\n```\n\nChaque nœud du graphe LangGraph (ou de la chaîne LangChain) devient un span avec son propre décompte de tokens et son coût.\n\n**TypeScript \u002F JavaScript.**\nInitialisation du client :\n\n```typescript\nimport Langfuse from \"langfuse\";\nconst lf = new Langfuse({\n  publicKey: process.env.LANGFUSE_PUBLIC_KEY!,\n  secretKey: process.env.LANGFUSE_SECRET_KEY!,\n  baseUrl: process.env.LANGFUSE_HOST,\n});\n```\n\nCréation d'une trace et d'une génération :\n\n```typescript\nconst trace = lf.trace({ name: \"agent-run\", userId: \"user-42\" });\nconst generation = trace.generation({\n  name: \"llm-call\",\n  model: \"gpt-4o\",\n  input: messages,\n});\n\u002F\u002F … appel LLM …\ngeneration.end({ output: result, usage: { input: 120, output: 45 } });\nawait lf.shutdownAsync(); \u002F\u002F vider le buffer avant la fin du process\n```\n\n**VercelAI SDK.** Si vous utilisez le SDK VercelAI, l'intégration Langfuse s'active en ajoutant `langfuseExporter` comme `SpanExporter` dans la configuration OpenTelemetry — toutes les générations sont tracées sans modifier votre code métier.",{"type":38,"title":90,"body":91},"Coûts LLM affichés à $0.00 dans la vue Tracing v4 — ce qui se passe et comment contourner","Un problème actif affecte la vue Tracing v4 de Langfuse (signalé dans l'\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flangfuse\u002Flangfuse\u002Fissues\u002F16077\">issue #16077\u003C\u002Fa>, 17 commentaires en août 2026) : la colonne **Cost ($)** affiche systématiquement $0.00 pour toutes les traces.\n\nLa cause est structurelle. La vue v4 lit le coût porté par l'**observation racine** de chaque trace, qui est de type SPAN — un span n'a pas de coût propre, il ne fait qu'encapsuler des générations enfants. Le coût réel est distribué sur les observations de type GENERATION enfantes, mais la vue ne les agrège pas : elle lit la racine, trouve zéro, et affiche zéro.\n\nVos données sont intactes. Le coût est bien enregistré sur chaque génération ; seul l'affichage de la vue principale est faux. Trois contournements fonctionnent en attendant le correctif officiel :\n\n**1. Onglet Analytics \u002F Metrics** — la vue agrégée calcule les coûts sur l'ensemble des générations, pas sur la racine. C'est la source fiable pour suivre votre consommation quotidienne ou par modèle.\n\n**2. Filtrer par type GENERATION dans Traces** — ajoutez le filtre `observation_type = GENERATION` dans la vue Traces. Vous ne voyez plus les traces parentes, mais chaque ligne affiche son coût réel.\n\n**3. Ouvrir le détail d'une trace** — le panneau latéral affiche la ventilation complète par span et génération, avec les coûts corrects. Utile pour diagnostiquer une trace précise.\n\nSi vous observez ce comportement sur votre instance, vérifiez que vous êtes bien sur Langfuse v3.x avec Tracing v4 activé. L'issue est ouverte et suivie par l'équipe Langfuse.",{"type":38,"title":93,"body":94},"Dépannage : cinq erreurs fréquentes après l'installation","**1. Le container `langfuse` ne démarre pas — `Error: NEXTAUTH_SECRET` manquant.**\nLangfuse v3 refuse de démarrer sans cette variable. Vérifiez votre `.env` :\n\n```bash\ndocker compose config | grep NEXTAUTH_SECRET\n```\n\nSi la ligne est absente ou vide, générez une valeur et redémarrez :\n\n```bash\nopenssl rand -base64 32\n# collez le résultat dans .env : NEXTAUTH_SECRET=\u003Cvaleur>\ndocker compose up -d langfuse\n```\n\n**2. Connexion à la base de données refusée — `ECONNREFUSED postgres:5432`.**\nC'est presque toujours un problème de timing au démarrage : `langfuse` tente de se connecter avant que `postgres` soit prêt à accepter des connexions. Vérifiez que votre `docker-compose.yml` déclare `depends_on` avec `condition: service_healthy` pour le service `postgres`. Si le problème persiste, inspectez les logs postgres :\n\n```bash\ndocker compose logs postgres --tail=50\n```\n\n**3. Les traces n'arrivent pas dans le tableau de bord.**\nVérifiez dans cet ordre : (a) les variables d'environnement `LANGFUSE_HOST`, `LANGFUSE_PUBLIC_KEY` et `LANGFUSE_SECRET_KEY` sont-elles définies dans votre application ? (b) Le host pointe-t-il vers l'URL HTTPS publique et non vers `localhost:3000` ? (c) Le SDK Python vide-t-il son buffer avant la fin du process (`langfuse.flush()` ou `langfuse.shutdown()`) ?\n\nUn appel de test rapide depuis Python :\n\n```python\nfrom langfuse import Langfuse\nlf = Langfuse()\nlf.trace(name=\"test-connection\")\nlf.flush()\nprint(\"Trace envoyée — vérifiez le dashboard.\")\n```\n\n**4. Boucle de redirection après la connexion.**\nCause la plus fréquente : `NEXTAUTH_URL` ne correspond pas au domaine réellement utilisé, ou l'en-tête `X-Forwarded-Proto` n'est pas transmis par nginx. Vérifiez que `NEXTAUTH_URL=https:\u002F\u002Fvotre-domaine.com` (sans barre oblique finale) et que votre configuration nginx inclut `proxy_set_header X-Forwarded-Proto $scheme;`.\n\n**5. ClickHouse consomme toute la RAM.**\nSous forte charge, ClickHouse peut dépasser son allocation initiale. Limitez sa consommation mémoire en ajoutant dans votre `.env` :\n\n```bash\nCLICKHOUSE_MAX_MEMORY_USAGE=2000000000\n```\n\nCette valeur (2 Go) est un point de départ raisonnable pour un VPS de 8 Go hébergeant uniquement Langfuse. Ajustez selon le volume de traces.",{"type":38,"title":96,"body":97},"Langfuse vs Langsmith vs Helicone","Langsmith (le produit hébergé de LangChain) et Helicone sont les principales alternatives SaaS. Les deux sont excellents — et tous deux vous imposent de faire transiter vos traces par leurs serveurs. Pour les équipes qui manipulent des prompts sensibles (juridiques, financiers, médicaux), ou pour les environnements de conformité qui interdisent toute sortie de données vers un tiers, l'auto-hébergement n'est pas une option. Langfuse vous offre le même ensemble de fonctionnalités (traçage, évaluations, gestion des prompts, analytique des coûts) sur une infrastructure que vous maîtrisez. La licence MIT signifie aussi que vous pouvez lire, modifier et auditer chaque ligne du code par lequel transitent vos traces.","Déployez Langfuse sur votre VPS","Obtenez une observabilité LLM complète en un clic — tracez chaque requête IA, gérez vos prompts et suivez vos coûts, sur une infrastructure que vous maîtrisez.","Déployer Langfuse","\u002Fapplications\u002Fia\u002Flangfuse",[103,127,146],{"id":104,"slug":105,"slugs":106,"title":110,"excerpt":111,"readTime":112,"views":113,"isPinned":19,"noindex":19,"publishedAt":114,"updatedAt":115,"category":116,"categories":122,"featuredImage":30,"bgImage":31,"posterImage":124,"relatedSolution":125},156,"self-host-litellm-vps",{"fr":105,"en":107,"ar":108,"es":109},"self-host-litellm-on-a-vps-your-private-llm-api-gateway","استضف-litellm-ذاتيا-على-vps-بوابة-api-خاصة-لنماذج-llm","alojar-litellm-en-un-vps-pasarela-llm-privada","Héberger LiteLLM sur un VPS : votre passerelle d'API LLM privée","Déployez LiteLLM sur un VPS ServOrbit : passerelle d'API compatible OpenAI vers Ollama, Anthropic, Azure et 100+ LLM, avec suivi des dépenses et limites par clé.",9,3,"2026-01-21T00:00:00+00:00","2026-11-09T20:55:12+00:00",{"id":117,"name":118,"slug":119,"color":120,"icon":121},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[123],{"id":117,"name":118,"slug":119,"color":120,"icon":121},"\u002Fblog\u002Fcovers\u002Fself-host-litellm-vps-poster.svg",{"categorySlug":27,"appSlug":126},"litellm",{"id":128,"slug":129,"slugs":130,"title":134,"excerpt":135,"readTime":136,"views":137,"isPinned":19,"noindex":19,"publishedAt":138,"updatedAt":139,"category":140,"categories":141,"featuredImage":30,"bgImage":31,"posterImage":143,"relatedSolution":144},12,"heberger-localai-vps",{"fr":129,"en":131,"ar":132,"es":133},"how-to-host-localai-on-a-vps","كيفية-استضافة-localai-على-خادم-vps","como-alojar-localai-en-un-vps","Comment héberger LocalAI sur un VPS","Déployez LocalAI sur votre VPS : Docker Compose complet, modèles GGUF, galerie, Whisper, embeddings, protection par clé API, connexion SDK OpenAI et dépannage.",8,0,"2026-06-08T00:00:00+00:00","2026-10-07T23:07:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[142],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-localai-vps-poster.svg",{"categorySlug":27,"appSlug":145},"local-ai",{"id":147,"slug":148,"slugs":149,"title":153,"excerpt":154,"readTime":155,"views":137,"isPinned":19,"noindex":19,"publishedAt":156,"updatedAt":157,"category":158,"categories":159,"featuredImage":30,"bgImage":31,"posterImage":161,"relatedSolution":162},176,"self-host-openobserve-vps",{"fr":148,"en":150,"ar":151,"es":152},"self-host-openobserve-on-a-vps-unified-logs-metrics-and-traces","استضافة-openobserve-على-vps-سجلات-ومقاييس-وتتبعات-موحدة","alojar-openobserve-en-un-vps","Héberger OpenObserve sur un VPS : logs, métriques et traces","Remplacez Elasticsearch + Grafana par OpenObserve : un seul binaire Rust pour logs, métriques, traces et tableaux de bord, avec un stockage 140× moins cher.",6,"2026-07-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":117,"name":118,"slug":119,"color":120,"icon":121},[160],{"id":117,"name":118,"slug":119,"color":120,"icon":121},"\u002Fblog\u002Fcovers\u002Fself-host-openobserve-vps-poster.svg",{"categorySlug":163,"appSlug":164},"monitoring","openobserve",true,1794270792704]