Depuis la v3, Langfuse n’est plus un simple conteneur + Postgres. Les traces vivent maintenant dans ClickHouse (une base OLAP colonne), la file d’attente dans Redis, et les payloads bruts dans un stockage S3 — ici MinIO. Six services au total.
ClickHouse est indispensable depuis la v3. S’il manque, le conteneur web redémarre en boucle (il ne peut pas joindre clickhouse:9000). On le met en place à l’étape 04.
Six conteneurs, dont ClickHouse : vise large sur la RAM. En dessous de 4 Go, le démarrage échoue silencieusement.
Évite les instances t4g / Graviton (ARM64) : les images officielles ciblent amd64 et l’ARM provoque des boucles de crash. Reste sur t3.
N’ouvre jamais 3005, 8123 ni 9000 au public : ce sont des ports internes. Pointe aussi un enregistrement DNS A de langfuse.mondomaine.com vers l’IP élastique de l’instance avant l’étape HTTPS.
Une fois connecté en SSH, installe Docker et le plugin Compose via le script officiel.
Docker récent utilise docker compose (avec un espace). Tes commandes docker-compose (avec un tiret) fonctionnent aussi si tu installes l’ancien binaire v1 — dans ce guide on utilise le plugin.
Crée le dossier et le fichier. Voici le compose complet : Postgres, ClickHouse, Redis et MinIO, avec des healthchecks et un démarrage ordonné.
Points clés : le service clickhouse et son volume chdata, des healthchecks sur db et clickhouse, et un depends_on conditionnel (condition: service_healthy) pour que web/worker attendent que les bases soient prêtes.
web et worker lisent tous les deux ce .env. Commence par générer les trois secrets.
NEXTAUTH_URL doit être l’URL HTTPS publique exacte, sinon la connexion casse (redirections OAuth invalides). Et change les mots de passe par défaut (minio, redis, clickhouse) avant toute mise en prod.
Au premier démarrage, le worker applique les migrations ClickHouse — ça peut prendre une à deux minutes. Suis docker compose logs -f web jusqu’à voir le serveur écouter sur le port 3000.
Le web écoute en interne sur 3000 (mappé sur 3005). On ne l’expose pas au monde : le reverse proxy s’en charge à l’étape suivante.
Caddy gère le HTTPS automatiquement (certificat Let’s Encrypt, renouvellement inclus) — c’est le plus simple. On l’ajoute au même compose pour qu’il joigne web en interne.
Retire ensuite le mapping ports: - "3005:3000" du service web (Caddy le joint en interne via web:3000), puis relance : docker compose up -d.
Caddy obtient le certificat tout seul au premier appel sur https://langfuse.mondomaine.com. Si tu préfères Nginx + certbot, le principe est identique : proxy vers web:3000.
Ouvre ton domaine en HTTPS. Le premier compte créé est le tien — crée ensuite une organisation, un projet, et récupère les clés API.
Pour fermer les inscriptions une fois ton compte créé, ajoute AUTH_DISABLE_SIGNUP=true au .env puis relance docker compose up -d.
Presque toujours ClickHouse injoignable. Vérifie que le hostname est bien clickhouse (pas localhost) et que CLICKHOUSE_MIGRATION_URL=clickhouse://clickhouse:9000. Les conteneurs se joignent par leur nom de service sur le réseau Docker.
docker compose down -v supprime les volumes = perte totale des données. Pour juste arrêter, utilise docker compose down sans le -v.