Skip to content

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_URL et 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 est configuration: invalid value, ignored et 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 une PUBLIC_BASE_URL absente.
  • Chaque variable a une forme <NOM>_FILE. ENCRYPTION_KEY_FILE=/run/secrets/encryption_key lit 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, yes et no, 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 ​

VariableDéfautValeurs acceptéesEffet
NODE_ENVdevelopmentdevelopment, test, productionMode production. Il active COOKIE_SECURE par défaut et l’en-tête Strict-Transport-Security. L’image Docker le fixe à production.
APP_ROLEallall, api, workerCe 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_VERSION0.0.0Texte non videVersion rendue par /healthz et ajoutée à chaque ligne de journal. L’image Docker la fixe à partir de l’argument de construction APP_VERSION.
HOST0.0.0.0Texte non videInterface d’écoute du serveur HTTP.
PORT3000Entier de 1 à 65535Port d’écoute du serveur HTTP.
PUBLIC_BASE_URLhttp://localhost:3000URL absolueL’adresse que joignent vos utilisateurs. Voir l’avertissement ci-dessous.
UI_DIST_DIRpublicChemin, ou videDossier des fichiers de l’interface web. S’il est vide ou n’existe pas, le processus ne sert que l’API.
COOKIE_SECUREtrue si NODE_ENV=production, false sinonBooléenLe cookie de session porte-t-il l’attribut Secure ?
TRUST_PROXYtrueBooléen, nombre de sauts, ou adresses / plages CIDR séparées par des virgulesLes 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, quand MSGRAPH_NOTIFICATION_URL n’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.

VariableDéfautValeurs acceptéesEffet
BRAND_NAMEMankomailTexte non videNom 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_URLaucunURL 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_URLaucunURL absolueLogo du mode sombre. Sans lui, BRAND_LOGO_URL sert dans les deux modes.
BRAND_FAVICON_URLaucunURL absolueIcône de l’onglet du navigateur. Sans elle, le monogramme est dessiné dans la couleur principale.
BRAND_PRIMARY_COLORaucun#RRGGBBDevient 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_COLORaucun#RRGGBBCouleur secondaire de la marque (panneau de la page de connexion).
BRAND_SUPPORT_URLaucunURL absolueLien « Aide » de la page de connexion et du menu du membre.
BRAND_HIDE_POWERED_BYfalsetrue, falseMasque 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.

VariableDéfautValeurs acceptéesEffet
CONTROL_PLANE_URLaucunURL absolue, http ou httpsBase des appels, par exemple https://api.example.com/api/instances/v1. Une barre finale est retirée.
CONTROL_PLANE_INSTANCE_IDaucunTexte (ins_…)Identifiant public de l’instance.
CONTROL_PLANE_SECRETaucunTexteSecret HMAC partagé. À traiter comme un mot de passe ; CONTROL_PLANE_SECRET_FILE est accepté.

Journaux ​

VariableDéfautValeurs acceptéesEffet
LOG_LEVELinfofatal, error, warn, info, debug, trace, silentNiveau minimal écrit sur la sortie standard.
LOG_FORMATjsonjson, prettyForme 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.

VariableDéfautValeurs acceptéesEffet
DATABASE_URLpostgres://postgres:postgres@localhost:5432/postgresChaîne de connexion non videLa connexion PostgreSQL.
DATABASE_POOL_MAX10Entier positifNombre maximal de connexions par processus.
DATABASE_SSLdisabledisable, no-verify, verify ; aussi true/1/yes (= no-verify) et false/0/no (= disable)Mode TLS de la connexion.
DATABASE_SSL_CAaucunChemin d’un fichier PEMAutorité de certification utilisée par verify, pour une autorité privée. Sans elle, les autorités du système sont utilisées.
DATABASE_RUN_MIGRATIONStrueBooléenApplique les migrations en attente au démarrage. Avec false, le processus journalise un avertissement et démarre sans migrer.
DATABASE_STATEMENT_TIMEOUT_MS30000Entier de 0 à 86400000Duré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. disable convient quand la base est jointe par un réseau privé, comme dans le fichier Compose de référence. no-verify chiffre la connexion sans authentifier le serveur : il ne protège que d’une écoute passive. verify vérifie la chaîne de certificats du serveur, et c’est le mode à utiliser dès que la base est distante.
  • DATABASE_SSL_CA arrête le démarrage si le fichier est illisible. C’est la seule valeur de configuration qui le fait : avec DATABASE_SSL=verify et un fichier illisible, le processus s’arrête avec DATABASE_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_MS ne 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).

