Skip to main content

Référence des variables d'environnement

Chaque variable d'environnement que Tale lit au boot, sa valeur par défaut et la surface produit qu'elle contrôle. La référence opérateur complète pour `.env`.

9 min read

Tale lit sa configuration depuis un unique fichier .env à la racine du dépôt. Environ une douzaine de variables sont obligatoires au premier boot ; les autres ajustent le comportement. Cette page liste chaque variable que .env.example ship, sa valeur par défaut et la surface produit qui la consomme.

Les groupes sont ordonnés selon le moment où tu en as besoin la première fois : identité de domaine, TLS, secrets, base de données, instance, observabilité, chiffrement des fournisseurs. Si une variable change de valeur, redémarre le conteneur plateforme (docker compose restart tale-platform tale-convex) pour qu'elle prenne effet.

Comment lire cette page

Chaque groupe est un tableau Nom | Défaut | Description. Les variables marquées Obligatoire doivent être définies pour que docker compose up réussisse. Les variables marquées Optionnel peuvent rester non définies ; la description nomme ce que désactiver la fonctionnalité signifie.

Le fichier .env.example ship des commentaires inline qui expliquent chaque variable dans son contexte ; cette page est la référence structurée et groupée pour le même ensemble.

Identité de domaine (obligatoire au premier boot)

NomDéfautDescription
HOSTlocalhostObligatoire. Nom d'hôte sans protocole. Utilisé pour le réseau Docker et le mail sortant.
SITE_URLhttps://localhostObligatoire. URL canonique complète incluant le schéma et tout port non standard. Les callbacks d'auth l'utilisent.
BASE_PATHnon définiOptionnel. Préfixe de chemin pour les déploiements en sous-chemin derrière un reverse proxy (ex. /app). Laisse vide pour la racine.

Le SITE_URL doit correspondre exactement à ce que l'utilisateur tape dans le navigateur. Un slash en queue, un port manquant ou http au lieu de https cassent le callback d'auth et produisent des boucles de sign-in.

TLS

NomDéfautDescription
TLS_MODEselfsignedUn de selfsigned, letsencrypt, external. Voir TLS et domaines.
TLS_EMAILnon définiE-mail de contact pour les notifications Let's Encrypt. Optionnel mais recommandé en production.

selfsigned fait tourner Caddy avec un certificat généré — le navigateur avertit, OK pour le développement. letsencrypt exige un vrai domaine et les ports 80/443 joignables depuis l'Internet public. external fait servir Caddy en HTTP brut ; un reverse proxy amont termine TLS.

Secrets de sécurité (obligatoire)

NomDéfautDescription
BETTER_AUTH_SECRETvaleur d'exemple dans le fichierObligatoire. Secret base64 pour le signeur de session Better Auth. Génère avec openssl rand -base64 32. La rotation invalide chaque session.
ENCRYPTION_SECRET_HEXvaleur d'exemple dans le fichierObligatoire. Clé hex de 32 octets. Clé AES-256 pour les credentials OAuth et intégrations et entrée HKDF pour la secret-box des garde-fous. Génère avec openssl rand -hex 32. La rotation invalide chaque ciphertext en base ; les opérateurs doivent réinscrire les secrets concernés.
INSTANCE_SECRETvaleur d'exemple dans le fichierObligatoire. Sert à dériver la clé admin Convex pour tale deploy. Le déploiement échoue si non défini.

Remplace les valeurs livrées dans .env.example avant d'exposer l'instance — ce sont des espaces réservés volontairement non sûrs.

Base de données

Tale fait tourner deux bases Postgres : la base opérationnelle (db, port 5432) derrière le backend Convex, et le corpus de connaissances (knowledge-db, port 5433) qui détient les fragments de documents, les embeddings et les pages crawlées. Les deux sont ParadeDB et partagent DB_PASSWORD, mais elles sont indépendantes — pointe l'une ou l'autre vers une infrastructure externe séparément.

