Français
Variables d’environnement
Une instance Mankomail se configure entièrement par des variables d’environnement, lues une seule fois au démarrage du processus. Cette page liste toutes les variables que lit l’application, regroupées par thème, puis celles qu’utilisent seulement le fichier Docker Compose de référence, la construction de l’image et les scripts de sauvegarde.
Pour changer une valeur, modifiez-la puis redémarrez l’application. Pour l’installation, voyez Auto-hébergement ; pour la place de la configuration dans l’exploitation courante, voyez Configuration.
Comment l’application lit sa configuration
Ces règles valent pour toutes les variables de cette page que lit l’application (toutes les sections sauf les deux dernières).
- Aucune variable n’est strictement obligatoire pour l’application. Chacune a un défaut ou est facultative, et le processus ne refuse jamais de démarrer à cause d’une valeur de configuration. Une installation réelle a pourtant besoin au minimum de
DATABASE_URL,ENCRYPTION_KEY,PUBLIC_BASE_URLet des variables du stockage objet ; le fichier Compose de référence refuse de démarrer sans elles (voir Variables du fichier Compose de référence). - Une valeur invalide retombe sur le défaut. Le processus journalise un avertissement du type
configuration: invalid value, falling back to the default (…)avec le nom de la variable, puis continue avec le défaut. Pour une variable facultative sans défaut, l’avertissement estconfiguration: invalid value, ignoredet la variable est traitée comme absente. Relisez les journaux de démarrage après toute modification. - Une valeur vide compte comme absente.
PUBLIC_BASE_URL=se comporte exactement comme unePUBLIC_BASE_URLabsente. - Chaque variable a une forme
<NOM>_FILE.ENCRYPTION_KEY_FILE=/run/secrets/encryption_keylit la valeur dans ce fichier (espaces de début et de fin retirés), ce qui convient aux secrets Docker et Kubernetes. Quand les deux formes sont renseignées, le fichier l’emporte. Un fichier illisible ou vide produit un avertissement, et la variable simple est utilisée à la place si elle existe. - Les booléens acceptent
true,false,1,0,yesetno, en majuscules ou en minuscules. - Les bornes sont incluses. Un nombre hors de l’intervalle indiqué est invalide, donc remplacé par le défaut.
La seule exception à « le démarrage ne s’arrête jamais » est DATABASE_SSL_CA : voir Base de données.
Exécution et HTTP
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
NODE_ENV | development | development, test, production | Mode production. Il active COOKIE_SECURE par défaut et l’en-tête Strict-Transport-Security. L’image Docker le fixe à production. |
APP_ROLE | all | all, api, worker | Ce que fait ce processus. all : API HTTP, interface web et travail de fond. api : HTTP seulement, aucun travail de fond. worker : travail de fond ; le processus écoute tout de même sur son port HTTP. |
APP_VERSION | 0.0.0 | Texte non vide | Version rendue par /healthz et ajoutée à chaque ligne de journal. L’image Docker la fixe à partir de l’argument de construction APP_VERSION. |
HOST | 0.0.0.0 | Texte non vide | Interface d’écoute du serveur HTTP. |
PORT | 3000 | Entier de 1 à 65535 | Port d’écoute du serveur HTTP. |
PUBLIC_BASE_URL | http://localhost:3000 | URL absolue | L’adresse que joignent vos utilisateurs. Voir l’avertissement ci-dessous. |
UI_DIST_DIR | public | Chemin, ou vide | Dossier des fichiers de l’interface web. S’il est vide ou n’existe pas, le processus ne sert que l’API. |
COOKIE_SECURE | true si NODE_ENV=production, false sinon | Booléen | Le cookie de session porte-t-il l’attribut Secure ? |
TRUST_PROXY | true | Booléen, nombre de sauts, ou adresses / plages CIDR séparées par des virgules | Les en-têtes X-Forwarded-* que l’application croit. |
PUBLIC_BASE_URL
Si PUBLIC_BASE_URL est absente, vide ou invalide, l’instance démarre avec http://localhost:3000, sans erreur. Tout ce qui en est dérivé est alors faux pour vos utilisateurs :
- les URI de redirection OAuth,
<PUBLIC_BASE_URL>/api/v1/oauth/<fournisseur>/callback: la connexion d’une boîte Google ou Microsoft échoue chez le fournisseur ; - les liens d’invitation que les administrateurs copient pour les nouveaux membres, et les liens des e-mails d’approbation ;
- l’URL de notification push de Microsoft Graph,
<PUBLIC_BASE_URL>/hooks/push/msgraph, quandMSGRAPH_NOTIFICATION_URLn’est pas renseignée.
Quand la variable n’est pas renseignée, deux autres choses changent : la Content Security Policy garde un connect-src large au lieu de se restreindre à votre origine, et aucune URL de site n’est annoncée aux fournisseurs d’IA qui en acceptent une. Renseignez l’URL publique exacte, schéma, hôte et port compris, sans / final.
COOKIE_SECURE
Avec COOKIE_SECURE=true, une demande de connexion qui n’arrive pas en HTTPS est refusée avec l’erreur auth.https_required, car le navigateur jetterait le cookie sans rien dire. Un HTTPS terminé par un reverse proxy compte, grâce à l’en-tête X-Forwarded-Proto. COOKIE_SECURE=false fait voyager le cookie de session en clair : réservez-le à une machine ou à un réseau que vous maîtrisez.
TRUST_PROXY
Gardez true derrière un reverse proxy : sans cela, toutes les requêtes semblent venir du proxy, la limitation de débit de la connexion s’applique à tous les utilisateurs à la fois et la terminaison HTTPS devient invisible. Mettez false si le port de l’application est exposé directement ; sinon un client peut forger X-Forwarded-For et contourner la limitation de débit de la connexion. 1 et 0 sont lus comme des booléens, pas comme un nombre de sauts : écrivez 2 ou plus pour un comptage de sauts. La valeur retenue est journalisée au démarrage (proxy trust policy resolved).
Marque
La marque d’une instance auto-hébergée. Toutes les variables sauf BRAND_NAME sont facultatives : vides, le défaut du produit s’applique (monogramme, palette du thème). Sur une instance reliée à un control plane, la marque qu’il envoie passe devant, champ par champ. Voir Marque blanche.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
BRAND_NAME | Mankomail | Texte non vide | Nom affiché dans l’interface (colonne de navigation, page de connexion, titre de l’onglet), dans les e-mails envoyés par l’instance (demandes d’approbation) et sur la page d’invitation ; annoncé aux serveurs IMAP et aux fournisseurs d’IA. |
BRAND_LOGO_URL | aucun | URL absolue (https conseillé) | Logo affiché dans la colonne de navigation et sur la page de connexion, à la place du monogramme. Un logo porte le nom : le texte du nom à côté disparaît. |
BRAND_LOGO_DARK_URL | aucun | URL absolue | Logo du mode sombre. Sans lui, BRAND_LOGO_URL sert dans les deux modes. |
BRAND_FAVICON_URL | aucun | URL absolue | Icône de l’onglet du navigateur. Sans elle, le monogramme est dessiné dans la couleur principale. |
BRAND_PRIMARY_COLOR | aucun | #RRGGBB | Devient l’accent du thème (boutons, item de navigation actif, liens, anneau de focus). Sa clarté est recalculée pour chaque thème, en mode clair et sombre, pour que le texte reste lisible (4,5:1). |
BRAND_ACCENT_COLOR | aucun | #RRGGBB | Couleur secondaire de la marque (panneau de la page de connexion). |
BRAND_SUPPORT_URL | aucun | URL absolue | Lien « Aide » de la page de connexion et du menu du membre. |
BRAND_HIDE_POWERED_BY | false | true, false | Masque la ligne « Propulsé par Mankomail » affichée sur la page de connexion et dans les e-mails système quand le nom de la marque diffère de celui du produit. |
Les images sont chargées par les navigateurs : la politique de sécurité de la page autorise les images https:, plus l’origine exacte d’une URL http: donnée ici.
Control plane
Posez les trois variables ensemble, ou aucune. Sans elles (auto-hébergement), l’instance n’appelle rien et n’envoie rien nulle part. Avec elles, elle envoie un heartbeat signé chaque minute, remonte son usage toutes les cinq minutes et lit sa configuration (marque, plan, droits). Si une ou deux seulement sont posées, la liaison reste coupée et le journal de démarrage nomme celle qui manque. Voir Marque blanche.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
CONTROL_PLANE_URL | aucun | URL absolue, http ou https | Base des appels, par exemple https://api.example.com/api/instances/v1. Une barre finale est retirée. |
CONTROL_PLANE_INSTANCE_ID | aucun | Texte (ins_…) | Identifiant public de l’instance. |
CONTROL_PLANE_SECRET | aucun | Texte | Secret HMAC partagé. À traiter comme un mot de passe ; CONTROL_PLANE_SECRET_FILE est accepté. |
Journaux
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
LOG_LEVEL | info | fatal, error, warn, info, debug, trace, silent | Niveau minimal écrit sur la sortie standard. |
LOG_FORMAT | json | json, pretty | Forme de chaque ligne de journal. json en production ; pretty pour un terminal de développement. |
Avec json, les journaux sont des lignes JSON sur la sortie standard, avec level, un horodatage ISO, role et version sur chaque ligne : le format que lisent les outils comme jq ou Loki. Avec pretty, chaque ligne se lit 10:04:12.345 INFO [mirror] message clé=valeur, colorée dans un terminal, avec la pile d’une erreur indentée en dessous ; role et version sont omis. Dans les deux formats, les secrets comme la clé de chiffrement sont masqués avant l’écriture de la ligne. Voir Supervision.
Base de données
PostgreSQL est la seule dépendance obligatoire : il porte tout l’état de l’instance, file de tâches comprise.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
DATABASE_URL | postgres://postgres:postgres@localhost:5432/postgres | Chaîne de connexion non vide | La connexion PostgreSQL. |
DATABASE_POOL_MAX | 10 | Entier positif | Nombre maximal de connexions par processus. |
DATABASE_SSL | disable | disable, no-verify, verify ; aussi true/1/yes (= no-verify) et false/0/no (= disable) | Mode TLS de la connexion. |
DATABASE_SSL_CA | aucun | Chemin d’un fichier PEM | Autorité de certification utilisée par verify, pour une autorité privée. Sans elle, les autorités du système sont utilisées. |
DATABASE_RUN_MIGRATIONS | true | Booléen | Applique les migrations en attente au démarrage. Avec false, le processus journalise un avertissement et démarre sans migrer. |
DATABASE_STATEMENT_TIMEOUT_MS | 30000 | Entier de 0 à 86400000 | Durée maximale d’une requête, en millisecondes. 0 n’envoie aucune limite : c’est alors le réglage du serveur ou du rôle qui s’applique. |
- Les modes de
DATABASE_SSL.disableconvient quand la base est jointe par un réseau privé, comme dans le fichier Compose de référence.no-verifychiffre la connexion sans authentifier le serveur : il ne protège que d’une écoute passive.verifyvérifie la chaîne de certificats du serveur, et c’est le mode à utiliser dès que la base est distante. DATABASE_SSL_CAarrête le démarrage si le fichier est illisible. C’est la seule valeur de configuration qui le fait : avecDATABASE_SSL=verifyet un fichier illisible, le processus s’arrête avecDATABASE_SSL_CA: unreadable PEM file. Elle est ignorée dans les autres modes.- Les migrations s’exécutent sous un verrou consultatif PostgreSQL : plusieurs processus peuvent démarrer ensemble, un seul migre.
DATABASE_STATEMENT_TIMEOUT_MSne s’y applique jamais. - La durée maximale de requête ne s’applique qu’au pool de connexions. Une requête qui la dépasse est annulée par PostgreSQL et la requête HTTP rend une erreur, au lieu d’immobiliser une connexion.
- Au démarrage, le processus attend jusqu’à 60 secondes que la base accepte les connexions. Un mot de passe faux, un rôle inconnu ou une base absente l’arrêtent immédiatement.
Stockage objet
Les corps de mails, les pièces jointes et les fichiers ajoutés aux exécutions sont rangés dans un stockage objet compatible S3 (s3) ou dans un dossier local (fs).
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
STORAGE_DRIVER | s3 | s3, fs | Type de stockage : un bucket compatible S3, ou un dossier sur le disque du serveur. |
STORAGE_ENDPOINT | aucun | URL absolue | Point d’accès du service compatible S3. Sans lui, le point d’accès AWS par défaut de la région est utilisé. |
STORAGE_REGION | us-east-1 | Texte non vide | Région du bucket. |
STORAGE_BUCKET | product | Texte non vide | Nom du bucket. L’application ne le crée pas. |
STORAGE_ACCESS_KEY_ID | aucun | Texte non vide | Clé d’accès. |
STORAGE_SECRET_ACCESS_KEY | aucun | Texte non vide | Clé secrète. |
STORAGE_FORCE_PATH_STYLE | true | Booléen | Adressage par chemin (endpoint/bucket/clé), nécessaire à MinIO et à la plupart des services compatibles S3. |
STORAGE_FS_ROOT | ./.data/blobs | Chemin non vide | Dossier du pilote fs, relatif au dossier de travail (/app dans l’image Docker). Ignorée avec s3. |
Les variables STORAGE_ENDPOINT à STORAGE_FORCE_PATH_STYLE ne concernent que s3. Utilisez un bucket par instance : les clés d’objets ne sont pas préfixées.
STORAGE_DRIVER=fs
Le pilote fs convient à une installation sur un seul serveur, sans MinIO. Il offre les mêmes garanties que s3 : chaque fichier est écrit dans un fichier temporaire puis renommé, donc un arrêt brutal ne laisse jamais un e-mail à moitié écrit ; les clés ne peuvent pas sortir du dossier ; supprimer une boîte supprime ses fichiers. Le processus journalise blob storage is a local directory au démarrage.
- Placez
STORAGE_FS_ROOTsur un volume persistant : dans un conteneur, un dossier hors volume disparaît avec le conteneur, et tous les corps de mails avec lui. - Tous les processus de l’instance doivent voir le même dossier. Avec plusieurs serveurs, utilisez
s3. - Les scripts de sauvegarde copient le bucket MinIO du fichier Compose de référence, pas ce dossier : incluez
STORAGE_FS_ROOTdans vos propres sauvegardes.
Clé de chiffrement et premier administrateur
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
ENCRYPTION_KEY | aucun | 32 octets : 64 caractères hexadécimaux, ou base64 | Clé d’instance (AES-256-GCM) qui chiffre les identifiants stockés : jetons OAuth des boîtes, mots de passe IMAP, clés des fournisseurs d’IA, autres connexions. |
BOOTSTRAP_ADMIN_EMAIL | aucun | Adresse e-mail (enregistrée en minuscules) | E-mail du premier administrateur. |
BOOTSTRAP_ADMIN_PASSWORD | aucun | Au moins 12 caractères | Mot de passe du premier administrateur. |
ENCRYPTION_KEY
Générez-la avec openssl rand -hex 32 ou openssl rand -base64 32. Elle n’est jamais générée automatiquement.
- Absente ou invalide : l’instance démarre, journalise
ENCRYPTION_KEY is not setouENCRYPTION_KEY is invalid, et le stockage des identifiants est désactivé : aucun secret de boîte, de fournisseur d’IA ou de connexion ne peut être enregistré. - Perdue ou changée : tous les identifiants stockés deviennent illisibles, et chaque boîte doit être reconnectée. Gardez-en une copie hors du serveur. Les sauvegardes ne la contiennent pas.
Le premier administrateur est créé au démarrage seulement si l’instance n’a encore aucun membre, et seulement si les deux variables sont renseignées. Un mot de passe de moins de 12 caractères est refusé avec un avertissement, et aucun compte n’est créé. Dès qu’un membre existe, les deux variables sont sans effet : elles ne peuvent ni réinitialiser un mot de passe ni ajouter un compte.
Synchronisation des boîtes
Ces variables gouvernent le miroir, la copie locale de chaque boîte connectée. Voir Boîtes et miroir.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
BACKFILL_MONTHS | 12 | Entier de 1 à 240 | Profondeur d’historique copiée à la connexion d’une boîte, en mois. |
BACKFILL_CHUNK_DAYS | 30 | Entier de 1 à 365 | Largeur d’une tranche de cette copie initiale, en jours. Une copie interrompue reprend à la dernière tranche terminée. |
POLL_INTERVAL_SECONDS | 300 | Entier de 30 à 86400 | Intervalle de la vérification périodique de chaque boîte. Les notifications push accélèrent la synchronisation ; le sondage la garantit. |
WORKER_CONCURRENCY | 4 | Entier de 1 à 64 | Tâches de fond traitées en même temps par ce processus. Gardez-la sous DATABASE_POOL_MAX. |
PUSH_SHARED_SECRET | aucun | Au moins 16 caractères | Secret attendu dans le paramètre token des points d’entrée push /hooks/push/gmail et /hooks/push/msgraph. |
GMAIL_PUBSUB_TOPIC | aucun | Texte non vide, projects/<projet>/topics/<topic> | Topic Google Cloud Pub/Sub utilisé pour les notifications push de Gmail. |
MSGRAPH_NOTIFICATION_URL | dérivée | URL absolue | URL qu’appelle Microsoft Graph pour ses notifications. |
- Sans
PUSH_SHARED_SECRET, les deux points d’entrée push répondent404à tout appel, et la synchronisation repose sur le seul sondage. C’est une configuration valable. - Sans
GMAIL_PUBSUB_TOPIC, les boîtes Gmail ne sont pas inscrites aux notifications push ; le sondage prend le relais. MSGRAPH_NOTIFICATION_URLest dérivée dePUBLIC_BASE_URLet dePUSH_SHARED_SECRET(<PUBLIC_BASE_URL>/hooks/push/msgraph?token=…). Ne la renseignez que si Microsoft doit joindre l’instance par une autre adresse publique. SansPUSH_SHARED_SECRET, il n’y a pas de push Microsoft du tout.
Envoi
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
SEND_ENABLED | true | Booléen | Coupe-circuit de l’instance. false arrête tout envoi réel ; les brouillons ne sont pas bloqués. |
SEND_MAX_PER_HOUR | 100 | Entier de 1 à 10000 | Envois par heure et par boîte, utilisé tant qu’un administrateur n’a pas réglé le débit de l’organisation. |
SEND_MAX_BYTES | 26214400 (25 Mo) | Entier de 10000 à 67108864 | Taille maximale d’un message composé, pièces jointes encodées comprises. |
SEND_ENABLED=falsene se rouvre pas depuis l’interface. L’interrupteur de l’organisation, dans Administration › Envois, ne peut que restreindre davantage. Pendant l’arrêt, les envois retenus sont gardés, pas perdus, et partent à la réouverture. Les brouillons ne sont pas bloqués : enregistrer un brouillon n’envoie rien. MettezSEND_ENABLED=falsesur toute copie d’une instance de production, par exemple une sauvegarde restaurée, avant de la démarrer : sinon la copie envoie de vrais e-mails.SEND_MAX_PER_HOURest le défaut du débit réglé dans Administration › Envois. Il est compté par boîte d’envoi, pour tout envoi : webmail, exécutions de workflows et demandes d’approbation. Un envoi au-delà de la limite est reporté jusqu’à ce que la boîte ait de nouveau du budget (workflows, approbations) ou refusé avecwebmail.rate_limitedet le délai à attendre (webmail) ; il n’est jamais perdu.SEND_MAX_BYTESs’applique aussi au téléversement d’une pièce jointe dans le webmail : un fichier qui, à lui seul, la dépasserait est refusé tout de suite.
Modèles d’IA
Les clés des fournisseurs d’IA ne sont pas des variables d’environnement : un administrateur les saisit dans Connexions, et elles sont stockées chiffrées avec ENCRYPTION_KEY.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
LLM_REQUEST_TIMEOUT_MS | 120000 | Entier de 5000 à 600000 | Délai maximal d’un appel de modèle, en millisecondes. |
LLM_MAX_REQUESTS_PER_MINUTE | 60 | Entier de 1 à 10000 | Appels par minute et par fournisseur, partagés par tous les processus de l’instance. Un appel au-delà est reporté, pas mis en échec. |
LLM_DEFAULT_MAX_OUTPUT_TOKENS | 4096 | Entier de 16 à 128000 | Limite de tokens de sortie d’un appel qui ne fixe pas la sienne. |
Un modèle local lent (par exemple Ollama sur processeur) peut demander un LLM_REQUEST_TIMEOUT_MS plus long. Réglez LLM_MAX_REQUESTS_PER_MINUTE selon le débit autorisé par votre propre compte chez le fournisseur.
Analyseur de boîte
Seuils de l’analyseur, qui étudie une boîte et propose des automatisations.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
ANALYZER_TARGET_MESSAGES | 150 | Entier de 10 à 100000 | L’analyse prend la plus courte des fenêtres de 30, 90, 180 et 365 jours qui contient au moins ce nombre de mails reçus ; sinon 365 jours. |
ANALYZER_MIN_GROUP_VOLUME | 3 | Entier de 2 à 1000 | Taille minimale d’un groupe de mails semblables. |
ANALYZER_MIN_GROUP_SHARE | 0.02 | Nombre de 0 à 0,5 | Seuil proportionnel. Un groupe doit atteindre le plus grand de ANALYZER_MIN_GROUP_VOLUME et de cette part des mails de la fenêtre, arrondie au supérieur. |
ANALYZER_MAX_CLUSTERS | 12 | Entier de 1 à 30 | Groupes soumis au modèle par analyse. |
ANALYZER_LLM_BATCH_SIZE | 1 | Entier de 1 à 10 | Groupes par appel de modèle. 1 (un appel par groupe) est le plus fiable. |
ANALYZER_LLM_CONCURRENCY | 3 | Entier de 1 à 10 | Appels de modèle simultanés pour une analyse. |
ANALYZER_SAMPLE_SIZE | 5 | Entier de 1 à 20 | Objets et aperçus échantillonnés par groupe. Les corps de mails ne sont jamais envoyés. |
ANALYZER_MAX_OPPORTUNITIES | 6 | Entier de 1 à 20 | Propositions retenues par rapport. |
ANALYZER_MAX_OUTPUT_TOKENS | 16000 | Entier de 1000 à 128000 | Limite de tokens de sortie de chaque appel. |
ANALYZER_SUGGESTION_WINDOW_DAYS | 30 | Entier de 1 à 365 | Fenêtre du balayage des mails qu’aucun workflow ne traite, en jours. |
ANALYZER_SUGGESTION_MIN_VOLUME | 15 | Entier de 1 à 10000 | Mails non traités venant d’un même domaine, dans cette fenêtre, avant qu’une suggestion soit faite. |
Approbations et attentes
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
APPROVAL_REMINDER_FRACTION | 0.5 | Nombre de 0 à 0,9 | Moment du rappel d’une approbation en attente, en fraction de son délai. 0.5 = à mi-parcours ; 0 désactive les rappels. |
WAIT_MAX_DAYS | 730 | Entier de 1 à 3650 | Attente la plus longue qu’un workflow peut demander, en jours. |
SIGNAL_RETENTION_HOURS | 24 | Entier de 1 à 720 | Durée de validité d’un signal pour une attente pas encore en place, en heures. |
Le délai d’une approbation se règle dans chaque workflow, sur le nœud d’approbation ; la fraction de rappel s’y adapte. Voir Revue et approbations.
Assistant
Les limites d’une conversation avec l’assistant qui construit et corrige les workflows. Le fournisseur et le modèle se choisissent dans Connexions.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
ASSISTANT_MAX_TURNS | 16 | Entier de 1 à 60 | Appels de modèle au plus pour un message du membre. |
ASSISTANT_MAX_TOKENS_PER_CONVERSATION | 2000000 | Entier de 10000 à 50000000 | Tokens (entrée et sortie) au plus pour une conversation entière. |
ASSISTANT_MAX_TOOL_RESULT_CHARS | 30000 | Entier de 2000 à 200000 | Caractères au plus d’un résultat d’outil rendu au modèle. |
ASSISTANT_MAX_OUTPUT_TOKENS | 6000 | Entier de 512 à 64000 | Plafond de tokens de sortie d’un appel. |
Boucles
Limites d’instance des nœuds de boucle. Les réglages propres d’un nœud de boucle s’appliquent par-dessus et ne peuvent qu’être plus stricts.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
LOOP_MAX_ITERATIONS | 500 | Entier de 1 à 500 | Nombre maximal d’itérations d’une boucle. Une boucle sur davantage d’éléments échoue : elle ne traite jamais une partie de la liste en silence. |
LOOP_MIN_ITERATIONS | 10 | Entier de 1 à 500 | Plancher de la limite précédente : la limite effective est la plus grande des deux valeurs, pour que l’instance ne puisse pas rendre les boucles inutilisables par erreur. |
LOOP_MAX_CONCURRENCY | 5 | Entier de 1 à 5 | Itérations exécutées en parallèle, quoi que demande le nœud. |
LOOP_SIMULATED_MAX_ITERATIONS | 3 | Entier de 1 à 50 | Itérations lancées par un essai dans l’éditeur. Le résultat de l’essai indique qu’il a été tronqué. |
LOOP_MAX_COLLECTED_BYTES | 262144 (256 Ko) | Entier de 4096 à 8388608 | Budget de taille des résultats rassemblés à la fin d’une boucle. Au-delà, les données par itération sont omises et le résultat est marqué truncated. |
Intégrations et fichiers d’exécution
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
INTEGRATION_POLL_MIN_MINUTES | 5 | Entier de 1 à 1440 | Intervalle le plus court d’un déclencheur qui sonde un service tiers, en minutes. Un nœud peut demander un intervalle plus long, jamais plus court. |
EXECUTION_ATTACHMENT_MAX_BYTES | 26214400 (25 Mo) | Entier de 1024 à 67108864 | Taille maximale d’un fichier qu’un nœud ajoute à une exécution. |
EXECUTION_ATTACHMENTS_MAX_TOTAL_BYTES | 104857600 (100 Mo) | Entier de 1024 à 536870912 | Taille totale des fichiers ajoutés à une exécution. |
EXECUTION_ATTACHMENTS_MAX_COUNT | 20 | Entier de 1 à 500 | Nombre de fichiers ajoutés à une exécution. |
Les fichiers ajoutés à une exécution sont conservés aussi longtemps que l’exécution elle-même.
Tables
Limites des Tables. Chacune a un maximum absolu qu’aucune configuration ne peut dépasser.
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
TABLES_MAX_TABLES | 100 | Entier de 1 à 1000 | Tables que l’organisation peut créer. |
TABLES_MAX_COLUMNS | 60 | Entier de 1 à 200 | Colonnes par table. |
TABLES_MAX_ROWS | 50000 | Entier de 1 à 500000 | Lignes par table. |
TABLES_MAX_CELL_CHARS | 4000 | Entier de 1 à 20000 | Caractères par cellule. |
TABLES_OP_RETENTION_DAYS | 30 | Entier de 1 à 365 | Jours de conservation de la trace de chaque écriture faite par un nœud dans une table. Cette trace permet à une étape relancée de reconnaître une écriture déjà faite : une relance n’ajoute jamais une seconde ligne ni un second commentaire. La tâche d’entretien horaire supprime les traces plus anciennes ; les lignes des tables ne sont jamais touchées. |
Conservation
| Variable | Défaut | Valeurs acceptées | Effet |
|---|---|---|---|
SIMULATED_EXECUTIONS_RETENTION_DAYS | 7 | Entier de 1 à 365 | Jours de conservation des essais lancés depuis l’éditeur, avec leurs étapes. |
AUDIT_LOG_RETENTION_DAYS | 365 | Entier de 30 à 3650 | Jours de conservation des entrées du journal d’audit. |
SCHEDULED_TASKS_RETENTION_DAYS | 7 | Entier de 1 à 90 | Jours de conservation de la trace des tâches planifiées terminées ou abandonnées (sondages, renouvellements, entretien). |
Les autres durées de conservation sont fixes dans la version actuelle, et appliquées par une tâche d’entretien horaire :
| Données | Conservées |
|---|---|
| Exécutions réelles | 180 jours |
| Opérations sortantes (envois, déplacements, marquages) | 180 jours |
| Journal d’ingestion | 365 jours |
| Comptabilité de l’usage de l’IA | 365 jours |
| Tâches ayant épuisé leurs tentatives | 30 jours |
Télémétrie
L’instance n’envoie aucune télémétrie, et aucune variable ne la règle.
Variables du fichier Compose de référence
Le fichier Compose de référence, compose.reference.yaml, lit ces variables dans .env pour son propre usage. L’application ne les lit jamais directement.
| Variable | Défaut | Usage |
|---|---|---|
POSTGRES_PASSWORD | obligatoire | Mot de passe de la base PostgreSQL, qui sert aussi à construire DATABASE_URL. Il est fixé à la première création du volume de la base : le changer ensuite dans .env ne le change pas dans PostgreSQL. |
POSTGRES_USER | Fixé dans le fichier Compose | Utilisateur PostgreSQL. |
POSTGRES_DB | Fixé dans le fichier Compose | Nom de la base PostgreSQL. |
STORAGE_ACCESS_KEY_ID | obligatoire | Sert aussi d’utilisateur racine de MinIO. |
STORAGE_SECRET_ACCESS_KEY | obligatoire | Sert aussi de mot de passe racine de MinIO. |
ENCRYPTION_KEY | obligatoire | Transmise à l’application. |
PUBLIC_BASE_URL | obligatoire | Transmise à l’application. |
STORAGE_BUCKET | Fixé dans le fichier Compose | Bucket créé par la tâche ponctuelle createbucket et utilisé par l’application. |
COMPOSE_PROJECT_NAME | Fixé dans le fichier Compose | Préfixe des conteneurs et des volumes. Changez-le pour faire tourner deux instances sur une même machine. |
APP_IMAGE | Fixé dans le fichier Compose (une image construite localement) | Image de l’application. |
APP_BIND | 127.0.0.1 | Interface sur laquelle le port de l’application est publié. 0.0.0.0 expose du HTTP en clair sur le réseau. |
APP_PORT | 3000 | Port publié sur l’hôte. |
APP_CPUS, APP_MEMORY | 2, 2g | Limites de ressources du conteneur applicatif. |
POSTGRES_IMAGE | postgres:16 | Image PostgreSQL. |
POSTGRES_CPUS, POSTGRES_MEMORY, POSTGRES_SHM_SIZE | 2, 2g, 256m | Limites de ressources et mémoire partagée de PostgreSQL. |
MINIO_IMAGE, MC_IMAGE | version de MinIO épinglée, minio/mc:latest | Images de MinIO et de la tâche de création du bucket. |
MINIO_BROWSER | off | Console web de MinIO. |
MINIO_CPUS, MINIO_MEMORY | 1, 1g | Limites de ressources de MinIO. |
Le fichier Compose refuse de démarrer si l’une des cinq variables obligatoires manque. Il fixe aussi lui-même certaines variables de l’application, quoi que dise .env : NODE_ENV=production, PORT=3000, STORAGE_DRIVER=s3, STORAGE_ENDPOINT=http://minio:9000, STORAGE_FORCE_PATH_STYLE=true, et DATABASE_URL construite à partir des variables POSTGRES_*.
Seules les variables listées atteignent l’application
Le fichier Compose transmet au conteneur applicatif une liste explicite de variables : identité, exécution, base de données, stockage, chiffrement, premier administrateur, synchronisation, envoi et deux réglages de conservation. Toute autre variable de cette page, comme TRUST_PROXY, COOKIE_SECURE, LLM_*, ANALYZER_*, TABLES_* ou LOOP_*, doit être ajoutée sous services.app.environment, par exemple dans un fichier Compose supplémentaire, pour prendre effet.
Construction de l’image et scripts de sauvegarde
Arguments de construction de l’image Docker :
| Argument | Défaut | Usage |
|---|---|---|
APP_VERSION | 0.0.0-dev (0.0.0-selfhost via le fichier Compose de référence) | Devient la variable APP_VERSION de l’image. |
GIT_SHA | unknown | Enregistré comme étiquette de l’image et comme variable d’environnement ; l’application ne le lit pas. |
NODE_IMAGE | node:24-slim | Image de base. |
L’image fixe aussi NODE_ENV=production, APP_ROLE=all, HOST=0.0.0.0 et PORT=3000.
Les scripts de sauvegarde et de restauration lisent ces variables dans leur propre environnement. Ils lisent aussi POSTGRES_USER, POSTGRES_DB, POSTGRES_PASSWORD, STORAGE_*, ENCRYPTION_KEY, APP_PORT et APP_VERSION dans le fichier .env. Voir Sauvegardes.
| Variable | Défaut | Usage |
|---|---|---|
COMPOSE_FILE | compose.reference.yaml à la racine du dépôt | Fichier Compose piloté par les scripts. |
ENV_FILE | .env à la racine du dépôt | Fichier d’environnement lu par les scripts. |
BACKUP_KEEP | 7 | Nombre de sauvegardes gardées dans le dossier de sortie ; les plus anciennes sont supprimées. 0 les garde toutes. |
RESTORE_YES | aucun | 1 saute les demandes de confirmation de la restauration, qui sinon vous demandent de taper YES. |
Les scripts écrivent leurs messages en anglais.