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
packageManagerdanspackage.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.jsonRenseigner au minimum dans .env :
BETTER_AUTH_SECRET: secret de session (remplacer la valeur d'exemple)CORS_ORIGIN: origine du web (http://localhost:3001par défaut)DB_NAME,DB_USER,DB_PASSWORD,DB_PORT: base principaleLITELLM_API_BASE,LITELLM_API_KEY: accès au proxy de modèlesMICROSOFT_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 psLe fichier docker-compose.yml définit ces services :
| Service | Cible de build | Port (variable) |
|---|---|---|
db (PostgreSQL 17) | image postgres:17-alpine | DB_PORT |
document-processor | document-processor | DOC_PROCESSOR_PORT (8001) |
index | index | INDEX_API_PORT (8502) |
rag-agent | rag-agent | AGENT_PORT (8000) |
server | server | SERVER_PORT (3000) |
web | web | WEB_PORT (3001) |
docs | docs | DOCS_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 serverVoie 2 : Bun (sans Docker)
Installer les dépendances du workspace à la racine :
bun installDé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-alpineAppliquer 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:5555Les 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 8502Bun 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
| Service | URL | Contrôle |
|---|---|---|
| Serveur | http://localhost:3000 | GET /health renvoie OK |
| Web | http://localhost:3001 | la page de connexion s'affiche |
| document-processor | http://localhost:8001 | GET /health |
| rag-agent | http://localhost:8000 | GET /healthz |
| API d'index | http://localhost:8502 | GET / |
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.