Données & infra réseau
Le central sépare les responsabilités :
- PostgreSQL pour les données relationnelles métier (accédé par
saturn). - API logs Python (
central-mercure) pour l'accès aux logs, adossée à Elasticsearch. - central-dnsdhcp (DB-less) : service Go source de vérité DNS/DHCP, persisté en fichier JSON.
- CoreDNS pour DNS local.
PostgreSQL (métier)
Base leukos_central :
auth_users: authentification et rôles.nodes: inventaire des machines nodes (ID, nom, IP, last_seen, connected).
Script d'initialisation : central/postgres/init.sql.
central-dnsdhcp (DB-less)
Le service central-dnsdhcp est la source de vérité DNS/DHCP et ne dépend d'aucune
base de données. Il persiste ses enregistrements dans un fichier JSON local et régénère
un export au format dnsmasq à chaque mutation.
DATA_FILE(défaut/data/dnsdhcp/records.json) : source de vérité (écriture atomique).DNSMASQ_EXPORT_FILE(défaut/data/dnsdhcp/dnsmasq.conf) : config dnsmasq rendue (DNSaddress=/cname=/txt-record=, DHCPdhcp-host=) que dnsmasq — et via lui coredns — rechargent.- Répertoire persistant : bind mount
./dnsdhcp/data:/data/dnsdhcp. saturnconsomme ce service en interne via gRPC (central-dnsdhcp:9150).
Elasticsearch (logs, via l'API logs)
Elasticsearch n'est jamais interrogé directement par l'API centrale. Le microservice
API logs (central-mercure) est le seul à s'y connecter. Les logs reçus des
nodes sont indexés dans des index journaliers :
leukos-node-logs-YYYY.MM.DD
Bénéfices :
- recherche full-text rapide ;
- filtres par node, niveau, période ;
- base prête pour dashboarding et alerting ;
- couplage faible : l'accès au stockage des logs est isolé dans un service dédié.
CoreDNS (DNS local)
central/coredns/Corefile permet :
- résolution DNS locale (
*.leukos.lan) ; - résolution récursive externe via forwarders ;
- cache DNS pour réduire la latence.
Fichier d'hosts local : central/coredns/hosts.leukos.
Le fichier hosts.leukos est généré par l'API centrale à partir de PostgreSQL
(table dns_records) via l'endpoint POST /api/dns/sync, et aussi automatiquement
après upsert/delete d'un record DNS.
CoreDNS recharge ce fichier périodiquement (reload 5s dans le bloc hosts).
:::warning DHCP
CoreDNS ne fournit pas DHCP. central-dnsdhcp rend un fichier dnsmasq.conf
(directives dhcp-host=) pr\u00eat \u00e0 \u00eatre consomm\u00e9 par un service dnsmasq d\u00e9di\u00e9 ;
d\u00e9ployez dnsmasq (ou Kea) pointant sur ce fichier pour activer l'attribution DHCP.
:::
Orchestration
Stack complète : central/docker-compose.central.yml
Services :
saturnvenuscentral-mercurecentral-kafkacentral-dnsdhcpcentral-coredns
Les variables d'environnement de la stack centrale sont maintenant centralisées
dans config/yaml/*.yml puis générées en .env via :
npm run config:env:generate:devnpm run config:env:generate:prod
Les fichiers Compose chargent les .env générés sous config/env/dev/.
Lancement
Depuis la racine du repo :
npm run central:up
Puis vérifications :
curl http://localhost:8130/health
curl http://localhost:8130/api/nodes
curl http://localhost:9200