# documentation: https://kuzzle.io
# slogan: Kuzzle is a generic backend offering the basic building blocks common to every application.
# tags: backend, api, realtime, websocket, mqtt, rest, sdk, iot, geofencing, low-code
# port: 7512

services:
  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - elastic-redis-data:/data
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 5s
      timeout: 20s
      retries: 10

  elasticsearch:
    image: kuzzleio/elasticsearch:7
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://127.0.0.1:9200" ]
      interval: 2s
      timeout: 2s
      retries: 10
    ulimits:
      nofile: 65536

  kuzzle:
    image: kuzzleio/kuzzle:latest
    environment:
      - SERVICE_FQDN_KUZZLE_7512
      - kuzzle_services__storageEngine__client__node=http://elasticsearch:9200
      - kuzzle_services__storageEngine__commonMapping__dynamic=true
      - kuzzle_services__internalCache__node__host=redis
      - kuzzle_services__memoryStorage__node__host=redis
      - kuzzle_server__protocols__mqtt__enabled=true
      - kuzzle_server__protocols__mqtt__developmentMode=false
      - kuzzle_limits__loginsPerSecond=50
      - NODE_ENV=production
      # - DEBUG=${DEBUG:-kuzzle:*,-kuzzle:network:protocols:websocket,-kuzzle:events}
      - DEBUG=${DEBUG:-kuzzle:cluster:sync}
      - DEBUG_DEPTH=${DEBUG_DEPTH:-0}
      - DEBUG_MAX_ARRAY_LENGTH=${DEBUG_MAX_ARRAY:-100}
      - DEBUG_EXPAND=${DEBUG_EXPAND:-off}
      - DEBUG_SHOW_HIDDEN={$DEBUG_SHOW_HIDDEN:-on}
      - DEBUG_COLORS=${DEBUG_COLORS:-on}
    cap_add:
      - SYS_PTRACE
    ulimits:
      nofile: 65536
    sysctls:
      - net.core.somaxconn=8192
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://127.0.0.1:7512/_healthcheck" ]
      timeout: 1s
      interval: 2s
      retries: 30
    depends_on:
      redis:
        condition: service_healthy
      elasticsearch:
        condition: service_healthy
