Schnellstart für Entwickler¶
Um Provisa auszuprobieren, ohne aus dem Quellcode zu bauen, siehe den Schnellstart: Laden Sie das Installationsprogramm für macOS, Windows oder Linux herunter und führen Sie provisa start aus.
Dieser Leitfaden beschreibt, wie Sie Provisa aus dem Repository ausführen, wenn Sie entwickeln, debuggen oder beitragen.
Voraussetzungen¶
- Docker Desktop (läuft)
- Python 3.12+
- Node.js 20+
- Git
1. Klonen und einrichten¶
setup.sh erstellt .venv/, installiert alle Python-Abhängigkeiten über pip install -e ".[dev]" und konfiguriert die Git-Hooks in .githooks/.
2. Alles starten¶
Nach Abschluss des Starts sehen Sie:
Was gestartet wird:
- Docker-Compose-Kerndienste (
docker-compose.core.yml) — PostgreSQL, PgBouncer, Trino, Redis - Docker-Compose-Dev-Overlay (
docker-compose.dev.yml) — MinIO, Kafka, MongoDB, Elasticsearch, Neo4j, Fuseki, Debezium, Schema Registry - Backend-API auf Port 8001 (Hot-Reload bei Änderungen an
provisa/undconfig/) - Vite-UI-Dev-Server auf Port 3000 (HMR)
- OpenTelemetry-Tracing und Grafana unter
http://localhost:3100. Der Observability-Stack (OTel Collector, Prometheus, Tempo, Grafana) ist ein optionales docker-compose-Profilobservabilityund für die Plattform standardmäßig aus;start-ui.shschaltet ihn zur Bequemlichkeit in der Entwicklung ein, außer Sie übergeben--no-observability.
Strg+C stoppt alles (Backend, UI und alle Docker-Dienste) und macht alle Konfigurationspatches rückgängig.
Strg+R startet nur das Backend neu (nützlich nach einer Konfigurationsänderung, die vom Hot-Reload nicht erfasst wird).
Optionen¶
--no-observability — Deaktiviert das verteilte Tracing. Standardmäßig lädt start-ui.sh den OpenTelemetry-Java-Agent herunter, falls noch nicht vorhanden, patcht Trinos jvm.config, um ihn zu laden, und startet den OTel Collector, Prometheus, Tempo und Grafana. Übergeben Sie --no-observability, um all dies zu überspringen. Der jvm.config-Patch wird bei Strg+C rückgängig gemacht.
--seed-data — Befüllt Kafka mit Demo-Daten, nachdem die Docker-Dienste fehlerfrei laufen. Standardmäßig nicht aktiv.
--keep-docker — Lässt die Docker-Compose-Dienste nach Strg+C weiterlaufen, anstatt docker compose down aufzurufen.
--reset-volumes — Löscht alle Docker-Volumes und startet mit einem sauberen Zustand neu. Nützlich zur Wiederherstellung nach einem Docker-Absturz.
--demo — Startet zusätzliche Demo-Datenquellen (PostgreSQL-Pet-Store-Schema, OpenAPI-Petstore-Mock, SQLite und ein GraphQL-Remote). Befüllt automatisch Petstore-Benutzer und -Bestellungen.
--source=<name> (nur start-ui-install.sh, wiederholbar) — Stellt eine optionale Datenquelle zusätzlich zu --demo bereit. Jeder Name entspricht demo/sources/<name>/. Der Start ruft demo/sources/provision.py up auf, das die compose.yml der Quelle als eigenes Docker-Compose-Projekt (provisa-demo-<name>) startet, auf dessen Health-Check wartet und prime.py ausführt, sofern die Quelle eines hat, um Daten einzusäen. Der Start schreibt anschließend eine Wrapper-Konfiguration unter ${PROVISA_HOME:-~/.provisa}/demo/provisa-with-sources.yaml, die die Basiskonfiguration sowie das fragment.yaml jeder Quelle einbindet, und bootet daraus.
Dasselbe provision.py ruft auch die End-to-End-Testsuite der UI auf, um diese Quellen bereitzustellen (unter dem Projektpräfix provisa-e2e-<name> auf eigenen Ports), sodass die in der Demo gezeigten Seed-Daten und die von der Suite geprüften Datensätze einmalig definiert werden.
Bei einem Docker-Start (ohne --demo/--native) ist der Koordinator ein Container, sodass jede Quelle dem Netzwerk des Kern-Stacks beitritt und unter <name>:<container port> registriert wird; bei einem nativen Start erfolgt die Registrierung unter localhost:<published port>. Eine Quelle, deren Datei demo/sources/<name>/engine eine Engine benennt, die der Start nicht ausführt, wird abgelehnt.
Mitgelieferte Quellen:
| Name | Port(s) | Hinweise |
|---|---|---|
neo4j |
HTTP 27474, Bolt 27687 | Zwei Cypher-Tabellen (adopter, adopter_referral); Graph wird durch seed.cypher eingesät; Tabellen werden aus dem Fragment registriert |
mongodb |
27117 | Quelle registriert; Collection product_reviews wird durch db/mongo-init.js eingesät; Tabellen manuell über Register Table registrieren |
redis |
26379 | Quelle registriert; Hashes support_agent:* und agent_status:* werden durch prime.py eingesät; jedes Präfix wird über Register Table als Tabelle registriert |
cassandra |
29042 | Quelle registriert; shelter_ops.intake_events wird durch prime.py eingesät (benötigt das cassandra-Extra); der Keyspace wird über Register Table als Schema registriert |
sparql |
23030 | Apache Jena Fuseki; Quelle und eine abfragebasierte Tabelle (volunteer) werden aus dem Fragment registriert, Graph wird durch prime.py eingesät; weitere Tabellen über Register Table (Query + Preview) |
prometheus |
29090 | Quelle registriert; der Server scraped sich selbst, sodass up und die prometheus_*-Metriken über Register Table als Tabellen registriert werden |
elasticsearch |
29200 | Quelle und Index-Mapping registriert; Index support_tickets wird durch prime.py eingesät; wird von der nativen Engine über HTTP gelesen, über den Connector auf Trino |
splunk |
mgmt 8089, HEC 8088 | Quelle mit Token-Auth und disable_ssl_validation registriert (das Zertifikat des Containers ist selbstsigniert); ein Index, sieben Shelter-Alert-Ereignisse und das Data Model shelter_alerts werden durch prime.py eingesät, das auch das API-Token erzeugt, das das Fragment als PROVISA_DEMO_SPLUNK_TOKEN liest. Data Models werden über Register Table als Tabellen registriert: auf Trino über den splunk-Katalog, auf allen anderen Engines über den pgwire-Endpunkt des Splunk-Treibers, den die Engine anbindet |
chinook |
25433 | Postgres mit der snake_case-Chinook-Teilmenge, die Hasuras Metadaten-Beispiel abbildet, eingesät durch prime.py aus tests/fixtures/hasura_v2_t1_seed.sql; Quelle aus dem Fragment registriert und die Quelle, auf der ein Hasura-v2-Import von tests/fixtures/hasura_v2_t1_metadata.json landet |
--idp=basic|firebase — Aktiviert einen Identity Provider für die Authentifizierung. Ohne dieses Flag läuft das Backend ohne Authentifizierungsanbieter, und alle Anfragen werden als admin behandelt.
3. Eine Datenquelle verbinden¶
Provisa liest seine Konfiguration aus config/. Fügen Sie eine Quelldatei hinzu, zum Beispiel 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
Setzen Sie die Umgebungsvariable, und das Backend übernimmt sie beim nächsten Reload:
Die vollständige YAML-Referenz und alle unterstützten Quelltypen finden Sie unter docs/configuration.md.
4. Ihre erste Abfrage ausführen¶
# 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
Es ist keine Authentifizierung erforderlich, wenn in config/provisa.yaml kein Abschnitt auth vorhanden ist (Standard in der Entwicklung). Die Standardrolle ist admin.
5. Die UI öffnen¶
Öffnen Sie http://localhost:3000 in einem Browser.
Die Navigationsleiste hat vier Menüs der obersten Ebene:
- Explore — Schema Explorer (
/schema), GraphQL-Editor (/query), Cypher-Editor (/graph), SQL-Editor (/sql) - Model — Sichten und Commands
- Security — Sicherheit auf Zeilenebene und Spaltenmaskierungsrichtlinien
- Admin — Übersicht, Domänen, Cache, geplante Aufgaben, Systemzustand, Observability, Benutzer, Organisationen, Rollen
Die Admin-GraphQL-API befindet sich unter http://localhost:8001/admin/graphql.
Fehlerbehebung¶
Backend startet nicht — prüfen Sie .logs/server.log. Häufigste Ursache ist eine fehlende Umgebungsvariable oder ein Portkonflikt auf 8001.
Docker-Dienste nicht fehlerfrei — führen Sie docker compose -f docker-compose.core.yml -f docker-compose.dev.yml ps aus, um zu sehen, welcher Dienst hängt. Die Federation Engine benötigt beim ersten Start ca. 30 Sekunden.
Portkonflikt auf 3000 oder 8001 — start-ui.sh beendet veraltete Prozesse auf diesen Ports vor dem Start. Wenn etwas anderes den Port belegt, beenden Sie es zuerst manuell.
Neustart von Grund auf — stoppen Sie das Skript und führen Sie dann ./start-ui.sh --reset-volumes aus, um alle Volumes zu löschen und neu zu starten.
Nächste Schritte¶
| Ziel | Dokument |
|---|---|
| Vollständige YAML-Konfigurationsreferenz | configuration.md |
| Sicherheit auf Zeilenebene, Spaltenmaskierung, Authentifizierung | security.md |
| Alle unterstützten Quelltypen | sources.md |
| Echtzeit-Subscriptions | subscriptions.md |
| JDBC, BI-Tools, Arrow Flight, Apollo Federation | integrations.md |
| Python-Client | python-client.md |
| Produktionsbereitstellung | deployment.md |