NomDéfautDescription
DB_PASSWORDtale_password_change_meObligatoire. Mot de passe pour l'utilisateur Postgres auto-hébergé. Change-le avant la production. Utilisé par les deux conteneurs de base de données.
POSTGRES_URLconstruit depuis DB_PASSWORDOptionnel. Override de l'URL de la base opérationnelle construite automatiquement. Utilise-le pour pointer sur un Postgres externe ou un hôte/port non standard.
KNOWLEDGE_DATABASE_URLpostgresql://tale:${DB_PASSWORD}@knowledge-db:5432/tale_knowledgeOptionnel. URL de connexion que le backend Convex utilise pour le corpus de connaissances. Override pour relocaliser le corpus vers ton propre ParadeDB géré — la banque sensible à la résidence se déplace indépendamment.
KNOWLEDGE_DB_NAMEtale_knowledgeOptionnel. Nom de la base de connaissances. Le conteneur knowledge-db fourni crée cette base au premier boot.

La forme opérationnelle auto-construite est postgresql://tale:${DB_PASSWORD}@db:5432. Convex attend cette URL sans nom de base ; le nom est dérivé de la configuration d'instance. Le corpus de connaissances vit dans tale_knowledge avec les schémas private_knowledge et public_web ; l'UI Paramètres > Résidence des données écrit une config par banque plus riche que ces variables brutes, couverte dans Résidence des données.

Observabilité

