Guide de démarrage rapide pour les développeurs¶
Pour évaluer Provisa sans compiler à partir du code source, consultez le Guide de démarrage rapide — téléchargez le programme d'installation pour macOS, Windows ou Linux et exécutez provisa start. (REQ-223, REQ-224, REQ-227)
Ce guide est destiné à l'exécution de Provisa depuis le dépôt — développement actif, débogage ou contribution.
Prérequis¶
- Docker Desktop (en cours d'exécution)
- Python 3.12+
- Node.js 20+
- Git
1. Cloner et configurer¶
setup.sh crée .venv/, installe toutes les dépendances Python via pip install -e ".[dev]", et configure les hooks Git dans .githooks/. [tool-verified: setup.sh lines 5–9]
2. Tout démarrer¶
Une fois le démarrage terminé, vous verrez :
Ce qui est démarré : [tool-verified: start-ui.sh]
- Services principaux de Docker Compose (
docker-compose.core.yml) — PostgreSQL, PgBouncer, Trino, Redis (REQ-055) - Surcouche de développement Docker Compose (
docker-compose.dev.yml) — MinIO, Kafka, MongoDB, Elasticsearch, Neo4j, Fuseki, Debezium, Schema Registry (REQ-055) - API backend sur le port 8001 (rechargement à chaud lors des modifications de
provisa/etconfig/) (REQ-618) - Serveur de développement Vite de l'UI sur le port 3000 (HMR)
- Traçage OpenTelemetry et Grafana sur
http://localhost:3100. La pile d'observabilité est un profil docker-composeobservabilityfacultatif (OTel Collector, Prometheus, Tempo, Grafana), non activé par défaut au niveau de la plateforme ;start-ui.shl'active par commodité de script de développement, sauf si vous passez--no-observability. (REQ-302, REQ-303, REQ-330)
Ctrl+C arrête tout — backend, UI et tous les services Docker — et annule tout correctif de configuration. (REQ-619)
Ctrl+R redémarre uniquement le backend (utile après une modification de configuration que le rechargement à chaud ne détecte pas). (REQ-619)
Options¶
--no-observability — Désactive le traçage distribué. Par défaut, start-ui.sh télécharge l'agent Java OpenTelemetry s'il n'est pas déjà présent, applique un correctif au jvm.config de Trino pour le charger, et démarre l'OTel collector, Prometheus, Tempo et Grafana. Passez --no-observability pour ignorer tout cela. Le correctif de jvm.config est annulé lors de Ctrl+C. [tool-verified: start-ui.sh lines 15, 67–82] (REQ-330)
--seed-data — Alimente Kafka avec des données de démonstration une fois les services Docker en bon état. Non exécuté par défaut. [tool-verified: start-ui.sh lines 14, 173–178]
--keep-docker — Laisse les services Docker Compose en cours d'exécution après Ctrl+C au lieu d'appeler docker compose down. [tool-verified: start-ui.sh lines 16, 301–306] (REQ-619)
--reset-volumes — Efface tous les volumes Docker et redémarre avec un état propre. Utile pour la récupération après une panne de Docker. [tool-verified: start-ui.sh line 19] (REQ-170)
--demo — Démarre des sources de données de démonstration supplémentaires (schéma PostgreSQL pet-store, mock OpenAPI petstore, SQLite et un GraphQL distant). Alimente automatiquement les utilisateurs et commandes petstore. [tool-verified: start-ui.sh lines 17, 55–171]
--source=<name> (start-ui-install.sh uniquement, répétable) — Provisionne une source de données optionnelle en plus de --demo. Chaque nom correspond à demo/sources/<name>/. Le démarrage appelle demo/sources/provision.py up, qui démarre le compose.yml de la source comme son propre projet Docker Compose (provisa-demo-<name>), attend son bilan de santé, et exécute prime.py lorsque la source en possède un pour alimenter les données. Le démarrage écrit ensuite une configuration enveloppe dans ${PROVISA_HOME:-~/.provisa}/demo/provisa-with-sources.yaml qui inclut la configuration de base plus le fragment.yaml de chaque source, puis démarre à partir de celle-ci. [tool-verified: start-ui-install.sh (search SOURCES), demo/sources/provision.py] (REQ-1669)
Le même provision.py est appelé par la suite de tests de bout en bout de l'interface pour mettre en place ces sources (sous le préfixe de projet provisa-e2e-<name> sur ses propres ports), de sorte que les données de démonstration montrées et les lignes vérifiées par la suite sont définies une seule fois. [tool-verified: provisa-ui/e2e/demo-source-containers.ts] (REQ-1671)
Lors d'un démarrage Docker (sans --demo/--native), le coordinateur est un conteneur, donc chaque source est jointe au réseau de la pile principale et enregistrée sous <name>:<container port> ; lors d'un démarrage natif, elle est enregistrée sous localhost:<published port>. Une source dont le fichier demo/sources/<name>/engine nomme un moteur que le démarrage n'exécute pas est refusée.
Sources fournies :
| Nom | Port(s) | Notes |
|---|---|---|
neo4j |
HTTP 27474, Bolt 27687 | Deux tables Cypher (adopter, adopter_referral) ; graphe alimenté par seed.cypher ; tables enregistrées depuis le fragment |
mongodb |
27117 | Source enregistrée ; collection product_reviews alimentée par db/mongo-init.js ; enregistrer les tables manuellement via Register Table |
redis |
26379 | Source enregistrée ; hachages support_agent:* et agent_status:* alimentés par prime.py ; chaque préfixe s'enregistre comme table via Register Table (REQ-1675) |
cassandra |
29042 | Source enregistrée ; shelter_ops.intake_events alimenté par prime.py (nécessite l'extra cassandra) ; le keyspace s'enregistre comme schéma via Register Table (REQ-1676) |
sparql |
23030 | Apache Jena Fuseki ; source et une table adossée à une requête (volunteer) enregistrées depuis le fragment, graphe alimenté par prime.py ; d'autres tables via Register Table (requête + Aperçu) (REQ-1683) |
prometheus |
29090 | Source enregistrée ; le serveur s'auto-scrute, de sorte que up et les métriques prometheus_* s'enregistrent comme tables via Register Table (REQ-1689) |
elasticsearch |
29200 | Source et mapping d'index enregistrés ; index support_tickets alimenté par prime.py ; lu en HTTP par le moteur natif (REQ-1672), via le connecteur sur Trino |
splunk |
mgmt 8089, HEC 8088 | Source enregistrée avec authentification par jeton et disable_ssl_validation (le certificat du conteneur est autosigné) ; un index, sept événements d'alerte shelter et le Data Model shelter_alerts alimentés par prime.py, qui génère aussi le jeton API lu par le fragment comme PROVISA_DEMO_SPLUNK_TOKEN. Les Data Models s'enregistrent comme tables via Register Table — sur Trino via le catalogue splunk, sur tous les autres moteurs via le serveur pgwire Calcite intégré que le moteur rattache (REQ-1694) |
chinook |
25433 | Postgres contenant le sous-ensemble Chinook en snake_case que suit l'échantillon de métadonnées Hasura, alimenté par prime.py depuis tests/fixtures/hasura_v2_t1_seed.sql ; source enregistrée depuis le fragment, et la source sur laquelle atterrit un import Hasura v2 de tests/fixtures/hasura_v2_t1_metadata.json (REQ-1687) |
--idp=basic|firebase — Active un fournisseur d'identité pour l'authentification. Sans cet indicateur, le backend s'exécute sans fournisseur d'authentification et toutes les requêtes sont traitées comme admin. [tool-verified: start-ui.sh line 18; provisa/auth/wiring.py lines 57–60; provisa/auth/middleware.py lines 57–68] (REQ-120, REQ-124)
3. Connecter une source de données¶
Provisa lit la configuration depuis config/. Ajoutez un fichier source — par exemple config/sources/my-db.yaml :
sources:
- id: my-pg
type: postgresql
host: localhost
port: 5432
database: mydb
username: myuser
password: ${MY_DB_PASSWORD}
tables:
- id: orders
publish: true
columns:
- name: id
- name: amount
- name: region
- name: customer_id
Définissez la variable d'environnement et le backend la détectera au prochain rechargement :
Consultez docs/configuration.md pour la référence YAML complète et tous les types de sources pris en charge.
4. Exécuter votre première requête¶
# GraphQL
curl -s -X POST http://localhost:8001/data/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ orders { id amount region } }"}' | jq
# SQL — use the /data/sql endpoint
curl -s -X POST http://localhost:8001/data/sql \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT id, amount, region FROM orders LIMIT 5"}' | jq
Aucune authentification n'est requise lorsqu'aucune section auth n'est présente dans config/provisa.yaml (valeur par défaut en développement). Le rôle par défaut est admin. [tool-verified: provisa/auth/wiring.py lines 57–60; provisa/auth/middleware.py lines 56–68] (REQ-120, REQ-267)
5. Ouvrir l'UI¶
Ouvrez http://localhost:3000 dans un navigateur.
La barre de navigation comporte quatre menus de premier niveau : [tool-verified: provisa-ui/src/components/NavBar.tsx lines 39–80]
- Explore — Explorateur de schéma (
/schema), éditeur GraphQL (/query), éditeur Cypher (/graph), éditeur SQL (/sql) - Model — Vues et commandes
- Security — Sécurité au niveau des lignes et politiques de masquage de colonnes (REQ-038, REQ-041)
- Admin — Vue d'ensemble, domaines, cache, tâches planifiées, état du système, observabilité, utilisateurs, organisations, rôles
L'API GraphQL d'administration se trouve à l'adresse http://localhost:8001/admin/graphql. [tool-verified: provisa/api/app.py line 3389] (REQ-620)
Dépannage¶
Le backend ne démarre pas — vérifiez .logs/server.log. La cause la plus courante est une variable d'environnement manquante ou un conflit de port sur le 8001. [tool-verified: start-ui.sh line 202] (REQ-618)
Les services Docker ne sont pas en bon état — exécutez docker compose -f docker-compose.core.yml -f docker-compose.dev.yml ps pour voir quel service est bloqué. Le moteur de fédération prend environ 30 secondes au premier démarrage. (REQ-055)
Conflit de port sur le 3000 ou le 8001 — start-ui.sh arrête les processus obsolètes sur ces ports avant de démarrer. Si autre chose occupe le port, arrêtez-le manuellement au préalable. [tool-verified: start-ui.sh lines 197–199] (REQ-619)
Redémarrage propre — arrêtez le script, puis exécutez ./start-ui.sh --reset-volumes pour effacer tous les volumes et redémarrer. [tool-verified: start-ui.sh line 19] (REQ-170)
Étapes suivantes¶
| Objectif | Document |
|---|---|
| Référence complète de configuration YAML | configuration.md |
| Sécurité au niveau des lignes, masquage de colonnes, authentification | security.md |
| Tous les types de sources pris en charge | sources.md |
| Abonnements en temps réel | subscriptions.md |
| JDBC, outils de BI, Arrow Flight, Apollo Federation | integrations.md |
| Client Python | python-client.md |
| Déploiement en production | deployment.md |