services:
  cassandra:
    container_name: cassandra
    image: ${CASSANDRA_IMAGE}
    platform: linux/amd64
    stop_grace_period: 180s
    environment:
      - SVCA_PUBLIC_ADDRESS=${HOST_MACHINE_ADDRESS}
      - SVCA_SEEDS=${CASSANDRA_SEEDS}
      - SVCA_NODE_VALIDATION_IP_ADDRESSES=${CASSANDRA_CLUSTER_ADDRESSES}
      - SVCA_CQL_PASSWORD=${CASSANDRA_CQL_PASSWORD}
      - SVCA_JMX_PASSWORD=${CASSANDRA_JMX_PASSWORD}
      - SVCA_STORAGE_PORT=${CASSANDRA_STORAGE_PORT}
      - SVCA_JMX_REGISTRY_PORT=${CASSANDRA_JMX_REGISTRY_PORT}
      - SVCA_CQL_PORT=${CASSANDRA_CQL_PORT}
    ports:
      - ${CASSANDRA_STORAGE_PORT}:${CASSANDRA_STORAGE_PORT} # Cassandra storage port, internal communication between nodes
      - ${CASSANDRA_JMX_REGISTRY_PORT}:${CASSANDRA_JMX_REGISTRY_PORT} # JMX port, must be accessible from all Cassandra and Sitevision nodes
      - ${CASSANDRA_CQL_PORT}:${CASSANDRA_CQL_PORT} # CQL port, must be accessible from all Cassandra and Sitevision nodes
    volumes:
      - type: volume
        source: sitevision-cassandra-data
        target: /var/opt/cassandra
    ulimits:
      memlock: -1
      nofile: 100000
      nproc: 32768
    restart: unless-stopped
    mem_reservation: 5g
    mem_limit: 5g
    networks:
      sitevision:
        ipv4_address: ${CASSANDRA_CONTAINER_ADDRESS}
  sitevision:
    container_name: sitevision
    image: ${SITEVISION_IMAGE}
    platform: linux/amd64
    stop_grace_period: 30s
    environment:
      - SV_PUBLIC_ADDRESS=${HOST_MACHINE_ADDRESS}
      - SV_HAZELCAST_CLUSTER_ADDRESSES=${SITEVISION_CLUSTER_ADDRESSES}
      - SV_HAZELCAST_PORT=${SITEVISION_HAZELCAST_PORT}
      - SV_CASSANDRA_CLIENT_ADDRESS=${CASSANDRA_CONTAINER_ADDRESS}
      - SV_CASSANDRA_CLIENT_CQL_PASSWORD=${CASSANDRA_CQL_PASSWORD}
      - SV_CASSANDRA_CLIENT_JMX_PASSWORD=${CASSANDRA_JMX_PASSWORD}
      - SV_CASSANDRA_CLIENT_JMX_REGISTRY_PORT=${CASSANDRA_JMX_REGISTRY_PORT}
      - SV_SYSTEM_ACCOUNT_USERNAME=${SITEVISION_SYSTEM_ACCOUNT_USERNAME}
      - SV_SYSTEM_ACCOUNT_PASSWORD=${SITEVISION_SYSTEM_ACCOUNT_PASSWORD}
      - SV_JMX_REGISTRY_PORT=${SITEVISION_JMX_REGISTRY_PORT}
      - SV_JMX_READONLY_ACCOUNT_USERNAME=${SITEVISION_JMX_READONLY_ACCOUNT_USERNAME}
      - SV_JMX_READONLY_ACCOUNT_PASSWORD=${SITEVISION_JMX_READONLY_ACCOUNT_PASSWORD}
      - SV_CLIENT_INTERNAL_COM_PORT=${SITEVISION_INTERNAL_COM_PORT}
    ports:
      - ${SITEVISION_HTTP_PORT}:8080
      - ${SITEVISION_HTTPS_PORT}:8443
      - ${SITEVISION_HAZELCAST_PORT}:${SITEVISION_HAZELCAST_PORT}
      - ${SITEVISION_INTERNAL_COM_PORT}:7010
      - ${SITEVISION_JMX_REGISTRY_PORT}:${SITEVISION_JMX_REGISTRY_PORT}
    volumes:
      - type: volume
        source: sitevision-core-data
        target: /var/opt/sitevision/data
    ulimits:
      memlock: -1
      nofile: 100000
      nproc: 32768
    restart: unless-stopped
    mem_reservation: 6g
    mem_limit: 6g
    networks:
      sitevision:
        ipv4_address: ${SITEVISION_CONTAINER_ADDRESS}
networks:
  sitevision:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: ${NETWORK_SUBNET}
          gateway: ${NETWORK_GATEWAY}
volumes:
  sitevision-core-data:
    external: true
  sitevision-cassandra-data:
    external: true