Deployment
Environment Configuration
Configuration d'environnement
Référence complète des variables d'environnement par service.
apps/server
Secrets (K8s Secret)
| Variable | Obligatoire | Description |
|---|---|---|
DATABASE_URL | URL PostgreSQL: postgresql://user:pass@host:5432/db | |
BETTER_AUTH_SECRET | Secret JWT Better Auth (min 32 chars) | |
RESEND_API_KEY | — | Clé Resend pour l'envoi d'emails |
MICROSOFT_CLIENT_SECRET | — | OAuth Microsoft (si activé) |
ConfigMap (non sensibles)
| Variable | Obligatoire | Description |
|---|---|---|
BETTER_AUTH_URL | URL publique du serveur (ex: https://api.kalli.example.com) | |
CORS_ORIGIN | Origines CORS autorisées (séparées par virgule) | |
DOCUMENT_PROCESSOR_URL | URL interne du microservice document-processor | |
INDEX_API_URL | URL interne de l'Index API du chatbot | |
MICROSOFT_CLIENT_ID | — | OAuth Microsoft |
MICROSOFT_TENANT_ID | — | OAuth Microsoft |
EMAIL_FROM | — | Adresse expéditeur emails |
I18N_JSON | — | JSON i18n inline (alternatif à /app/i18n.json) |
apps/chatbot
Secrets
| Variable | Obligatoire | Description |
|---|---|---|
MISTRAL_API_KEY | Clé API Mistral AI | |
DATABASE_URL | Même DB que le server | |
CHAINLIT_AUTH_SECRET | Secret JWT sessions Chainlit | |
OAUTH_AZURE_AD_CLIENT_SECRET | — | Auth OAuth Azure AD |
ConfigMap
| Variable | Obligatoire | Description |
|---|---|---|
BOT_SYSTEM_PROMPT | Template prompt RAG ({context}, {few_shots_examples}, {question}) | |
CHAINLIT_SYSTEM_PROMPT | Prompt système injecté dans l'historique Chainlit | |
WEB_APP_BASE_URL | — | URL base web (liens sources admin) |
BOT_NAME | — | Nom affiché dans l'UI Chainlit (injecté dans .chainlit/config.toml à l'entrypoint) |
CHAINLIT_PUBLIC_URL | — | URL publique Chainlit (pour lien d'icône header, ex: http://localhost:8501) |
RAG_K_CHUNKS | — | Chunks par requête (default: 5) |
RAG_N_EXAMPLES | — | Few-shot examples (default: 4) |
RAG_QUERY_MODEL_ID | — | Modèle LLM (default: mistral-medium-latest) |
RAG_EMBEDDING_MODEL_ID | — | Modèle embeddings (default: mistral-embed) |
RAG_TEMP | — | Température LLM (default: 0.2) |
RAG_BATCH_SIZE | — | Taille batch embeddings (default: 64) |
FEW_SHOTS_ENABLED | — | Activer few-shots (default: true) |
ENABLE_ORCHESTRATOR | — | Mode orchestrateur (default: false) |
EXTERNAL_AGENT_URL | — | URL agent externe (si ENABLE_ORCHESTRATOR=true) |
INTENT_DETECTION_PROMPT | — | Prompt classification NORMAL/ALTER |
OAUTH_AZURE_AD_CLIENT_ID | — | Auth OAuth Azure AD |
OAUTH_AZURE_AD_TENANT_ID | — | Auth OAuth Azure AD |
apps/document-processor
| Variable | Obligatoire | Description |
|---|---|---|
DOCUMENT_PROCESSOR_HOST | — | Hôte écoute (default: 0.0.0.0) |
DOCUMENT_PROCESSOR_PORT | — | Port écoute (default: 8001) |
MAX_FILE_SIZE_MB | — | Taille max fichier (default: 50) |
ENABLE_OCR | — | Activer OCR Tesseract (default: false) |
TESSERACT_PATH | — | Chemin tesseract (si non dans PATH) |
LOG_LEVEL | — | Niveau logs (default: INFO) |
apps/web
Toutes les variables sont préfixées VITE_ et exposées côté client.
| Variable | Obligatoire | Description |
|---|---|---|
VITE_SERVER_URL | URL du serveur Hono (ex: https://api.kalli.example.com) | |
VITE_CHATBOT_URL | URL du chatbot Chainlit (ex: https://chat.kalli.example.com) | |
VITE_BETTER_AUTH_CALLBACK_URL | URL 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.
| Variable | Default | Description |
|---|---|---|
SERVER_PORT | 3000 | Port exposé du server Hono |
WEB_PORT | 3001 | Port exposé du frontend web |
DOCS_PORT | 3002 | Port exposé du site de documentation |
DB_PORT | 5432 | Port exposé de PostgreSQL |
DOC_PROCESSOR_PORT | 8001 | Port exposé du document-processor |
CHAINLIT_PORT | 8501 | Port exposé du chatbot Chainlit |
INDEX_API_PORT | 8502 | Port exposé de l'Index API |
DB_USER | — | Utilisateur PostgreSQL |
DB_PASSWORD | — | Mot de passe PostgreSQL |
DB_NAME | — | Nom de la base PostgreSQL |
BOT_NAME | Test | Nom du bot injecté dans .chainlit/config.toml au démarrage |
CHAINLIT_PUBLIC_URL | http://localhost:8501 | URL publique Chainlit (lien d'icône dans le header) |
CORS_ORIGIN | — | Origine CORS (URL du frontend web) |
DOCUMENT_PROCESSOR_URLest automatiquement surchargé àhttp://document-processor:8001pardocker-compose.ymlpour la communication interne entre services.
Séparation ConfigMap / Secret
| Type | Contenu | Stockage recommandé |
|---|---|---|
| Secret | Clés API, mots de passe, secrets JWT | K8s Secret + External Secrets Operator / Vault |
| ConfigMap | URLs, flags, prompts, i18n, modèle IDs | K8s 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_KEYetBETTER_AUTH_SECRET.
Kalli