Navin Enterprise (navin-enterprise)
La plateforme Navin Enterprise AI : API du Control Plane, processus de fond, processus média GPU et portail, au-dessus de LiteLLM (passerelle devant les fournisseurs de modèles), OPA, OpenFGA et Keycloak. Les règles FinOps et d'effort de raisonnement sont du code de la plateforme, pas des réglages.
Généré depuis catalog/services/navin-enterprise.yaml : ne pas modifier à la main.
Résumé
| Version | 1.0.0 |
| Usage | installer et configurer |
| Couche | infrastructure (présentée à part) |
| Catégorie | Navin Enterprise |
| Méthodes d'installation | podman, python |
| Connexion externe | non |
| Réservé au bac à sable | non |
Licence
| Identifiant SPDX | LicenseRef-Navin-Enterprise |
| Politique de licence | licence de l'éditeur |
| Exception de licence | - |
| Exceptions de licence de ses dépendances | LEX-013 (en attente de la décision du client), LEX-014 (en attente de la décision du client), LEX-017 (en attente de la décision du client), LEX-021 (en attente de la décision du client) |
| Composant de la plateforme | control-plane-api |
Paquets et artefacts
Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.
| Type | Paquet | Version | Licence | Détails |
|---|---|---|---|---|
| image de conteneur | harbor.example.internal/eai/control-plane | 1.0.0 | LicenseRef-Navin-Enterprise | clé d'image control-plane, utilisée par migrate, control-plane, worker |
| image de conteneur | harbor.example.internal/eai/worker | 1.0.0 | LicenseRef-Navin-Enterprise | clé d'image worker, utilisée par media-worker |
| image de conteneur | harbor.example.internal/eai/portal | 1.0.0 | LicenseRef-Navin-Enterprise | clé d'image portal, utilisée par portal |
| paquet Python | eai | 1.0.0 | LicenseRef-Navin-Enterprise | interpréteurs, par ordre de préférence python3.11, python3.12 |
| paquet Python | ragas | 0.3.2 | Apache-2.0 | interpréteurs, par ordre de préférence python3.11, python3.12 |
| paquet Python | langchain-openai | 0.3.28 | MIT | interpréteurs, par ordre de préférence python3.11, python3.12 |
| paquet Python | datasets | 4.0.0 | Apache-2.0 | interpréteurs, par ordre de préférence python3.11, python3.12 |
Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.
Systèmes et architectures pris en charge
| Méthode | Systèmes d'exploitation | Architectures |
|---|---|---|
podman | famille RHEL (dnf), famille Debian (apt), Arch Linux (pacman) | x86_64, aarch64 (non restreintes par le descripteur) |
python | famille RHEL (dnf), famille Debian (apt), Arch Linux (pacman) | x86_64, aarch64 (non restreintes par le descripteur) |
Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.
GPU : GPU NVIDIA donnés au composant comme périphériques CDI (nvidia.com/gpu) : media-worker.
Prérequis
Hôte
- au moins 4096 Mo de mémoire (bloquant,
memory). - au moins 1 GPU NVIDIA avec 0 Mo de mémoire (bloquant,
gpu). - une horloge synchronisée (avertissement,
time_sync).
Programmes que les commandes et les contrôles du service lancent sur l'hôte, hors des racines gérées : les ajouter à allowed_commands de l'agent (voir Sécurité de l'agent Navin), sinon l'agent les refuse avec command_not_allowed : /usr/bin/systemctl.
Réseau et ports
| Composant | Nom du port | Port | Ouvert dans le pare-feu de l'hôte |
|---|---|---|---|
control-plane | api | 8080/tcp | oui |
worker | metrics | 9464/tcp | oui |
media-worker | metrics | 9465/tcp | oui |
portal | http | 3000/tcp | oui |
Services et connexions nécessaires
database:postgresql.redis:redis.litellm:litellm.opa:opa.openfga:openfga.oidc:keycloak.qdrant:qdrant.clickhouse:clickhouse.storage:seaweedfs.temporal:temporal(facultative).livekit:livekit(facultative).asterisk_ami:asterisk(facultative).asterisk_ari:asterisk(facultative).kamailio:kamailio(facultative).livekit_sip:livekit-sip(facultative).mem0:mem0(facultative).cognee:cognee(facultative).opik:opik(facultative).otel:otel-collector(facultative).openbao:openbao(facultative).nats:nats(facultative).presidio:presidio(facultative).docling:docling(facultative).clamav:clamav.yarax:yara-x.
Détail et résolution : voir Dépendances.
Méthodes et modes d'installation
| Méthode | Défaut | Ce que la méthode utilise |
|---|---|---|
podman | oui | les images de conteneur du descripteur, exécutées par Podman sous systemd |
python | - | un environnement virtuel Python qui contient les paquets Python du descripteur |
Composants
| Composant | Type | Méthodes d'installation | Ports |
|---|---|---|---|
Migration de la base (migrate) | ponctuel | podman, python | - |
API du Control Plane (control-plane) | maître | podman, python | 8080/tcp |
Processus de fond (worker) | maître | podman, python | 9464/tcp |
Processus média GPU (media-worker) | travailleur | podman | 9465/tcp |
Portail (portal) | maître | podman | 3000/tcp |
Standard (standard) (par défaut)
Une API, un processus de fond, un portail ; processus média facultatifs.
Ce que le mode déploie :
| Composant | Placement |
|---|---|
migrate | min 1, max 1 |
control-plane | min 1, max 1 |
worker | min 1, max 1 |
media-worker | min 0 |
portal | min 1, max 1 |
Haute disponibilité (ha)
Trois répliques de l'API et du portail derrière HAProxy ; le processus de fond garde un seul meneur actif (verrou consultatif PostgreSQL).
Ce que le mode déploie :
| Composant | Placement |
|---|---|
migrate | min 1, max 1 |
control-plane | min 2, recommandé 3 |
worker | min 1, max 2, recommandé 2 |
media-worker | min 0 |
portal | min 2, recommandé 3 |
Installer ce service
L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.
-
Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.
-
Choisissez le service. À l'étape Service, sélectionnez Navin Enterprise. La carte affiche la licence
LicenseRef-Navin-Enterpriseet les dépendances dont l'installation a besoin. Choisissez la Méthode parmipodman,python(par défautpodman). -
Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode :
standard(par défaut),ha. Chaque mode déploie les composants listés dans Méthodes et modes d'installation. Avec plusieurs composants, placez chacun sur ses hôtes dans Répartition des composants (Proposer un placement propose un placement qui respecte les cardinalités). -
Liez les dépendances. À l'étape Liaisons, choisissez pour chaque dépendance (
database,redis,litellm,opa,openfga,oidc,qdrant,clickhouse,storage,temporal,livekit,asterisk_ami,asterisk_ari,kamailio,livekit_sip,mem0,cognee,opik,otel,openbao,nats,presidio,docling,clamav,yarax) Installer avec la plateforme ou Utiliser une connexion existante ; une dépendance facultative peut rester sur Aucune liaison. -
Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration) ; les paramètres obligatoires sont
rag_embedding_model,memory_embedding_model. Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager. -
Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.
-
Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services.
Haute disponibilité
| Cluster | réplicas (replication) |
| Haute disponibilité | externe (external) |
| Bascule | répartiteur (load-balancer) |
| Réplication | stockage partagé (shared-store) |
| Quorum | aucun (none) |
| Découverte | base de données (database) |
| Point d'entrée | répartiteur (load-balancer) |
| Documentation officielle | https://docs.haproxy.org/3.2/configuration.html |
| Références | https://www.postgresql.org/docs/16/high-availability.html |
Prérequis
| Prérequis | Doit être hautement disponible | Modes | Description |
|---|---|---|---|
database | oui | ha | Les répliques partagent leur état dans PostgreSQL, qui doit lui-même être hautement disponible (cluster Patroni). |
redis | oui | ha | Les compteurs des limites de débit des répliques sont dans Redis, qui doit lui-même être hautement disponible (Sentinel). |
clamav | oui | ha | Chaque dépôt est analysé avant ingestion (mode enforce) ; au moins deux passerelles ClamAV gardent les dépôts possibles quand l'une tombe. |
yarax | oui | ha | Chaque dépôt est confronté aux règles YARA-X avant ingestion ; au moins deux workers gardent les dépôts possibles quand l'un tombe. |
| haproxy | oui | ha | Les répliques de l'API et du portail sont jointes via HAProxy derrière une IP virtuelle Keepalived. |
Topologie par mode
| Modes | Niveau le plus haut du catalogue | Répartition | Composant du quorum | Domaines de panne | Description |
|---|---|---|---|---|---|
standard | autonome (standalone) | unique (single) | - | 1 | Une API, un processus de fond et un portail, sans tolérance aux pannes. |
ha | ha (ha) | actif-actif (active-active) | - | 3 | Répliques sans état de l'API et du portail derrière HAProxy ; le processus de fond tourne en actif-passif via un verrou consultatif PostgreSQL. |
Remarques
- Les répliques ne gardent aucun état local ; la haute disponibilité de la plateforme est bornée par celle de PostgreSQL, Redis et des moteurs d'analyse.
Paramètres de configuration
Général
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Environnement (environment) | enum | prod | dev, test, staging, prod | non | non | non | dev, test, staging ou prod ; prod refuse les réglages dangereux au démarrage. (EAI_ENVIRONMENT) |
Langue par défaut (default_locale) | enum | fr | en, fr | non | non | non | Langue des messages quand la requête n'en choisit pas. (EAI_DEFAULT_LOCALE) |
Niveau de journalisation (log_level) | enum | INFO | DEBUG, INFO, WARNING, ERROR | non | non | non | Verbosité des journaux Navin. (EAI_LOG_LEVEL) |
Réseau
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Port de l'API (api_port) | port | 8080 | - | non | non | oui | Port d'écoute de l'API du Control Plane. (EAI_PORT) |
Port du portail (portal_port) | port | 3000 | - | non | non | oui | Port d'écoute du portail. |
URL publique de l'API (public_api_url) | url | https://{{ host.fqdn }}:{{ config.api_port }} | - | non | non | non | Adresse de l'API vue par les navigateurs (NEXT_PUBLIC_EAI_API_URL, en général la passerelle APISIX). |
URL publique du portail (public_portal_url) | url | https://{{ host.fqdn }}:{{ config.portal_port }} | - | non | non | non | Adresse du portail (NEXT_PUBLIC_BASE_URL et origine CORS par défaut). |
Origines CORS (cors_origins) | list | [] | - | non | non | non | Origines de navigateur autorisées à appeler l'API (vide : l'URL publique du portail). (EAI_CORS_ORIGINS) |
Hôtes autorisés (allowed_hosts) | list | ["*"] | - | non | non | non | Liste des en-têtes Host acceptés par l'API. (EAI_ALLOWED_HOSTS) |
Proxys de confiance (trusted_proxies) | list | ["127.0.0.1/32", "::1/128"] | - | non | non | non | Pairs autorisés à poser X-Forwarded-For et X-SPIFFE-ID (hôtes APISIX et HAProxy). (EAI_TRUSTED_PROXIES) |
Base de données
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Minimum du pool (db_pool_min) | int | 1 | min 0 | non | non | non | Connexions PostgreSQL minimales par processus. (EAI_DB_POOL_MIN) |
Maximum du pool (db_pool_max) | int | 10 | min 1, max 500 | non | non | non | Connexions PostgreSQL maximales par processus. (EAI_DB_POOL_MAX) |
Sécurité
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
TLS (tls_enabled) | bool | false | - | non | non | oui | Servir l'API du Control Plane (uvicorn), le portail (frontal HTTPS dans le conteneur du portail, Next.js standalone n'a pas d'écoute TLS) et les écoutes Prometheus des processus de fond en HTTPS avec le certificat d'hôte émis par l'autorité du Manager. Chaîne : navigateur vers la passerelle HTTPS de la banque (public_portal_url et public_api_url désignent la passerelle, qui présente le certificat de la banque et fait confiance à l'autorité du Manager vers les hôtes), passerelle ou HAProxy vers l'API et le portail en HTTPS (autorité du Manager), API et processus de fond vers leurs fournisseurs en HTTPS, rediss, tls ou verify-full avec les racines publiques plus l'autorité du Manager. Désactivé : HTTP simple sur les hôtes, derrière une passerelle qui termine TLS. |
Authentification SPIFFE (auth_spiffe) | bool | false | - | non | non | non | Accepter les identités de charges de travail de SPIRE (X-SPIFFE-ID des proxys de confiance). (EAI_AUTH_SPIFFE) |
Audience OIDC (oidc_audience) | string | control-plane | - | non | non | non | Audience exigée dans les jetons d'accès. (EAI_OIDC_AUDIENCE) |
Synchronisation des groupes (oidc_group_sync) | bool | true | - | non | non | non | Appliquer les correspondances de groupes de l'annuaire à chaque authentification OIDC. (EAI_OIDC_GROUP_SYNC) |
Client du portail (portal_client_id) | string | portal | - | non | non | non | Client OIDC public du portail. |
Clé maîtresse (master_key) | password | généré | - | non | oui | non | Clé de chiffrement des secrets de la plateforme stockés en base. (EAI_MASTER_KEY) |
Décision de politique par défaut (policy_default) | enum | deny | allow, deny | non | non | non | Décision quand OPA ne répond pas. (EAI_POLICY_DEFAULT) |
Documentation de l'API (docs_enabled) | bool | false | - | non | non | non | Servir /docs, /redoc et /openapi.json. (EAI_DOCS_ENABLED) |
En-têtes de sécurité (security_headers_enabled) | bool | true | - | non | non | non | Ajouter les en-têtes de sécurité à chaque réponse. (EAI_SECURITY_HEADERS_ENABLED) |
HSTS (hsts_enabled) | bool | true | - | non | non | non | Envoyer Strict-Transport-Security. (EAI_HSTS_ENABLED) |
Durée HSTS (hsts_max_age_seconds) | int | 31536000 | min 0 | non | non | non | max-age de HSTS en secondes. (EAI_HSTS_MAX_AGE_SECONDS) |
Corps maximal (max_body_bytes) | int | 10485760 | min 1024 | non | non | non | Plus grand corps de requête en octets. (EAI_MAX_BODY_BYTES) |
Téléversement maximal (max_upload_bytes) | int | 104857600 | min 1024 | non | non | non | Plus grand téléversement de média, document ou import en octets. (EAI_MAX_UPLOAD_BYTES) |
Profondeur JSON (max_json_depth) | int | 64 | min 4, max 1024 | non | non | non | Imbrication JSON maximale acceptée. (EAI_MAX_JSON_DEPTH) |
Limites de débit (rate_limit_enabled) | bool | true | - | non | non | non | Appliquer les limites de débit des requêtes. (EAI_RATE_LIMIT_ENABLED) |
Requêtes par minute (rate_limit_per_minute) | int | 1200 | min 1 | non | non | non | Par principal, ou par IP cliente en anonyme. (EAI_RATE_LIMIT_PER_MINUTE) |
Requêtes de passerelle par minute (rate_limit_gateway_per_minute) | int | 600 | min 1 | non | non | non | Par principal sur /v1/gateway/*. (EAI_RATE_LIMIT_GATEWAY_PER_MINUTE) |
Échecs d'authentification par minute (rate_limit_auth_failures_per_minute) | int | 20 | min 1 | non | non | non | Par IP cliente, puis 429. (EAI_RATE_LIMIT_AUTH_FAILURES_PER_MINUTE) |
Algorithmes JWT (jwt_algorithms) | list | ["RS256", "PS256", "ES256"] | - | non | non | non | Algorithmes de signature acceptés dans les jetons. (EAI_JWT_ALGORITHMS) |
Tolérance JWT (jwt_leeway_seconds) | int | 30 | min 0, max 300 | non | non | non | Décalage d'horloge toléré sur les jetons, en secondes. (EAI_JWT_LEEWAY_SECONDS) |
Liste des sorties privées (egress_private_allowlist) | list | [] | - | non | non | non | Destinations privées supplémentaires (hôte, hôte:port, *.suffixe ou CIDR) ; le LiteLLM lié est toujours ajouté. (EAI_EGRESS_PRIVATE_ALLOWLIST) |
Ports de sortie publics (egress_allowed_ports) | list | [443] | - | non | non | non | Ports autorisés vers les destinations publiques. (EAI_EGRESS_ALLOWED_PORTS) |
Sortie HTTP simple (egress_allow_http) | bool | false | - | non | non | non | Autoriser le HTTP simple vers les destinations publiques (jamais en prod). (EAI_EGRESS_ALLOW_HTTP) |
Délai DNS de sortie (egress_dns_timeout_seconds) | float | 3.0 | min 0.1, max 60 | non | non | non | Secondes allouées à la vérification DNS d'un appel sortant. (EAI_EGRESS_DNS_TIMEOUT_SECONDS) |
Mode contre l'injection d'invite (prompt_injection_default_mode) | enum | block | off, detect, block | non | non | non | Valeur par défaut des locataires : off, detect ou block. (EAI_PROMPT_INJECTION_DEFAULT_MODE) |
Retenue DLP du flux (stream_dlp_holdback_chars) | int | 128 | min 0, max 8192 | non | non | non | Caractères retenus en fin de flux pour la DLP. (EAI_STREAM_DLP_HOLDBACK_CHARS) |
Inactivité du portail (idle_timeout_minutes) | int | 30 | min 1, max 1440 | non | non | non | Minutes d'inactivité avant la déconnexion du portail (NEXT_PUBLIC_EAI_IDLE_TIMEOUT_MINUTES). |
Délai d'analyse des fichiers (file_scan_timeout_seconds) | int | 60 | min 5, max 900, s | non | non | non | Délai d'une analyse par moteur et par instance avant l'essai de l'instance suivante (EAI_FILE_SCAN_TIMEOUT_SECONDS). |
Plus gros fichier analysé (file_scan_max_bytes) | int | 52428800 | min 1024, max 4194304000 | non | non | non | Limite de la plateforme pour un fichier déposé, en octets (EAI_FILE_SCAN_MAX_BYTES) ; la politique d'un tenant peut seulement la baisser. La valeur rendue est la plus basse entre celle-ci et le StreamMaxLength de ClamAV ; les limites d'archives de la plateforme (EAI_FILE_SCAN_ARCHIVE_MAX_MEMBER_BYTES, EAI_FILE_SCAN_ARCHIVE_MAX_TOTAL_BYTES) viennent des MaxFileSize et MaxScanSize de ClamAV. Garder la limite de YARA-X au moins aussi haute. |
Modèles et médias
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Modèle d'embedding du RAG (rag_embedding_model) | string | - | - | oui | non | non | Modèle du registre d'une nouvelle base de connaissances, un modèle d'embedding servi par la passerelle LiteLLM (local-hash-256 est refusé en production). (EAI_RAG_EMBEDDING_MODEL) |
Modèle d'embedding de la mémoire (memory_embedding_model) | string | - | - | oui | non | non | Modèle d'embedding de la mémoire des agents, un modèle du registre servi par la passerelle LiteLLM. (EAI_MEMORY_EMBEDDING_MODEL) |
Modèle de reclassement (rag_rerank_model) | string | (vide) | - | non | non | non | Modèle du registre avec la capacité de reclassement (vide : aucun). (EAI_RAG_RERANK_MODEL) |
Lot d'embeddings (embeddings_batch_size) | int | 64 | min 1, max 2048 | non | non | non | Textes par appel à la passerelle. (EAI_EMBEDDINGS_BATCH_SIZE) |
Types de tâches média (media_kinds) | list | ["stt", "diarization", "tts"] | - | non | non | non | Un à trois types parmi stt, diarization, tts traités par le processus média (--kind). |
Flux média (media_stream) | string | EAI_MULTIMODAL | - | non | non | non | Flux NATS JetStream des tâches média (--stream). |
Intégrations
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Jeton OpenBao (openbao_token) | password | - | - | non | oui | non | Jeton du Control Plane dans OpenBao (AppRole ou jeton périodique, jamais le jeton racine). (EAI_OPENBAO_TOKEN) |
Jeton des workers vocaux (voice_worker_token) | password | - | - | non | oui | non | Clé d'API d'un tenant avec la portée telephony:voice-worker, créée dans Navin Enterprise. Le Manager la scelle et ne la donne qu'aux workers livekit-agents (worker_token du point de terminaison api) ; vide : les workers refusent de démarrer. |
Montage KV OpenBao (openbao_kv_mount) | string | secret | - | non | non | non | Point de montage du moteur KV. (EAI_OPENBAO_KV_MOUNT) |
Montage Transit OpenBao (openbao_transit_mount) | string | transit | - | non | non | non | Point de montage du moteur Transit. (EAI_OPENBAO_TRANSIT_MOUNT) |
Clé de signature de l'audit (openbao_audit_signing_key) | string | eai-audit-export | - | non | non | non | Clé Transit qui signe les exports d'audit WORM. (EAI_OPENBAO_AUDIT_SIGNING_KEY) |
Signature de l'audit (audit_signing) | enum | auto | auto, transit, hmac | non | non | non | auto (Transit quand OpenBao est lié, sinon HMAC), transit ou hmac. (EAI_AUDIT_SIGNING) |
Magasin OpenFGA (openfga_store_id) | string | (vide) | - | non | non | non | Identifiant du magasin (vide : créé au premier démarrage). (EAI_OPENFGA_STORE_ID) |
Modèle OpenFGA (openfga_model_id) | string | (vide) | - | non | non | non | Identifiant du modèle d'autorisation (vide : le plus récent). (EAI_OPENFGA_MODEL_ID) |
Espace de noms Temporal (temporal_namespace) | string | default | - | non | non | non | Espace de noms des planifications (quand Temporal est lié). (EAI_TEMPORAL_NAMESPACE) |
File de tâches Temporal (temporal_task_queue) | string | eai | - | non | non | non | File de tâches des workflows. (EAI_TEMPORAL_TASK_QUEUE) |
Projet Opik (opik_project) | string | navin-evaluations | - | non | non | non | Projet des traces d'évaluation (quand Opik est lié). (OPIK_PROJECT_NAME) |
Compartiment d'audit (s3_bucket) | string | eai-audit-worm | - | non | non | non | Compartiment de l'archive d'audit WORM et des médias (verrouillage d'objet actif). (EAI_S3_BUCKET) |
Clé KMS S3 (s3_kms_key_id) | string | (vide) | - | non | non | non | Identifiant de la clé de chiffrement côté serveur (vide : défaut du compartiment). (EAI_S3_KMS_KEY_ID) |
Table ClickHouse (clickhouse_table) | string | eai_events | - | non | non | non | Table de l'export analytique. (EAI_CLICKHOUSE_TABLE) |
Observabilité et SIEM
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Jeton des métriques (metrics_token) | password | généré | - | non | oui | non | Jeton porteur de GET /metrics (obligatoire hors dev et test). (EAI_METRICS_TOKEN) |
Traces (otel_enabled) | bool | true | - | non | non | non | Exporter les traces OpenTelemetry (quand le collecteur est lié). (EAI_OTEL_ENABLED) |
Actions SIEM (siem_forward_actions) | string | security.*,policy.*,incident.*,approval.*,secret.*,api_key.*,audit.*,dlp.*,authz.write,authz.delete,member.*,provider.disable,model.disable,agent.kill,agent.suspend,multimodal.dlp | - | non | non | non | Actions d'audit transmises au SIEM (les refus et les échecs le sont toujours). (EAI_SIEM_FORWARD_ACTIONS) |
Hôte syslog du SIEM (siem_syslog_host) | string | (vide) | - | non | non | non | Récepteur syslog du SIEM (vide : désactivé). (EAI_SIEM_SYSLOG_HOST) |
Port syslog du SIEM (siem_syslog_port) | port | 6514 | - | non | non | non | Port du récepteur syslog. (EAI_SIEM_SYSLOG_PORT) |
Protocole syslog du SIEM (siem_syslog_proto) | enum | tls | udp, tcp, tls | non | non | non | udp, tcp ou tls. (EAI_SIEM_SYSLOG_PROTO) |
Port des métriques du processus de fond (worker_metrics_port) | port | 9464 | - | non | non | non | Port Prometheus de python -m eai.worker (EAI_WORKER_METRICS_PORT). |
Port des métriques du processus média (media_worker_metrics_port) | port | 9465 | - | non | non | non | Port Prometheus de python -m eai.media_worker (EAI_MEDIA_WORKER_METRICS_PORT). |
FinOps et audit
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Seuils d'alerte budgétaire (finops_alert_thresholds) | string | 50,80,100 | - | non | non | non | Pourcentage d'un budget ou d'un quota qui lève une alerte (les règles FinOps elles-mêmes sont du code). (EAI_FINOPS_ALERT_THRESHOLDS) |
Rétention WORM (audit_worm_retention_days) | int | 365 | min 1 | non | non | non | Jours de conservation des exports d'audit WORM. (EAI_AUDIT_WORM_RETENTION_DAYS) |
Réglages de fond
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Cadence du processus (worker_tick_seconds) | float | 5.0 | min 0.0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_TICK_SECONDS) (avancé) |
Intervalle du planificateur (worker_scheduler_interval_seconds) | int | 30 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_SCHEDULER_INTERVAL_SECONDS) (avancé) |
Intervalle de la boîte d'envoi (worker_outbox_interval_seconds) | int | 10 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_OUTBOX_INTERVAL_SECONDS) (avancé) |
Intervalle d'expiration des quotas (worker_quota_expiry_interval_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_QUOTA_EXPIRY_INTERVAL_SECONDS) (avancé) |
Intervalle des battements (worker_heartbeat_interval_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_HEARTBEAT_INTERVAL_SECONDS) (avancé) |
Délai des battements (worker_heartbeat_timeout_seconds) | int | 1800 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_HEARTBEAT_TIMEOUT_SECONDS) (avancé) |
Intervalle d'expiration des approbations (worker_approval_expiry_interval_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_APPROVAL_EXPIRY_INTERVAL_SECONDS) (avancé) |
Intervalle de rétention (worker_retention_interval_seconds) | int | 86400 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_RETENTION_INTERVAL_SECONDS) (avancé) |
Lot du processus (worker_batch_size) | int | 100 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_BATCH_SIZE) (avancé) |
Vérification de la chaîne d'audit (worker_verify_chain_interval_seconds) | int | 3600 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_VERIFY_CHAIN_INTERVAL_SECONDS) (avancé) |
Intervalle des jauges (worker_gauges_interval_seconds) | int | 30 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_GAUGES_INTERVAL_SECONDS) (avancé) |
Intervalle de réindexation (worker_embeddings_reindex_interval_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_EMBEDDINGS_REINDEX_INTERVAL_SECONDS) (avancé) |
Remise en file des médias (worker_media_requeue_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_MEDIA_REQUEUE_SECONDS) (avancé) |
Intervalle de l'export analytique (worker_analytics_export_seconds) | int | 60 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_ANALYTICS_EXPORT_SECONDS) (avancé) |
Lot analytique (analytics_export_batch) | int | 5000 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_ANALYTICS_EXPORT_BATCH) (avancé) |
Lots analytiques par passe (analytics_export_max_batches) | int | 20 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_ANALYTICS_EXPORT_MAX_BATCHES) (avancé) |
Retard analytique (analytics_export_lag_seconds) | float | 5.0 | min 0.0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_ANALYTICS_EXPORT_LAG_SECONDS) (avancé) |
Intervalle d'envoi au SIEM (worker_siem_forward_seconds) | int | 30 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_SIEM_FORWARD_SECONDS) (avancé) |
Lot SIEM (siem_forward_batch) | int | 500 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_SIEM_FORWARD_BATCH) (avancé) |
Intervalle de l'export WORM (worker_audit_worm_seconds) | int | 3600 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_WORKER_AUDIT_WORM_SECONDS) (avancé) |
Bail des tâches média (media_job_lease_seconds) | int | 900 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_MEDIA_JOB_LEASE_SECONDS) (avancé) |
Tentatives des tâches média (media_job_max_attempts) | int | 3 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_MEDIA_JOB_MAX_ATTEMPTS) (avancé) |
Interrogation des médias (media_worker_poll_seconds) | float | 2.0 | min 0.0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_MEDIA_WORKER_POLL_SECONDS) (avancé) |
Battement des médias (media_worker_heartbeat_seconds) | float | 60.0 | min 0.0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_MEDIA_WORKER_HEARTBEAT_SECONDS) (avancé) |
Durée du jeton temps réel (realtime_ws_token_ttl_seconds) | int | 300 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_TOKEN_TTL_SECONDS) (avancé) |
Taille des messages temps réel (realtime_ws_max_message_bytes) | int | 1048576 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_MAX_MESSAGE_BYTES) (avancé) |
Débit des événements temps réel (realtime_ws_max_events_per_second) | float | 50.0 | min 0.0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_MAX_EVENTS_PER_SECOND) (avancé) |
Rafale temps réel (realtime_ws_burst) | int | 100 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_BURST) (avancé) |
Durée de session temps réel (realtime_ws_max_session_seconds) | int | 3600 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_MAX_SESSION_SECONDS) (avancé) |
Délai d'inactivité temps réel (realtime_ws_idle_timeout_seconds) | int | 120 | min 0 | non | non | non | Réglage du processus de fond et des flux temps réel (valeur de services/control-plane/src/eai/config.py). (EAI_REALTIME_WS_IDLE_TIMEOUT_SECONDS) (avancé) |
Dépendances
Pour chaque dépendance active, le Manager prend la première solution parmi : la liaison choisie dans l'assistant ; un service de la même installation qui la fournit ; un service déjà installé dans le cluster ; la seule connexion du type attendu. Sinon, une dépendance facultative reste non liée, et une dépendance obligatoire est ajoutée à l'installation dans son mode par défaut (la colonne ci-dessous nomme le service du catalogue ajouté).
| Liaison | Fournie par | Type de connexion | Point d'accès | Facultative | Quand rien n'est lié | Description |
|---|---|---|---|---|---|---|
database | postgresql | postgresql | sql | non | postgresql est ajouté à l'installation | Base de la plateforme (schéma eai). |
redis | redis | redis | redis | non | redis est ajouté à l'installation | Compteurs des limites de débit partagés par les répliques (rediss avec un utilisateur ACL en production). |
litellm | litellm | - | admin | non | litellm est ajouté à l'installation | Passerelle de modèles : chaque appel de modèle passe par LiteLLM. |
opa | opa | - | api | non | opa est ajouté à l'installation | Point de décision des politiques des passerelles. |
openfga | openfga | - | http | non | openfga est ajouté à l'installation | Autorisation fondée sur les relations. |
oidc | keycloak | oidc | http | non | keycloak est ajouté à l'installation | Fournisseur OpenID Connect des utilisateurs (Keycloak, ou LemonLDAP::NG quand il est installé à sa place, ou tout fournisseur OIDC déclaré comme connexion). |
qdrant | qdrant | qdrant | http | non | qdrant est ajouté à l'installation | Base vectorielle des bases de connaissances et de la mémoire. |
clickhouse | clickhouse | clickhouse | http | non | clickhouse est ajouté à l'installation | Base analytique (export des usages et des coûts) et télémétrie temps réel des machines et des services (base navin_manager). |
storage | seaweedfs | s3 | s3 | non | seaweedfs est ajouté à l'installation | Stockage objet de la plateforme (SeaweedFS par défaut) : médias, fichiers et archive d'audit WORM. |
temporal | temporal | - | http | oui | reste non liée (facultative) | Planifications et workflows durables. |
livekit | livekit | - | signal | oui | reste non liée (facultative) | Voix et vidéo temps réel. |
asterisk_ami | asterisk | - | ami | oui | reste non liée (facultative) | Asterisk Manager Interface du pool PBX : nom d'utilisateur et secret qui livrent les fichiers gérés et lisent les événements. |
asterisk_ari | asterisk | - | ari | oui | reste non liée (facultative) | Asterisk REST Interface du pool PBX : nom d'utilisateur et mot de passe du contrôle des appels et des enregistrements. |
kamailio | kamailio | - | sip | oui | reste non liée (facultative) | Bord SIP : adresses des instances Kamailio et, dès que Kamailio le déclare sur ce point de terminaison, le secret partagé auth_ephemeral des identifiants des softphones. |
livekit_sip | livekit-sip | - | sip | oui | reste non liée (facultative) | Passerelle LiveKit SIP jointe par la branche IA des pools PBX. |
mem0 | mem0 | - | api | oui | reste non liée (facultative) | Serveur Mem0 : faits et mémoires persistants des agents, joint avec la clé d'API d'administration de l'instance. |
cognee | cognee | - | api | oui | reste non liée (facultative) | API Cognee : graphe de connaissances et relations des agents, jointe avec la clé d'API de service. |
opik | opik | - | api | oui | reste non liée (facultative) | Suivi des évaluations (résultats ragas). |
otel | otel-collector | - | otlp_http | oui | reste non liée (facultative) | Traces OpenTelemetry en OTLP HTTP. |
openbao | openbao | - | api | oui | reste non liée (facultative) | Secrets (KV) et signature de l'audit (Transit). |
nats | nats | nats | client | oui | reste non liée (facultative) | Événements des agents et avis des tâches média (JetStream). |
presidio | presidio | - | analyzer | oui | reste non liée (facultative) | Détection des données personnelles de la DLP. |
docling | docling | - | api | oui | reste non liée (facultative) | Conversion des documents de l'ingestion. |
clamav | clamav | - | api | non | clamav est ajouté à l'installation | Passerelles ClamAV qui analysent chaque fichier déposé avant ingestion (mode enforce, toutes les instances). |
yarax | yara-x | - | api | non | yara-x est ajouté à l'installation | Workers YARA-X qui confrontent chaque fichier déposé aux règles avant ingestion (mode enforce, toutes les instances). |
Points d'accès
| Point d'accès | Schéma | Composant | Port | Chemin | Paramètre TLS | Paramètres de liaison | Secrets de liaison | Commande de provisionnement |
|---|---|---|---|---|---|---|---|---|
api | http | control-plane | 8080 (api_port) | - | tls_enabled | - | worker_token | - |
portal | http | portal | 3000 (portal_port) | - | tls_enabled | - | - | - |
Commandes
| Commande | Composant | Cible | Description |
|---|---|---|---|
Appliquer les migrations (migrate) | migrate | premier hôte | Exécute python -m eai.migrate (aussi lancé avant chaque démarrage par le composant migrate). |
Journaux de l'API (logs) | control-plane | hôte choisi | Dernières lignes du journal de l'API. |
Journaux du processus de fond (worker_logs) | worker | hôte choisi | Dernières lignes du journal du processus de fond. |
Contrôles de santé
Vivacité (par instance)
| Composant | Contrôle | Détails |
|---|---|---|
control-plane | HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.api_port }}/healthz | Attendu 200 ; 60 tentatives ; intervalle 2 s ; délai 5 s |
worker | HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.worker_metrics_port }}/metrics | Attendu 200 ; 60 tentatives ; intervalle 2 s ; délai 5 s |
media-worker | HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.media_worker_metrics_port }}/metrics | Attendu 200 ; 60 tentatives ; intervalle 2 s ; délai 5 s |
portal | HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.portal_port }}/ | Attendu 200 ; 60 tentatives ; intervalle 2 s ; délai 5 s |
Disponibilité (contrôle du service)
| Contrôle | Détails |
|---|---|
HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.api_port }}/readyz | Attendu 200 ; 10 tentatives ; intervalle 3 s ; délai 5 s |
Contrôles préalables
| Contrôle | Type | Signification | Sévérité | Composants |
|---|---|---|---|---|
memory | memory_mb {"min": 4096} | au moins 4096 Mo de mémoire | bloquant | tous les composants |
api_port_free | port_free {"param": "api_port"} | port 8080 libre sur l'hôte | bloquant | control-plane |
portal_port_free | port_free {"param": "portal_port"} | port 3000 libre sur l'hôte | bloquant | portal |
gpu | gpu {"min_count": 1} | au moins 1 GPU NVIDIA avec 0 Mo de mémoire | bloquant | media-worker |
time_sync | time_sync {} | une horloge synchronisée | avertissement | tous les composants |
Désinstallation
Chemins supprimés quand les données sont purgées : {{ paths.data }}, {{ paths.log }}.
Liens rapides
- Portail :
{{ config.public_portal_url }} - Santé de l'API :
{{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn }}:{{ config.api_port }}/healthz
Documentation amont
- Site : https://navin.ai
- Sources : https://github.com/navin-ai/navin-enterprise-ai
- Haute disponibilité : https://docs.haproxy.org/3.2/configuration.html
- Haute disponibilité : https://www.postgresql.org/docs/16/high-availability.html