
# Variables d'environnement : stockage, IA, e-mail et observabilité

Chaque service ci-dessous est désactivé, local ou frugal par défaut. Vous _sortez_ de la posture par défaut en définissant une variable — vous n'avez jamais à opter pour quoi que ce soit pour obtenir une application qui fonctionne. Les variables d'application, de serveur, de base de données et de secrets vivent sur [Variables d'environnement](/fr/docs/env-vars).

## Stockage

Le backend est contrôlé par l'opérateur, si bien que le même schéma tourne sur un disque local en développement et sur du stockage objet en production — voir [Stockage S3](/fr/docs/integrate-s3-storage) pour une mise en place complète.

| Variable                       | Par défaut                        | Description                                                                                                                                    |
| ------------------------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `STORAGE_PROVIDER`             | automatique                       | `s3` ou `local`. Non définie, le choix est automatique : `bytea` PostgreSQL quand `DATABASE_URL` est définie, fichiers locaux sinon.           |
| `STORAGE_LOCAL_DIRECTORY`      | `<répertoire de données>/storage` | Répertoire des téléversements. Requis quand `STORAGE_PROVIDER=local`.                                                                          |
| `STORAGE_S3_ENDPOINT`          | —                                 | URL du point d'accès compatible S3. Requise pour `s3`.                                                                                         |
| `STORAGE_S3_BUCKET`            | —                                 | Nom du bucket. Requis pour `s3`.                                                                                                               |
| `STORAGE_S3_REGION`            | `us-east-1`                       | Région.                                                                                                                                        |
| `STORAGE_S3_ACCESS_KEY_ID`     | —                                 | Clé d'accès. Requise pour `s3`.                                                                                                                |
| `STORAGE_S3_SECRET_ACCESS_KEY` | —                                 | Clé secrète. Requise pour `s3`.                                                                                                                |
| `STORAGE_S3_FORCE_PATH_STYLE`  | `false`                           | Passez à `true` pour MinIO et les autres points d'accès en style chemin.                                                                       |
| `STORAGE_DEFAULT_ACCESS`       | `private`                         | `public` sert tout fichier stocké sans authentification.                                                                                       |
| `STORAGE_PUBLIC_PATHS`         | —                                 | Préfixes de clés servis sans authentification, séparés par des virgules. Préfixes littéraux uniquement ; les jokers sont rejetés au démarrage. |
| `STORAGE_MAX_FILE_SIZE`        | —                                 | Plafond de téléversement par fichier, en octets.                                                                                               |
| `STORAGE_MAX_TOTAL_SIZE`       | —                                 | Plafond du total d'octets stockés, en octets.                                                                                                  |
| `STORAGE_TEMP_CLEANUP_AFTER`   | `86400000` (24 h)                 | Âge à partir duquel un fichier temporaire d'automatisation devient éligible à la suppression, en millisecondes. `0` désactive le balayage.     |

:::callout
**Les noms `S3_*` nus sont dépréciés.** `S3_ENDPOINT`, `S3_BUCKET` et les autres restent acceptés comme alias et émettent un avertissement unique au démarrage. Renommez-les en `STORAGE_S3_*` — les anciens noms disparaîtront à la prochaine version majeure.
:::

## IA

L'IA reste désactivée tant que `AI_PROVIDER` n'est pas définie. Une valeur non reconnue interrompt le démarrage plutôt que d'échouer silencieusement plus tard.

| Variable                  | Par défaut                   | Description                                                                                                                |
| ------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `AI_PROVIDER`             | non définie (désactivée)     | `anthropic`, `openai`, `mistral`, `google`, `ollama` ou `openai-compatible`. `gemini` est accepté comme alias de `google`. |
| `AI_API_KEY`              | —                            | Clé d'API du fournisseur. Requise pour tous sauf `ollama`.                                                                 |
| `AI_BASE_URL`             | point d'accès du fournisseur | URL du point d'accès. Requise pour `ollama` et `openai-compatible`.                                                        |
| `AI_MODEL`                | selon le fournisseur         | Identifiant de modèle. Par défaut, le modèle recommandé du fournisseur.                                                    |
| `AI_TEMPERATURE`          | selon le fournisseur         | Température d'échantillonnage, de 0 à 1 inclus.                                                                            |
| `AI_MAX_TOKENS`           | selon le fournisseur         | Nombre maximal de jetons en sortie.                                                                                        |
| `AI_EMBEDDING_MODEL`      | —                            | Identifiant du modèle d'embeddings.                                                                                        |
| `AI_EMBEDDING_DIMENSIONS` | —                            | Dimensions du vecteur d'embedding.                                                                                         |

Des alias propres à chaque fournisseur sont lus quand la variable générique est absente : `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `MISTRAL_API_KEY` et `GOOGLE_API_KEY` tiennent lieu d'`AI_API_KEY` ; `OLLAMA_BASE_URL` tient lieu d'`AI_BASE_URL`. Le nom générique l'emporte toujours quand les deux sont définis. Voir [Fournisseurs IA](/fr/docs/ai-providers).

## E-mail (SMTP)

Quand `SMTP_HOST` n'est pas définie, l'e-mail est désactivé et les envois sont journalisés plutôt que délivrés — Sovrium ne se rabat jamais silencieusement sur un collecteur de mail local. Voir [E-mail transactionnel](/fr/docs/integrate-email).

| Variable         | Par défaut              | Description                                         |
| ---------------- | ----------------------- | --------------------------------------------------- |
| `SMTP_HOST`      | non définie (désactivé) | Nom d'hôte du serveur SMTP.                         |
| `SMTP_PORT`      | `587`                   | Port du serveur SMTP.                               |
| `SMTP_SECURE`    | `false`                 | TLS implicite. Le port 465 l'active de toute façon. |
| `SMTP_USER`      | —                       | Identifiant d'authentification.                     |
| `SMTP_PASS`      | —                       | Mot de passe d'authentification.                    |
| `SMTP_FROM`      | `noreply@sovrium.com`   | Adresse d'expédition.                               |
| `SMTP_FROM_NAME` | `Sovrium`               | Nom d'expéditeur affiché.                           |

## Serveur MCP

Désactivé par défaut. L'opérateur monte la route ; le schéma décide de ce que les outils peuvent atteindre. Voir [Intégration MCP](/fr/docs/mcp-integration).

| Variable                    | Par défaut                          | Description                                                                                     |
| --------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| `MCP_ENABLED`               | `false`                             | Interrupteur maître. La route `/mcp` n'est montée que si la valeur est vraie.                   |
| `MCP_TRANSPORT`             | `streamable-http`                   | `streamable-http` pour les clients distants, `stdio` pour un usage local dans l'IDE.            |
| `MCP_MOUNT_PATH`            | `/mcp`                              | Préfixe de route en `streamable-http`.                                                          |
| `MCP_AUTH_STRATEGY`         | `oauth2` quand `auth` est configuré | `token` ou `oauth2`. Le mode jeton lit les variables `MCP_TOKEN_*`.                             |
| `MCP_TOKEN_ADMIN`           | —                                   | Jeton porteur accordant le rôle admin. 32 caractères minimum.                                   |
| `MCP_TOKEN_MEMBER`          | —                                   | Jeton porteur accordant le rôle membre. 32 caractères minimum.                                  |
| `MCP_TOKEN_VIEWER`          | —                                   | Jeton porteur accordant le rôle lecteur. 32 caractères minimum.                                 |
| `MCP_RATE_LIMIT_PER_MINUTE` | `60`                                | Requêtes par jeton et par minute.                                                               |
| `MCP_RATE_LIMIT_PER_DAY`    | `5000`                              | Requêtes par jeton et par jour.                                                                 |
| `MCP_AUDIT_ENABLED`         | `true`                              | Journalise chaque appel d'outil dans la piste d'audit.                                          |
| `MCP_EXPOSE_INTERNALS`      | `true`                              | Expose les tables internes en lecture seule au rôle admin.                                      |
| `MCP_CONFIRM_DESTRUCTIVE`   | `true`                              | Marque les outils de suppression comme destructifs pour que les clients demandent confirmation. |

## Écoconception

Des valeurs par défaut frugales dont vous sortez en les remplaçant. La posture éco est une configuration d'opérateur et n'apparaît jamais dans le schéma de l'application. [Écoconception](/fr/docs/ecoconception) explique ce que chaque levier coûte et économise.

| Variable                     | Par défaut      | Description                                                                                                         |
| ---------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------- |
| `ECO_MODE`                   | `balanced`      | `strict`, `balanced` ou `lenient`. `on` et `auto` renvoient à `balanced`, `off` à `lenient`.                        |
| `ECO_PAGE_CACHE`             | `on`            | Cache en mémoire du HTML de page invariant par requête.                                                             |
| `ECO_IMAGE_FORMAT`           | `avif`          | Format de transcodage par défaut : `avif`, `webp`, `jpeg` ou `png`.                                                 |
| `ECO_INDEX_HEADER`           | `on`            | Émet la note `X-Eco-Index` (A–G) dans la réponse.                                                                   |
| `ECO_LOW_DATA_DEFAULT`       | `off`           | `on`, `off` ou `respect-client` (respecte `Save-Data` et les indices client de données réduites).                   |
| `ECO_AI_PROVIDER_PRECEDENCE` | `local-first`   | `local-first`, `cloud-first` ou `local-only`. Accepte aussi une liste ordonnée de fournisseurs.                     |
| `ECO_AI_MAX_CARBON_CLASS`    | `G` (permissif) | Pire classe carbone, de `A` à `G`, qu'un fournisseur IA peut avoir pour rester sélectionnable.                      |
| `ECO_RETENTION_PURGE_DAYS`   | aucune purge    | Horizon de purge des lignes supprimées en douceur. La rétention par table l'emporte toujours.                       |
| `ECO_DESIGN_LAYER`           | `on`            | Émet la couche de remplacement des jetons de design. Sur `off`, les valeurs par défaut en ligne prennent le relais. |
| `ECO_FORM_ANALYTICS`         | `on`            | Passez à `off` pour cesser d'enregistrer les événements d'analytique de formulaire.                                 |

## Export d'observabilité

Chaque signal est désactivé tant que sa porte n'est pas ouverte, et une valeur définie mais malformée interrompt le démarrage plutôt que de se dégrader en silence. Pointez ces variables vers n'importe quel backend compatible Sentry ou OTLP.

| Variable                              | Par défaut                      | Description                                                                                    |
| ------------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------- |
| `SENTRY_DSN`                          | non définie (off)               | Ouvre le rapport d'erreurs. Format `<schéma>://<clé>@<hôte>/<id_projet>`.                      |
| `SENTRY_ENVIRONMENT`                  | `NODE_ENV`, sinon `development` | Libellé d'environnement attaché aux événements.                                                |
| `SENTRY_TRACES_SAMPLE_RATE`           | non définie (off)               | Taux d'échantillonnage de performance dans (0,1]. `0` désactive. Nécessite un DSN.             |
| `OTEL_EXPORTER_OTLP_ENDPOINT`         | non définie (off)               | URL OTLP de base. Les logs vont vers `<base>/v1/logs`, les métriques vers `<base>/v1/metrics`. |
| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`    | dérivée de la base              | URL complète des logs, utilisée telle quelle.                                                  |
| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | dérivée de la base              | URL complète des métriques, utilisée telle quelle.                                             |
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`  | non définie (off)               | Arme l'export des traces. L'URL de base seule ne l'arme pas.                                   |
| `OTEL_EXPORTER_OTLP_HEADERS`          | —                               | En-têtes d'export sous la forme `k=v,k2=v2`.                                                   |
| `OTEL_SERVICE_NAME`                   | nom de l'application            | Attribut de ressource `service.name`.                                                          |
| `OTEL_METRIC_EXPORT_INTERVAL`         | `10000`                         | Intervalle de relevé des métriques, en millisecondes.                                          |
| `OTEL_TRACES_SAMPLER`                 | `parentbased_traceidratio`      | Nom de l'échantillonneur. Un nom inconnu interrompt le démarrage.                              |
| `OTEL_TRACES_SAMPLER_ARG`             | `0.1`                           | Ratio d'échantillonnage dans [0,1] pour les échantillonneurs par ratio.                        |
| `LOG_LEVEL`                           | `info`                          | `debug`, `info`, `warn` ou `error`. `NODE_ENV=development` implique `debug`.                   |

## Builds statiques

Lues par `sovrium build` lors de la génération d'un site statique.

| Variable                      | Par défaut | Description                                                          |
| ----------------------------- | ---------- | -------------------------------------------------------------------- |
| `SOVRIUM_OUTPUT_DIR`          | `./dist`   | Répertoire de sortie.                                                |
| `SOVRIUM_BASE_URL`            | —          | URL de base pour le sitemap et les liens canoniques.                 |
| `SOVRIUM_BASE_PATH`           | —          | Préfixe de chemin pour un déploiement en sous-répertoire.            |
| `SOVRIUM_DEPLOYMENT`          | —          | `github-pages` ou `generic`.                                         |
| `SOVRIUM_LANGUAGES`           | —          | Codes de langue à construire, séparés par des virgules.              |
| `SOVRIUM_DEFAULT_LANGUAGE`    | —          | Code de la langue par défaut.                                        |
| `SOVRIUM_GENERATE_SITEMAP`    | `false`    | Génère `sitemap.xml`.                                                |
| `SOVRIUM_GENERATE_ROBOTS`     | `false`    | Génère `robots.txt`.                                                 |
| `SOVRIUM_GENERATE_MANIFEST`   | `false`    | Génère un `manifest.json` PWA.                                       |
| `SOVRIUM_HYDRATION`           | `false`    | Active l'hydratation côté client.                                    |
| `SOVRIUM_BUNDLE_OPTIMIZATION` | —          | `split` ou `none`.                                                   |
| `SOVRIUM_PUBLIC_DIR`          | —          | Répertoire d'assets statiques à copier. `none` désactive le service. |

## Instances de démonstration

Affiche un bandeau signalant qu'une instance est une démo jetable. Désactivé sauf activation explicite, pour qu'un déploiement de production ne puisse jamais se déclarer jetable par accident.

| Variable                | Description                                                                                              |
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
| `SOVRIUM_DEMO_NOTICE`   | Interrupteur maître. `on`, `true`, `1` ou `yes` active le bandeau ; toute autre valeur le laisse éteint. |
| `SOVRIUM_DEMO_NAME`     | Nom du modèle affiché dans le titre du panneau.                                                          |
| `SOVRIUM_DEMO_URL`      | Cible de l'appel à l'action du bandeau.                                                                  |
| `SOVRIUM_DEMO_EMAIL`    | E-mail de connexion, affichage seul. Jamais issu d'`AUTH_ADMIN_EMAIL`.                                   |
| `SOVRIUM_DEMO_PASSWORD` | Mot de passe de connexion, affichage seul. Jamais issu d'`AUTH_ADMIN_PASSWORD`.                          |

## Suite

- [Variables d'environnement](/fr/docs/env-vars) — application, serveur, base de données et secrets.
- [Présentation des buckets](/fr/docs/buckets-overview) — déclarer les buckets que ces variables de stockage alimentent.
- [Vue d'ensemble de l'IA](/fr/docs/ai-overview) — ce qu'un fournisseur IA débloque dans le schéma.
- [Écoconception](/fr/docs/ecoconception) — le raisonnement derrière les valeurs par défaut `ECO_*`.
