Fase 2 (v1) — geïmplementeerd in deze repo
Dit document beschrijft wat daadwerkelijk in code zit voor productiebasis (event backbone, ClickHouse, Redis, worker, optionele Keycloak-JWT).
Stack
| Onderdeel | Implementatie |
|---|---|
| Event backbone | Kafka (Confluent image in docker-compose.v1.yml); gateway publiceert naar topic telematics.avl als KAFKA_BROKERS gezet is. |
| ClickHouse | Tabel device_positions_ch; telemetry-worker vult vanuit Kafka. |
| Redis | Sessies via connect-redis als REDIS_URL gezet is; worker zet device:last:{imei} voor hot cache. |
| API | PostgreSQL blijft primair; GET /api/fleet/devices/:imei/positions/history leest ClickHouse als CLICKHOUSE_URL staat, anders Postgres. |
| Identity | Sessies + optioneel Bearer JWT (KEYCLOAK_ISSUER) — gebruiker moet in users bestaan met zelfde e-mail als Keycloak-claim. |
| Notifications | Worker: periodieke offline-check + SMTP (SMTP_*, ALERT_EMAIL_TO) — optioneel. |
| Support | GET /api/support/devices/:imei (rol overheid): device, device_online, raw-telling, Redis last JSON. |
Docker
Lokaal of staging (zonder productie-overrides):
docker compose -f docker-compose.yml -f docker-compose.v1.yml up -d --build
Productie / GitHub Actions gebruiken deploy/remote-deploy.sh:
docker compose -f docker-compose.yml -f docker-compose.v1.yml -f docker-compose.prod.yml up -d --build --remove-orphans --wait
Zet in .env o.a. CLICKHOUSE_PASSWORD (zelfde wachtwoord als in CLICKHOUSE_URL voor app/worker; zie deploy/env.production.template).
Zonder docker-compose.v1.yml blijft gedrag Fase 1: geen Kafka/Redis/ClickHouse verplicht; gateway schrijft alleen Postgres.
Lokale services (zonder Docker)
- Start Postgres + optioneel Redis, Kafka, ClickHouse (of gebruik
docker-compose.v1.ymlalleen voor data services). - Zet env:
KAFKA_BROKERS,CLICKHOUSE_URL,REDIS_URLzoals in compose. npm run build && node dist/telemetry-worker.cjsnaastnode dist/server.cjsennode dist/telematics-gateway.cjs.
Keycloak (optioneel)
docker compose -f docker-compose.yml -f docker-compose.keycloak.yml up -d→ admin UI op poort 8081.- Realm + client configureren; zet
KEYCLOAK_ISSUER=https://…/realms/yourrealmop de app. - Users moeten in Postgres staan met hetzelfde e-mailadres als in Keycloak.