VariableDéfautValeurs acceptéesEffet
STORAGE_DRIVERs3s3, fsType de stockage : un bucket compatible S3, ou un dossier sur le disque du serveur.
STORAGE_ENDPOINTaucunURL absoluePoint 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_REGIONus-east-1Texte non videRégion du bucket.
STORAGE_BUCKETproductTexte non videNom du bucket. L’application ne le crée pas.
STORAGE_ACCESS_KEY_IDaucunTexte non videClé d’accès.
STORAGE_SECRET_ACCESS_KEYaucunTexte non videClé secrète.
STORAGE_FORCE_PATH_STYLEtrueBooléenAdressage par chemin (endpoint/bucket/clé), nécessaire à MinIO et à la plupart des services compatibles S3.
STORAGE_FS_ROOT./.data/blobsChemin non videDossier 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_ROOT sur 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_ROOT dans vos propres sauvegardes.

Clé de chiffrement et premier administrateur ​

VariableDéfautValeurs acceptéesEffet
ENCRYPTION_KEYaucun32 octets : 64 caractères hexadécimaux, ou base64Clé 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_EMAILaucunAdresse e-mail (enregistrée en minuscules)E-mail du premier administrateur.
BOOTSTRAP_ADMIN_PASSWORDaucunAu moins 12 caractèresMot 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 set ou ENCRYPTION_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.

VariableDéfautValeurs acceptéesEffet
BACKFILL_MONTHS12Entier de 1 à 240Profondeur d’historique copiée à la connexion d’une boîte, en mois.
BACKFILL_CHUNK_DAYS30Entier de 1 à 365Largeur d’une tranche de cette copie initiale, en jours. Une copie interrompue reprend à la dernière tranche terminée.
POLL_INTERVAL_SECONDS300Entier de 30 à 86400Intervalle de la vérification périodique de chaque boîte. Les notifications push accélèrent la synchronisation ; le sondage la garantit.
WORKER_CONCURRENCY4Entier de 1 à 64Tâches de fond traitées en même temps par ce processus. Gardez-la sous DATABASE_POOL_MAX.
PUSH_SHARED_SECRETaucunAu moins 16 caractèresSecret attendu dans le paramètre token des points d’entrée push /hooks/push/gmail et /hooks/push/msgraph.
GMAIL_PUBSUB_TOPICaucunTexte non vide, projects/<projet>/topics/<topic>Topic Google Cloud Pub/Sub utilisé pour les notifications push de Gmail.
MSGRAPH_NOTIFICATION_URLdérivéeURL absolueURL qu’appelle Microsoft Graph pour ses notifications.
  • Sans PUSH_SHARED_SECRET, les deux points d’entrée push répondent 404 à 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_URL est dérivée de PUBLIC_BASE_URL et de PUSH_SHARED_SECRET (<PUBLIC_BASE_URL>/hooks/push/msgraph?token=…). Ne la renseignez que si Microsoft doit joindre l’instance par une autre adresse publique. Sans PUSH_SHARED_SECRET, il n’y a pas de push Microsoft du tout.

Envoi ​

VariableDéfautValeurs acceptéesEffet
SEND_ENABLEDtrueBooléenCoupe-circuit de l’instance. false arrête tout envoi réel ; les brouillons ne sont pas bloqués.
SEND_MAX_PER_HOUR100Entier de 1 à 10000Envois par heure et par boîte, utilisé tant qu’un administrateur n’a pas réglé le débit de l’organisation.
SEND_MAX_BYTES26214400 (25 Mo)Entier de 10000 à 67108864Taille maximale d’un message composé, pièces jointes encodées comprises.
  • SEND_ENABLED=false ne 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. Mettez SEND_ENABLED=false sur 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_HOUR est 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é avec webmail.rate_limited et le délai à attendre (webmail) ; il n’est jamais perdu.
  • SEND_MAX_BYTES s’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.

