Kalli
Get Started

Installation locale

Lancer nAI'vi en local avec Docker Compose ou avec Bun

Installation locale

Deux façons de lancer la plateforme en local : avec Docker Compose (tous les services), ou avec Bun pour le serveur et le web, les services Python se lançant à part.

Prérequis

  • Git
  • Docker et Docker Compose (voie recommandée)
  • Pour la voie Bun : Bun 1.4.4 (version fixée par packageManager dans package.json, la même que dans les Dockerfiles et la CI), PostgreSQL, Python 3.13 et uv pour les services Python
  • Une clé LiteLLM (LITELLM_API_KEY) pour le chat, les embeddings et la transcription

Préparation commune

Depuis la racine du dépôt :

cp .env.example .env
cp i18n.json.example i18n.json

Renseigner au minimum dans .env :

  • BETTER_AUTH_SECRET : secret de session (remplacer la valeur d'exemple)
  • CORS_ORIGIN : origine du web (http://localhost:3001 par défaut)
  • DB_NAME, DB_USER, DB_PASSWORD, DB_PORT : base principale
  • LITELLM_API_BASE, LITELLM_API_KEY : accès au proxy de modèles
  • MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET, MICROSOFT_TENANT_ID : nécessaires au bouton de connexion Microsoft

La liste complète des variables est dans .env.example. Le détail des variables du web est dans Configuration du web et celui des déploiements dans Variables d'environnement.

Ne versionnez jamais .env, i18n.json ni les clés. Le dossier data/ est ignoré par Git, sauf data/mock-docs/ et data/fake_csv.csv.

Voie 1 : Docker Compose

docker compose up --build -d
docker compose ps

Le fichier docker-compose.yml définit ces services :

ServiceCible de buildPort (variable)
db (PostgreSQL 17)image postgres:17-alpineDB_PORT
document-processordocument-processorDOC_PROCESSOR_PORT (8001)
indexindexINDEX_API_PORT (8502)
rag-agentrag-agentAGENT_PORT (8000)
serverserverSERVER_PORT (3000)
webwebWEB_PORT (3001)
docsdocsDOCS_PORT (5555 dans .env.example)

Le service server reçoit CHAINLIT_DATABASE_URL, qui pointe vers un hôte chainlit-db. Ce service n'est pas défini dans docker-compose.yml : les fonctions qui lisent la base du chat (feedback, logos) ne fonctionnent pas tant que cette base n'est pas fournie.

Pour reconstruire un seul service :

docker compose up --build -d server

Voie 2 : Bun (sans Docker)

Installer les dépendances du workspace à la racine :

bun install

Démarrer une base PostgreSQL, par exemple :

docker run -d -p 55432:5432 -e POSTGRES_USER=ci -e POSTGRES_PASSWORD=ci -e POSTGRES_DB=ci postgres:17-alpine

Appliquer les migrations, puis lancer les applications, chacune dans son terminal :

DATABASE_URL=postgres://ci:ci@localhost:55432/ci bun run apps/server/src/scripts/migrate.ts
bun run dev:server   # http://localhost:3000
bun run dev:web      # http://localhost:3001
bun run dev:docs     # http://localhost:5555

Les services Python se lancent depuis leur dossier avec uv :

# document-processor (http://localhost:8001)
cd apps/document-processor
uv run uvicorn src.main:app --port 8001

# rag-agent (http://localhost:8000), puis API d'index (http://localhost:8502)
cd apps/rag-agent
PYTHONPATH=src uv run uvicorn rag_agent.interfaces.agent.app:app --port 8000
PYTHONPATH=src uv run uvicorn rag_agent.interfaces.index.index_api:app --port 8502

Bun charge automatiquement le .env du répertoire de travail. Le serveur lit donc apps/server/.env et le web lit apps/web/.env (voir Configuration du web).

Vérifier l'installation

ServiceURLContrôle
Serveurhttp://localhost:3000GET /health renvoie OK
Webhttp://localhost:3001la page de connexion s'affiche
document-processorhttp://localhost:8001GET /health
rag-agenthttp://localhost:8000GET /healthz
API d'indexhttp://localhost:8502GET /

Lancer les tests

Les suites à passer avant un commit sont listées dans le CLAUDE.md à la racine du dépôt. En résumé :

bunx biome ci . --formatter-enabled=false
bun run build
bun run check-types
(cd apps/web && bun run test)
(cd apps/document-processor && uv run --extra dev pytest)
(cd apps/rag-agent && uv run pytest)

Sous Windows sans Node, Vitest ne démarre pas (File URL path must be an absolute path) : lancer les tests web dans une image oven/bun, ou installer Node.