Skip to main content

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

OnderdeelImplementatie
Event backboneKafka (Confluent image in docker-compose.v1.yml); gateway publiceert naar topic telematics.avl als KAFKA_BROKERS gezet is.
ClickHouseTabel device_positions_ch; telemetry-worker vult vanuit Kafka.
RedisSessies via connect-redis als REDIS_URL gezet is; worker zet device:last:{imei} voor hot cache.
APIPostgreSQL blijft primair; GET /api/fleet/devices/:imei/positions/history leest ClickHouse als CLICKHOUSE_URL staat, anders Postgres.
IdentitySessies + optioneel Bearer JWT (KEYCLOAK_ISSUER) — gebruiker moet in users bestaan met zelfde e-mail als Keycloak-claim.
NotificationsWorker: periodieke offline-check + SMTP (SMTP_*, ALERT_EMAIL_TO) — optioneel.
SupportGET /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)

  1. Start Postgres + optioneel Redis, Kafka, ClickHouse (of gebruik docker-compose.v1.yml alleen voor data services).
  2. Zet env: KAFKA_BROKERS, CLICKHOUSE_URL, REDIS_URL zoals in compose.
  3. npm run build && node dist/telemetry-worker.cjs naast node dist/server.cjs en node 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/yourrealm op de app.
  • Users moeten in Postgres staan met hetzelfde e-mailadres als in Keycloak.