VariableDéfautValeurs acceptéesEffet
LLM_REQUEST_TIMEOUT_MS120000Entier de 5000 à 600000Délai maximal d’un appel de modèle, en millisecondes.
LLM_MAX_REQUESTS_PER_MINUTE60Entier de 1 à 10000Appels 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_TOKENS4096Entier de 16 à 128000Limite 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.

VariableDéfautValeurs acceptéesEffet
ANALYZER_TARGET_MESSAGES150Entier de 10 à 100000L’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_VOLUME3Entier de 2 à 1000Taille minimale d’un groupe de mails semblables.
ANALYZER_MIN_GROUP_SHARE0.02Nombre de 0 à 0,5Seuil 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_CLUSTERS12Entier de 1 à 30Groupes soumis au modèle par analyse.
ANALYZER_LLM_BATCH_SIZE1Entier de 1 à 10Groupes par appel de modèle. 1 (un appel par groupe) est le plus fiable.
ANALYZER_LLM_CONCURRENCY3Entier de 1 à 10Appels de modèle simultanés pour une analyse.
ANALYZER_SAMPLE_SIZE5Entier de 1 à 20Objets et aperçus échantillonnés par groupe. Les corps de mails ne sont jamais envoyés.
ANALYZER_MAX_OPPORTUNITIES6Entier de 1 à 20Propositions retenues par rapport.
ANALYZER_MAX_OUTPUT_TOKENS16000Entier de 1000 à 128000Limite de tokens de sortie de chaque appel.
ANALYZER_SUGGESTION_WINDOW_DAYS30Entier de 1 à 365Fenêtre du balayage des mails qu’aucun workflow ne traite, en jours.
ANALYZER_SUGGESTION_MIN_VOLUME15Entier de 1 à 10000Mails non traités venant d’un même domaine, dans cette fenêtre, avant qu’une suggestion soit faite.

Approbations et attentes ​

VariableDéfautValeurs acceptéesEffet
APPROVAL_REMINDER_FRACTION0.5Nombre de 0 à 0,9Moment du rappel d’une approbation en attente, en fraction de son délai. 0.5 = à mi-parcours ; 0 désactive les rappels.
WAIT_MAX_DAYS730Entier de 1 à 3650Attente la plus longue qu’un workflow peut demander, en jours.
SIGNAL_RETENTION_HOURS24Entier de 1 à 720Duré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.

VariableDéfautValeurs acceptéesEffet
ASSISTANT_MAX_TURNS16Entier de 1 à 60Appels de modèle au plus pour un message du membre.
ASSISTANT_MAX_TOKENS_PER_CONVERSATION2000000Entier de 10000 à 50000000Tokens (entrée et sortie) au plus pour une conversation entière.
ASSISTANT_MAX_TOOL_RESULT_CHARS30000Entier de 2000 à 200000Caractères au plus d’un résultat d’outil rendu au modèle.
ASSISTANT_MAX_OUTPUT_TOKENS6000Entier de 512 à 64000Plafond 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.

VariableDéfautValeurs acceptéesEffet
LOOP_MAX_ITERATIONS500Entier de 1 à 500Nombre 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_ITERATIONS10Entier de 1 à 500Plancher 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_CONCURRENCY5Entier de 1 à 5Itérations exécutées en parallèle, quoi que demande le nœud.
LOOP_SIMULATED_MAX_ITERATIONS3Entier de 1 à 50Itérations lancées par un essai dans l’éditeur. Le résultat de l’essai indique qu’il a été tronqué.
LOOP_MAX_COLLECTED_BYTES262144 (256 Ko)Entier de 4096 à 8388608Budget 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 ​

VariableDéfautValeurs acceptéesEffet
INTEGRATION_POLL_MIN_MINUTES5Entier de 1 à 1440Intervalle 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_BYTES26214400 (25 Mo)Entier de 1024 à 67108864Taille maximale d’un fichier qu’un nœud ajoute à une exécution.
EXECUTION_ATTACHMENTS_MAX_TOTAL_BYTES104857600 (100 Mo)Entier de 1024 à 536870912Taille totale des fichiers ajoutés à une exécution.
EXECUTION_ATTACHMENTS_MAX_COUNT20Entier de 1 à 500Nombre 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.

