services:

  # listens to mqtt packets and saves to database
  meshtastic-mqtt:
    container_name: meshtastic-mqtt
    depends_on:
      database:
        condition: service_healthy
    build:
      context: .
      dockerfile: ./Dockerfile
    command: /app/docker/mqtt.sh
    environment:
      DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100"
      MQTT_OPTS: "" # add any custom mqtt.js options here

  # runs the web map ui
  meshtastic-map:
    container_name: meshtastic-map
    depends_on:
      database:
        condition: service_healthy
    build:
      context: .
      dockerfile: ./Dockerfile
    command: /app/docker/map.sh
    ports:
      - 8080:8080/tcp
    environment:
      DATABASE_URL: "mysql://root:password@database:3306/meshtastic-map?connection_limit=100"
      MAP_OPTS: "" # add any custom index.js options here

  # publishes mqtt packets via websocket
  meshtastic-ws:
    container_name: meshtastic-ws
    build:
      context: .
      dockerfile: ./Dockerfile
    command: /app/docker/ws.sh
    ports:
      - 8081:8081/tcp
    environment:
      WS_OPTS: ""

  # runs the database to store everything from mqtt
  database:
    container_name: database
    image: bitnami/mariadb
    ports:
      - 3306:3306/tcp
    environment:
      MARIADB_DATABASE: "meshtastic-map"
      MARIADB_ROOT_PASSWORD: "password"
    volumes:
      - database_data:/bitnami/mariadb
    healthcheck:
      test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh']
      interval: 15s
      timeout: 5s
      retries: 6
      start_period: 5s

volumes:
  database_data:
