Skip to main content

Overview

The Defense Center is the server-side stack of RavenXcope. It is deployed as a single docker-compose project (defense_center-deployment/compose.yml) that runs the backend, the frontend, the Kafka-based event pipeline, and the OpenSearch storage layer.

Scope note: this compose file is the data-pipeline + application deployment. The NATS control plane (the NATS Provisioner and a NATS server) is a separate concern and is not included in this particular compose file — it is wired through backend configuration in environments that enable it.


Service inventory

ServiceImagePort(s)Role
ravenxcope-backend…/ravenxcope-backend5144.NET API (control plane, analytics, threat map).
ravenxcope-frontend…/ravenxcope-frontend8000React SPA.
sensor-api…/sensor-snort-service50051gRPC data collector → Kafka sensor_events. (See note below.)
brokerconfluentinc/cp-kafka:7.8.0internal 29092Kafka in KRaft mode (single node).
schema-registryconfluentinc/cp-schema-registry:7.8.08081Avro schema registry.
event-stream-aggr…/event-stream-aggrConsumes sensor_events, enriches, produces snort_alerts.
opensearch-node1opensearchproject/opensearch:29200Search/analytics store.
opensearch-logstash…/logstash-oss-with-opensearch-output-plugin:8.9.0snort_alerts → OpenSearch + threat-map topic.
opensearch-initcurlimages/curlOne-shot index/template bootstrap.
postgrespostgres:175432Relational store (tenants, sensors, users…).
redisredis/redis-stackCache / ephemeral state.
influxdbinfluxdb:2.78086Time-series host metrics + heartbeat status.
watchtowercontainrrr/watchtowerAuto-updates labelled containers.

ops profile (optional)

Two services only start with --profile ops:

ServicePortRole
kafka-ui9021Kafka topic/consumer inspection.
opensearch-dashboards5601OpenSearch dashboards.

RavenXcope does not rely on OpenSearch Dashboards as a product feature — the frontend replaces it. It is included only as an optional ops debugging tool.

Note on sensor-api

This compose deploys the legacy Snort-era sensor-snort-service image as the data collector on :50051. Architecturally this is the same slot as the unified Data Collector (ravenxcope-sensor-suricata server mode). The system is mid-transition; both speak gRPC into the Kafka pipeline. See the Data Plane scenario.


Container topology


Auto-update & volumes

  • Watchtower watches containers labelled com.centurylinklabs.watchtower.enable=true (the backend and frontend) and pulls new images automatically using ~/.docker/config.json for registry auth.
  • Persistent state uses named volumes: mataelang_kafka_data, mataelang_opensearch_data1, mataelang_redis-data, mataelang_influxdb_data, mataelang_postgres_data.

See Messaging & Storage for the pipeline internals and Configuration for the backend env block.