Wprowadzenie
Instalacja i konfiguracja lokalna
Ten przewodnik prowadzi przez uruchomienie pełnej platformy DataFlow AI na maszynie deweloperskiej — instalację wymagań wstępnych, zrozumienie układu monorepozytorium, postawienie całego stosu za pomocą Docker Compose oraz budowanie każdego komponentu osobno ze źródeł.
Wymagania wstępne
DataFlow AI to wielojęzyczne monorepozytorium, więc zbudowanie wszystkiego ze źródeł wymaga czterech zestawów narzędzi językowych. Aby po prostu uruchomić platformę, Docker i Docker Compose są jedynym twardym wymaganiem — build Compose obsługuje każdy zestaw narzędzi wewnątrz kontenerów.
| Narzędzie | Wersja | Potrzebne do |
|---|---|---|
| Docker + Docker Compose | aktualna | Uruchomienia pełnego stosu (wymagane) |
| JDK (Temurin) | 21 | Budowania usług platformowych Kotlin / Spring Boot |
| Node.js | 20 | Budowania frontendu React |
| Python | 3.12 | Budowania usług AI FastAPI |
| Go | 1.22 | Budowania narzędzia CLI dataflow |
| Gradle | 8.5 (wrapper dołączony) | Wielomodułowego buildu JVM |
| Poetry | 1.8.4 | Zarządzania zależnościami Python |
Do uruchomienia potrzebujesz tylko Dockera
Jeśli Twoim celem jest jedynie uruchomienie DataFlow AI lokalnie, zainstaluj Dockera i przejdź od razu do sekcji Uruchamianie stosu za pomocą Docker Compose. Zestawy narzędzi JDK, Node, Python i Go są potrzebne tylko wtedy, gdy chcesz budować lub iterować nad komponentem poza jego kontenerem.
Weryfikacja zestawów narzędzi
Przed budowaniem ze źródeł potwierdź, że każdy zestaw narzędzi udostępnia oczekiwaną wersję główną:
docker --version
docker compose version
java -version # should report 21
node --version # should report v20.x
python --version # should report 3.12.x
go version # should report go1.22
Układ repozytorium
Monorepozytorium jest zorganizowane według języka i środowiska uruchomieniowego. Katalogi najwyższego poziomu, z którymi będziesz pracować, to:
polcomtel/
├── backend/
│ ├── platform/ Kotlin / Spring Boot 3.3.5 multi-module Gradle build
│ │ ├── common/ shared security, models, exception handling (library)
│ │ ├── connector-sdk/ connector framework + 21 connector impls (library)
│ │ ├── pushdown-sql/ JSqlParser-based SQL dialect transpiler
│ │ ├── api-gateway/ reactive Spring Cloud Gateway — single ingress
│ │ ├── metadata-service/ catalog, connections, governance, GDPR, MCP server
│ │ ├── pipeline-engine/ pipeline DAG compilation, execution, scheduling
│ │ ├── lineage-service/ dataset/column lineage, OpenLineage ingestion
│ │ ├── monitor-service/ alerts, metrics, cost, SLA, notifications, SSE
│ │ └── integration-tests/ cross-service integration test module
│ ├── ai-services/ Python 3.12 / FastAPI services
│ │ ├── copilot/ NL-to-pipeline, NL-to-SQL, RAG, chat, RCA
│ │ └── migration-engine/ Informatica / Alteryx → DataFlow YAML conversion
│ ├── cli/ Go 1.22 Cobra command-line tool (`dataflow`)
│ ├── infrastructure/ Kubernetes manifests + Helm charts + Terraform
│ └── docker-compose.yml orchestrates all 12 services for local / VPS
├── frontend/ React 19 + Vite 7 + TypeScript 5.9 SPA
├── browser-extension/ companion browser extension
└── deploy/ VPS deployment scripts
Korzeniem buildu Gradle jest backend/platform. Spośród jego dziewięciu modułów pięć to usługi przeznaczone do wdrożenia (api-gateway, metadata-service, pipeline-engine, lineage-service, monitor-service), a pozostałe to biblioteki lub moduły testowe wbudowane w usługi.
Uruchamianie stosu za pomocą Docker Compose
backend/docker-compose.yml orkiestruje 12 kontenerów — osiem komponentów infrastruktury plus sześć usług aplikacyjnych i frontend — w pojedynczej sieci mostkowej Docker o nazwie dataflow-network. Każdy kontener rozwiązuje swoich sąsiadów po nazwie kontenera.
Konfiguracja zmiennych środowiskowych
Sekrety są odczytywane z plików .env (i .env.local) ignorowanych przez git, znajdujących się w backend/. Utwórz taki plik przed uruchomieniem stosu:
cd backend
cp .env.example .env
Minimalnie ustaw wartości używane przez platformę:
| Zmienna | Przeznaczenie |
|---|---|
POSTGRES_PASSWORD | Hasło do współdzielonej instancji PostgreSQL |
ANTHROPIC_API_KEY | Klucz API Claude dla copilota (w .env.local) |
LLM_PROVIDER | Backend LLM: anthropic, openrouter lub local |
KAFKA_BOOTSTRAP_SERVERS | Wewnętrzny listener Kafka — kafka:29092 |
CORS_ALLOWED_ORIGINS | Źródła dozwolone przez filtr CORS bramy |
DATAFLOW_GATEWAY_DEV_PERMIT_READS | Flaga wyłącznie deweloperska zezwalająca na nieuwierzytelnione odczyty (domyślnie true w Compose) |
Wyłącz dev-permit-reads poza środowiskiem deweloperskim
DATAFLOW_GATEWAY_DEV_PERMIT_READS domyślnie ma wartość true w pliku Compose, co zezwala na nieuwierzytelnione żądania GET oraz POST do copilota/wyszukiwania. Jest to wygodne podczas lokalnego dewelopowania, ale musi być ustawione na false w każdym środowisku dostępnym poza Twoją maszyną.
Copilot ładuje klucze dostawców LLM z .env.local z opcją required: false, więc stos nadal się uruchamia (z ograniczonymi funkcjami RAG copilota), gdy brakuje kluczy.
Uruchomienie stosu
Z katalogu backend/ postaw całość:
docker compose up -d
Kolejność uruchamiania jest wymuszana przez healthchecki kontenerów oraz depends_on: najpierw startuje PostgreSQL, następnie Keycloak, Kafka i Redis, potem sześć usług aplikacyjnych, a na końcu frontend. Dwa trwałe wolumeny — pgdata i miniodata — przetrwają restarty.
Migracje Flyway uruchamiają się automatycznie przy starcie każdej usługi JVM. Obserwuj logi, aż usługi aplikacyjne zgłoszą gotowość:
docker compose logs -f api-gateway metadata-service pipeline-engine
Zatrzymywanie i resetowanie
docker compose down # stop containers, keep volumes
docker compose down -v # stop and DELETE pgdata + miniodata volumes
Porty usług i infrastruktury
Wewnątrz sieci Docker każda usługa JVM nasłuchuje na porcie 8080, a usługi AI na 8000. Publikowane porty po stronie hosta wymienione poniżej służą wyłącznie do bezpośredniego dostępu deweloperów — normalny ruch zawsze przepływa przez bramę.
Usługi aplikacyjne
| Usługa | Technologia | Port hosta |
|---|---|---|
| api-gateway | Kotlin / Spring Cloud Gateway | 8085 |
| metadata-service | Kotlin / Spring MVC + JPA | 8181 |
| pipeline-engine | Kotlin / Spring MVC + JPA | 8082 |
| lineage-service | Kotlin / Spring MVC + JPA | 8083 |
| monitor-service | Kotlin / Spring MVC + JPA | 8084 |
| copilot | Python 3.12 / FastAPI | 8090 |
| migration-engine | Python 3.12 / FastAPI | 8091 |
| frontend | React 19 / Vite, serwowany przez nginx | 3006 |
Komponenty infrastruktury
| Komponent | Obraz | Port(y) hosta |
|---|---|---|
| PostgreSQL (pgvector) | pgvector/pgvector:pg15 | 5432 |
| Keycloak | quay.io/keycloak/keycloak:24.0 | 8180 |
| Kafka | confluentinc/cp-kafka:7.7.1 | 9092 / 29092 |
| Zookeeper | confluentinc/cp-zookeeper:7.7.1 | 2181 |
| Redis | redis:7-alpine | 6379 |
| MinIO | minio/minio | 9000 (API) / 9001 (konsola) |
| Prometheus | prom/prometheus:v2.54.1 | 9090 |
| Grafana | grafana/grafana:11.2.2 | 3001 |
Dostęp do uruchomionej platformy
Gdy stos jest gotowy, otwórz w przeglądarce poniższe adresy URL:
| URL | Co obsługuje |
|---|---|
http://localhost:3006 | Aplikacja webowa DataFlow AI |
http://localhost:8085 | Brama API — powierzchnia /api/v1 |
http://localhost:8180 | Konsola administracyjna Keycloak (realm dataflow) |
http://localhost:9001 | Konsola MinIO |
http://localhost:3001 | Pulpity Grafana |
http://localhost:9090 | Prometheus |
Logowanie odbywa się przez Keycloak: SPA wykonuje przekierowanie OIDC do Keycloak, realm dataflow uwierzytelnia użytkownika, a keycloak-js wymienia kod autoryzacyjny na JWT. Brama waliduje ten JWT i wstrzykuje nagłówki tożsamości X-User-* przy każdym wywołaniu w dół stosu.
Szybkie sprawdzenie kondycji bramy:
curl -s http://localhost:8085/actuator/health
Budowanie komponentów ze źródeł
Możesz zbudować i uruchomić dowolny komponent poza jego kontenerem, aby przyspieszyć iterację. Stos Compose może nadal dostarczać infrastrukturę (PostgreSQL, Keycloak, Kafka, Redis), podczas gdy uruchamiasz pojedynczą usługę ze źródeł.
Usługi platformowe JVM (Gradle)
Usługi Kotlin współdzielą pojedynczy wielomodułowy build Gradle z korzeniem w backend/platform. Użyj dołączonego wrappera:
cd backend/platform
./gradlew build # compile + Detekt + tests for all modules
./gradlew :metadata-service:bootRun # run one service from source
./gradlew :api-gateway:test # run a single module's tests
Współdzielony platform/Dockerfile jest wieloetapowy — builder gradle:8.5-jdk21 produkuje plik jar, który działa na środowisku uruchomieniowym eclipse-temurin:21-jre-alpine jako użytkownik bez uprawnień roota. Argument buildu BUILD_MODULE wybiera, który moduł Gradle ma zostać spakowany.
Usługi AI (Poetry)
Każda usługa Python jest niezależnym projektem Poetry. Z katalogu backend/ai-services/copilot (lub migration-engine):
poetry install # install dependencies
poetry run uvicorn app.main:app --reload # run the FastAPI service
poetry run pytest # run the test suite
poetry run ruff check . # lint
Usługi Python używają wieloetapowego obrazu python:3.12-slim i działają pod uvicorn.
Frontend (Vite)
SPA React buduje się za pomocą Vite. Z katalogu frontend/:
npm ci # install exactly what's in package-lock.json
npm run dev # Vite dev server with hot reload
npm run build # production build — runs `tsc -b && vite build`
npm test # Vitest unit tests
Serwer deweloperski proxuje wywołania API; klient axios SPA używa bazowego URL /api/v1, więc oczekuje, że brama będzie osiągalna.
Go CLI (moduły Go)
CLI dataflow buduje się standardowym zestawem narzędzi Go. Z katalogu backend/cli:
go build ./... # build the CLI
go vet ./... # static checks
go test -race ./... # tests with the race detector
Rozwiązywanie problemów
| Objaw | Prawdopodobna przyczyna i rozwiązanie |
|---|---|
| Usługi nie przechodzą walidacji Flyway przy starcie | Współdzielona baza danych ma rozbieżne historie migracji. Compose celowo ustawia liberalne flagi Flyway (OUT_OF_ORDER, REPAIR_ON_MIGRATE, VALIDATE_ON_MIGRATE: false), aby je uzgodnić — uruchom docker compose down -v i zacznij od nowa, jeśli problem się utrzymuje. |
Copilot zgłasza rag_mode: "unavailable" | pgvector jest nieosiągalny lub schemat embeddingów nie został zainicjalizowany. Potwierdź, że kontener postgres jest sprawny. |
| Pętle przekierowań przy logowaniu | Realm Keycloak dataflow nie został zaimportowany. Potwierdź, że realm-export.json jest zamontowany i Keycloak ukończył import przy starcie. |
| Frontend pokazuje pustą stronę lub zawieszony spinner | Brama nie jest osiągalna na porcie 8085 lub CORS_ALLOWED_ORIGINS nie zawiera źródła frontendu. |
| lineage-service startuje, zanim istnieją jego tabele | lineage-service ma wyłączony Flyway i ponownie wykorzystuje tabele pochodzenia danych metadata-service (tworzone przez migracje metadata V4/V48). Upewnij się, że metadata-service uruchomił się i wykonał migracje jako pierwszy. |
Wdrożenie produkcyjne
Ta strona obejmuje konfigurację lokalną i deweloperską. Topologia produkcyjna — wdrożenie Docker Compose na pojedynczym VPS oraz udokumentowana ścieżka GKE/Kustomize — opisana jest w przewodniku Wdrożenie.