services:
  # -------------------------
  # LEADER NODE
  # -------------------------
  leader:
    image: lerkolabs/uptop:latest
    container_name: uptop-leader
    sysctls:
      - net.ipv4.ping_group_range=0 2147483647
    ports:
      - "23234:23234" # SSH
      - "8080:8080"   # HTTP
    environment:
      - UPTOP_DB_TYPE=postgres
      # Note: Port 5432 is correct here because we are talking INSIDE the network
      - UPTOP_DB_DSN=postgres://devuser:devpass@leader-db:5432/uptop_dev?sslmode=disable
      - UPTOP_HTTP_PORT=8080
      - UPTOP_STATUS_ENABLED=true
      - UPTOP_STATUS_TITLE=Leader Node
      
      # Cluster Config
      - UPTOP_CLUSTER_MODE=leader
      - UPTOP_CLUSTER_SECRET=mysecret  # EXAMPLE ONLY — rotate before use
    depends_on:
      - leader-db
    stdin_open: true
    tty: true

  leader-db:
    image: postgres:15-alpine
    container_name: uptop-leader-db
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpass
      POSTGRES_DB: uptop_dev
    volumes:
      - ./tmp/leader-data:/var/lib/postgresql/data

  # -------------------------
  # FOLLOWER NODE
  # -------------------------
  follower:
    image: lerkolabs/uptop:latest
    container_name: uptop-follower
    sysctls:
      - net.ipv4.ping_group_range=0 2147483647
    ports:
      - "23233:23234" # SSH (Mapped to different host port)
      - "8081:8080"   # HTTP (Mapped to different host port)
    environment:
      - UPTOP_DB_TYPE=postgres
      # Connects to its OWN database
      - UPTOP_DB_DSN=postgres://devuser:devpass@follower-db:5432/uptop_dev?sslmode=disable
      - UPTOP_HTTP_PORT=8080
      - UPTOP_STATUS_ENABLED=true
      - UPTOP_STATUS_TITLE=Follower Node
      
      # Cluster Config
      - UPTOP_CLUSTER_MODE=follower
      - UPTOP_CLUSTER_SECRET=mysecret  # EXAMPLE ONLY — rotate before use
      # IMPORTANT: Uses the Service Name "leader" to connect internally
      - UPTOP_PEER_URL=http://leader:8080
    depends_on:
      - follower-db
    stdin_open: true
    tty: true

  follower-db:
    image: postgres:15-alpine
    container_name: uptop-follower-db
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpass
      POSTGRES_DB: uptop_dev
    volumes:
      - ./tmp/follower-data:/var/lib/postgresql/data