Docker Deployment

Deploy Surgewave using Docker containers.

Quick Start

docker run -d \
    --name surgewave \
    -p 9092:9092 \
    -p 9093:9093 \
    kuestenlogik/surgewave

Docker Compose

Single Broker

version: '3.8'
services:
  surgewave:
    image: kuestenlogik/surgewave:latest
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      - Surgewave__BrokerId=1
      - Surgewave__AutoCreateTopics=true
    volumes:
      - surgewave-data:/data
    restart: unless-stopped

volumes:
  surgewave-data:

3-Node Cluster

version: '3.8'
services:
  surgewave-1:
    image: kuestenlogik/surgewave:latest
    hostname: surgewave-1
    ports:
      - "9092:9092"
    environment:
      - Surgewave__BrokerId=1
      - Surgewave__Host=surgewave-1
      - Surgewave__ClusterNodes=surgewave-1:9092,surgewave-2:9092,surgewave-3:9092
      - Surgewave__UseRaftConsensus=true
    volumes:
      - surgewave-1-data:/data
    networks:
      - surgewave-net

  surgewave-2:
    image: kuestenlogik/surgewave:latest
    hostname: surgewave-2
    ports:
      - "9192:9092"
    environment:
      - Surgewave__BrokerId=2
      - Surgewave__Host=surgewave-2
      - Surgewave__ClusterNodes=surgewave-1:9092,surgewave-2:9092,surgewave-3:9092
      - Surgewave__UseRaftConsensus=true
    volumes:
      - surgewave-2-data:/data
    networks:
      - surgewave-net

  surgewave-3:
    image: kuestenlogik/surgewave:latest
    hostname: surgewave-3
    ports:
      - "9292:9092"
    environment:
      - Surgewave__BrokerId=3
      - Surgewave__Host=surgewave-3
      - Surgewave__ClusterNodes=surgewave-1:9092,surgewave-2:9092,surgewave-3:9092
      - Surgewave__UseRaftConsensus=true
    volumes:
      - surgewave-3-data:/data
    networks:
      - surgewave-net

networks:
  surgewave-net:

volumes:
  surgewave-1-data:
  surgewave-2-data:
  surgewave-3-data:

Environment Variables

Variable Default Description
Surgewave__BrokerId 1 Broker ID
Surgewave__Host localhost Bind address
Surgewave__Port 9092 Kafka port
Surgewave__GrpcPort 9093 gRPC port
Surgewave__DataDirectory /data Data path
Surgewave__StorageMode File Storage backend
Surgewave__AutoCreateTopics true Auto-create
Surgewave__ClusterNodes - Cluster nodes
Surgewave__UseRaftConsensus false Enable Raft

Volumes

Path Purpose
/data Topic data
/logs Log files
/config Configuration

Health Checks

services:
  surgewave:
    healthcheck:
      test: ["CMD", "curl", "-f", "https://localhost:9093/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

Resource Limits

services:
  surgewave:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G

Commands

# Start
docker-compose up -d

# View logs
docker-compose logs -f surgewave

# Stop
docker-compose down

# Stop and remove volumes
docker-compose down -v

Next Steps