VariableDéfautValeurs acceptéesEffet
TABLES_MAX_TABLES100Entier de 1 à 1000Tables que l’organisation peut créer.
TABLES_MAX_COLUMNS60Entier de 1 à 200Colonnes par table.
TABLES_MAX_ROWS50000Entier de 1 à 500000Lignes par table.
TABLES_MAX_CELL_CHARS4000Entier de 1 à 20000Caractères par cellule.
TABLES_OP_RETENTION_DAYS30Entier de 1 à 365Jours 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 ​

VariableDéfautValeurs acceptéesEffet
SIMULATED_EXECUTIONS_RETENTION_DAYS7Entier de 1 à 365Jours de conservation des essais lancés depuis l’éditeur, avec leurs étapes.
AUDIT_LOG_RETENTION_DAYS365Entier de 30 à 3650Jours de conservation des entrées du journal d’audit.
SCHEDULED_TASKS_RETENTION_DAYS7Entier de 1 à 90Jours 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éesConservées
Exécutions réelles180 jours
Opérations sortantes (envois, déplacements, marquages)180 jours
Journal d’ingestion365 jours
Comptabilité de l’usage de l’IA365 jours
Tâches ayant épuisé leurs tentatives30 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.

VariableDéfautUsage
POSTGRES_PASSWORDobligatoireMot 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_USERFixé dans le fichier ComposeUtilisateur PostgreSQL.
POSTGRES_DBFixé dans le fichier ComposeNom de la base PostgreSQL.
STORAGE_ACCESS_KEY_IDobligatoireSert aussi d’utilisateur racine de MinIO.
STORAGE_SECRET_ACCESS_KEYobligatoireSert aussi de mot de passe racine de MinIO.
ENCRYPTION_KEYobligatoireTransmise à l’application.
PUBLIC_BASE_URLobligatoireTransmise à l’application.
STORAGE_BUCKETFixé dans le fichier ComposeBucket créé par la tâche ponctuelle createbucket et utilisé par l’application.
COMPOSE_PROJECT_NAMEFixé dans le fichier ComposePréfixe des conteneurs et des volumes. Changez-le pour faire tourner deux instances sur une même machine.
APP_IMAGEFixé dans le fichier Compose (une image construite localement)Image de l’application.
APP_BIND127.0.0.1Interface sur laquelle le port de l’application est publié. 0.0.0.0 expose du HTTP en clair sur le réseau.
APP_PORT3000Port publié sur l’hôte.
APP_CPUS, APP_MEMORY2, 2gLimites de ressources du conteneur applicatif.
POSTGRES_IMAGEpostgres:16Image PostgreSQL.
POSTGRES_CPUS, POSTGRES_MEMORY, POSTGRES_SHM_SIZE2, 2g, 256mLimites de ressources et mémoire partagée de PostgreSQL.
MINIO_IMAGE, MC_IMAGEversion de MinIO épinglée, minio/mc:latestImages de MinIO et de la tâche de création du bucket.
MINIO_BROWSERoffConsole web de MinIO.
MINIO_CPUS, MINIO_MEMORY1, 1gLimites 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 :

ArgumentDéfautUsage
APP_VERSION0.0.0-dev (0.0.0-selfhost via le fichier Compose de référence)Devient la variable APP_VERSION de l’image.
GIT_SHAunknownEnregistré comme étiquette de l’image et comme variable d’environnement ; l’application ne le lit pas.
NODE_IMAGEnode:24-slimImage 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.

VariableDéfautUsage
COMPOSE_FILEcompose.reference.yaml à la racine du dépôtFichier Compose piloté par les scripts.
ENV_FILE.env à la racine du dépôtFichier d’environnement lu par les scripts.
BACKUP_KEEP7Nombre de sauvegardes gardées dans le dossier de sortie ; les plus anciennes sont supprimées. 0 les garde toutes.
RESTORE_YESaucun1 saute les demandes de confirmation de la restauration, qui sinon vous demandent de taper YES.

Les scripts écrivent leurs messages en anglais.