LogoKalli
Deployment

Environment Configuration

Configuration d'environnement

Référence complète des variables d'environnement par service.

apps/server

Secrets (K8s Secret)

VariableObligatoireDescription
DATABASE_URLURL PostgreSQL: postgresql://user:pass@host:5432/db
BETTER_AUTH_SECRETSecret JWT Better Auth (min 32 chars)
RESEND_API_KEYClé Resend pour l'envoi d'emails
MICROSOFT_CLIENT_SECRETOAuth Microsoft (si activé)

ConfigMap (non sensibles)

VariableObligatoireDescription
BETTER_AUTH_URLURL publique du serveur (ex: https://api.kalli.example.com)
CORS_ORIGINOrigines CORS autorisées (séparées par virgule)
DOCUMENT_PROCESSOR_URLURL interne du microservice document-processor
INDEX_API_URLURL interne de l'Index API du chatbot
MICROSOFT_CLIENT_IDOAuth Microsoft
MICROSOFT_TENANT_IDOAuth Microsoft
EMAIL_FROMAdresse expéditeur emails
I18N_JSONJSON i18n inline (alternatif à /app/i18n.json)

apps/chatbot

Secrets

VariableObligatoireDescription
MISTRAL_API_KEYClé API Mistral AI
DATABASE_URLMême DB que le server
CHAINLIT_AUTH_SECRETSecret JWT sessions Chainlit
OAUTH_AZURE_AD_CLIENT_SECRETAuth OAuth Azure AD

ConfigMap

VariableObligatoireDescription
BOT_SYSTEM_PROMPTTemplate prompt RAG ({context}, {few_shots_examples}, {question})
CHAINLIT_SYSTEM_PROMPTPrompt système injecté dans l'historique Chainlit
WEB_APP_BASE_URLURL base web (liens sources admin)
BOT_NAMENom affiché dans l'UI Chainlit (injecté dans .chainlit/config.toml à l'entrypoint)
CHAINLIT_PUBLIC_URLURL publique Chainlit (pour lien d'icône header, ex: http://localhost:8501)
RAG_K_CHUNKSChunks par requête (default: 5)
RAG_N_EXAMPLESFew-shot examples (default: 4)
RAG_QUERY_MODEL_IDModèle LLM (default: mistral-medium-latest)
RAG_EMBEDDING_MODEL_IDModèle embeddings (default: mistral-embed)
RAG_TEMPTempérature LLM (default: 0.2)
RAG_BATCH_SIZETaille batch embeddings (default: 64)
FEW_SHOTS_ENABLEDActiver few-shots (default: true)
ENABLE_ORCHESTRATORMode orchestrateur (default: false)
EXTERNAL_AGENT_URLURL agent externe (si ENABLE_ORCHESTRATOR=true)
INTENT_DETECTION_PROMPTPrompt classification NORMAL/ALTER
OAUTH_AZURE_AD_CLIENT_IDAuth OAuth Azure AD
OAUTH_AZURE_AD_TENANT_IDAuth OAuth Azure AD

apps/document-processor

VariableObligatoireDescription
DOCUMENT_PROCESSOR_HOSTHôte écoute (default: 0.0.0.0)
DOCUMENT_PROCESSOR_PORTPort écoute (default: 8001)
MAX_FILE_SIZE_MBTaille max fichier (default: 50)
ENABLE_OCRActiver OCR Tesseract (default: false)
TESSERACT_PATHChemin tesseract (si non dans PATH)
LOG_LEVELNiveau logs (default: INFO)

apps/web

Toutes les variables sont préfixées VITE_ et exposées côté client.

VariableObligatoireDescription
VITE_SERVER_URLURL du serveur Hono (ex: https://api.kalli.example.com)
VITE_CHATBOT_URLURL du chatbot Chainlit (ex: https://chat.kalli.example.com)
VITE_BETTER_AUTH_CALLBACK_URLURL de callback OAuth (ex: https://kalli.example.com/auth/callback)

En production Kubernetes, ces valeurs sont injectées dans window.RUNTIME_ENV via le ConfigMap. Les placeholders {{ .Env.VITE_* }} sont remplacés au démarrage du pod.

Docker Compose (.env racine)

Variables lues directement par docker-compose.yml pour configurer les ports exposés et les credentials PostgreSQL.

VariableDefaultDescription
SERVER_PORT3000Port exposé du server Hono
WEB_PORT3001Port exposé du frontend web
DOCS_PORT3002Port exposé du site de documentation
DB_PORT5432Port exposé de PostgreSQL
DOC_PROCESSOR_PORT8001Port exposé du document-processor
CHAINLIT_PORT8501Port exposé du chatbot Chainlit
INDEX_API_PORT8502Port exposé de l'Index API
DB_USERUtilisateur PostgreSQL
DB_PASSWORDMot de passe PostgreSQL
DB_NAMENom de la base PostgreSQL
BOT_NAMETestNom du bot injecté dans .chainlit/config.toml au démarrage
CHAINLIT_PUBLIC_URLhttp://localhost:8501URL publique Chainlit (lien d'icône dans le header)
CORS_ORIGINOrigine CORS (URL du frontend web)

DOCUMENT_PROCESSOR_URL est automatiquement surchargé à http://document-processor:8001 par docker-compose.yml pour la communication interne entre services.

Séparation ConfigMap / Secret

TypeContenuStockage recommandé
SecretClés API, mots de passe, secrets JWTK8s Secret + External Secrets Operator / Vault
ConfigMapURLs, flags, prompts, i18n, modèle IDsK8s ConfigMap, versionnable en Git

Exemple ConfigMap Kubernetes (chatbot)

apiVersion: v1
kind: ConfigMap
metadata:
  name: kalli-chatbot-config
data:
  CHAINLIT_SYSTEM_PROMPT: "Tu es Kalli, une assistante IA..."
  BOT_SYSTEM_PROMPT: |
    Contexte: {context}
    Exemples: {few_shots_examples}
    Question: {question}
  WEB_APP_BASE_URL: "https://kalli.example.com"
  RAG_K_CHUNKS: "5"
  ENABLE_ORCHESTRATOR: "false"

Bonnes pratiques

  • Jamais de secrets dans les images: utilisez des Secrets K8s ou External Secrets.
  • Validation au démarrage: chaque service lève une erreur claire si une variable obligatoire est absente.
  • Overrides par environnement: values.dev.yaml, values.staging.yaml, values.prod.yaml.
  • Rotation des secrets: planifiez la rotation de MISTRAL_API_KEY et BETTER_AUTH_SECRET.