NomDéfautDescription
SENTRY_DSNnon définiDSN Sentry pour le suivi d'erreurs. Laisse vide pour désactiver. Compatible avec GlitchTip et Bugsink auto-hébergés.
SENTRY_TRACES_SAMPLE_RATEnon définiTaux d'échantillonnage optionnel pour les traces de performance (0.01.0). Le comportement par défaut dépend du déploiement.
METRICS_BEARER_TOKENnon définiToken bearer requis pour accéder aux endpoints Prometheus /metrics/*. Laisse vide pour rendre les endpoints inatteignables de l'extérieur.

Définir METRICS_BEARER_TOKEN expose deux endpoints derrière le token : /metrics/platform et /metrics/convex (les 261 métriques intégrées de Convex, qui portent désormais aussi les timings RAG et de crawl). Voir Configuration d'observabilité pour la configuration de scrape.

Chiffrement des secrets de fournisseur

NomDéfautDescription
SOPS_AGE_KEYnon définiClé secrète age inline. Chiffre providers/*.secrets.json. Mode par défaut après tale init. Plusieurs clés ne sont pas supportées en inline.
SOPS_AGE_KEY_FILEnon définiChemin vers un fichier avec une ou plusieurs clés age (une par ligne ; commentaires # autorisés). Obligatoire pour la rotation. S'exclut mutuellement avec la forme inline.

Si les deux clés age ne sont pas définies, Tale stocke providers/*.secrets.json en JSON clair en mode 0600. Atteins ce mode seulement si le disque hôte est chiffré au repos ou si les fichiers sont produits par un outillage externe (un montage de secret Kubernetes, un template Vault). Faire tourner une clé age, c'est ajouter la nouvelle clé, réenregistrer chaque fournisseur dans l'UI, puis retirer l'ancienne. Voir Secrets avec SOPS pour la marche complète de rotation.

La source de clé par variable d'environnement ne nécessite aucun commutateur de déploiement : un fournisseur peut lire sa clé depuis une variable d'environnement plutôt que depuis un fichier de secrets, tant que la variable est nommée avec le préfixe réservé TALE_PROVIDER_KEY_ (tout autre nom est rejeté). Le mécanisme — la barrière de préfixe, l'ordre de résolution, le plafond de 40 caractères, l'exigence de redémarrage — est documenté dans Fournisseurs.

Une source de jetons suit le même schéma pour le secret d'auth du courtier qu'elle lui envoie : elle lit depuis un sidecar chiffré token-sources/<slug>.secrets.json, ou depuis une variable d'environnement nommée avec le préfixe réservé TALE_TOKEN_SOURCE_ (tout autre nom est rejeté, donc le champ ne peut jamais pointer sur un secret de déploiement). La variable est par source ; définis-la ici ou dans ton gestionnaire de secrets pour que la plateforme et le backend Convex puissent tous deux la lire.

Drapeaux de fonctionnalité

Bascules optionnelles pour des fonctionnalités non activées par défaut. Chaque drapeau active ou désactive une fonctionnalité au boot ; basculer demande un redémarrage du conteneur plateforme.

NomDéfautDescription
MICROSOFT_AUTH_ENABLEDfalseActive l'option de sign-in Microsoft Entra.
TRUSTED_HEADERS_ENABLEDfalseActive le mode auth par trusted headers (identité fournie par le reverse proxy).
FILE_EVENTS_ENABLEDfalseActive les événements de surveillance de fichiers pour l'intégration OneDrive-sync.
TALE_DEPLOYMENT_CONFIG_ADMINSnon définiAllowlist de courriels (séparés par des virgules) des opérateurs autorisés à modifier la résidence des données du déploiement. Vide/non défini = lecture seule pour tous les admins.

Réglage du retrieval RAG

Réglages optionnels pour la recherche dans la base de connaissances. Le chemin RAG en in-process (node-actions Convex) re-note les résultats avec un cross-encoder quand le re-ranking est activé. Tous portent le préfixe RAG_ et sont lus par les conteneurs platform et convex au boot ; après un changement, lance docker compose restart platform convex pour qu'il prenne effet.

NomDéfautDescription
RAG_RERANKING_ENABLEDfalseRe-note les candidats fusionnés BM25 + vecteur avec un cross-encoder avant de renvoyer les résultats. Améliore la précision au prix de la latence par requête.
RAG_RERANKING_MODELcross-encoder/ms-marco-MiniLM-L-6-v2Identifiant du modèle cross-encoder transmis au fournisseur de rerank.
RAG_RERANKING_PROVIDERlocalDoit être réglé sur api pour activer le re-ranking — il poste les candidats à un endpoint /rerank externe (compatible Cohere/Jina). local n'est plus supporté et échoue tout de suite.
RAG_RERANKING_TOP_K10Nombre maximal de résultats que le reranker renvoie. La réponse ne dépasse jamais le top_k de la requête.
RAG_RERANKING_CANDIDATES30Taille du pool de candidats fourni au reranker. Un pool plus large améliore la qualité de re-notation et coûte proportionnellement plus de temps par requête.
RAG_RERANKING_API_BASE_URLnon définiURL de base du fournisseur de rerank ; la plateforme appelle {base_url}/rerank. Obligatoire quand le re-ranking est activé.
RAG_RERANKING_API_KEYnon définiToken Bearer envoyé à l'endpoint de rerank externe. Laisse-le non défini pour les endpoints sans authentification.

Le re-ranking est livré désactivé parce qu'il ajoute de la latence par requête et dépend d'un endpoint externe. Active-le — en réglant RAG_RERANKING_PROVIDER=api et en pointant RAG_RERANKING_API_BASE_URL vers un service de rerank hébergé — quand la précision du retrieval compte plus que le temps de réponse. Il n'y a aucun modèle en in-process à télécharger ou à mettre en cache ; le re-ranking désactivé, la recherche renvoie le classement hybride BM25 + vecteur simple.

Sessions

NomDéfautDescription
SESSION_IDLE_TIMEOUT_MINUTESnon définiOptionnel. Déconnecte une session après ce nombre de minutes d'inactivité (11440). La fenêtre glisse à chaque activité et est appliquée côté serveur — sessions e-mail/mot de passe, SSO et trusted headers.

Laisse-le non défini pour conserver la durée de session par défaut. Si défini, une session inactive expire côté serveur une fois la fenêtre écoulée, tandis qu'une session active continue de glisser à chaque requête. Les Administrateurs d'organisation peuvent raccourcir la fenêtre effective par organisation — jamais l'allonger au-delà de ce plafond — via la politique de gouvernance du délai d'inactivité de session ; les sessions inactives sous cette politique sont révoquées par une passe qui tourne environ toutes les cinq minutes.

Versionnage

NomDéfautDescription
TALE_VERSIONdernière stableLe tag d'image que docker compose pull récupère. Fige sur un tag spécifique pour des montées reproductibles.

Où cela s'inscrit

Les variables ici sont la surface de contact de l'opérateur ; la surface UI qui en consomme la plupart vit sous Plateforme administration. Les clés de fournisseur sont la moitié-et-moitié : les clés elles-mêmes vivent dans providers/*.secrets.json, mais l'UI sous Paramètres > Fournisseurs est ainsi que tu les ajoutes et les fais tourner en pratique. La lecture suivante à mettre en file est Fournisseurs — elle couvre la forme fichier, les modes SOPS et le comportement de résolution et de failover.

© 2026 Tale by Ruler GmbH — ISO 27001 & SOC 2 certified.

Tale is MIT licensed — free to use, modify, and distribute.