# base `docker-compose` file with no explicit references to images.
#
# this is solely used as a template for `kbld`[1] which reads it and replaces
# image names by absolute digest-based image references.
#
# - see `monero-exporter/.images.lock.yaml` for the locked set of images used.
# - see `monero-exporter/.images.yaml` for the configuration for building the
#   images.
#
# [1]: https://carvel.dev/kbld
#

version: '3'

services:
  monerod:
    container_name: monerod
    image: monero-exporter-monerod
    volumes:
      - monerod-data:/data
    ports:
      - 18080:18080
      - 18089:18089
    command:
      - --check-updates=disabled
      - --data-dir=/data
      - --enforce-dns-checkpointing
      - --limit-rate=999999
      - --no-igd
      - --no-zmq
      - --out-peers=32
      - --p2p-bind-ip=127.0.0.1
      - --p2p-bind-port=18080
      - --rpc-bind-ip=127.0.0.1
      - --rpc-bind-port=18081
      - --rpc-restricted-bind-ip=0.0.0.0
      - --rpc-restricted-bind-port=18089

  monero-exporter:
    container_name: monero-exporter
    image: monero-exporter
    network_mode: service:monerod
    command:
      - --monero-addr=http://127.0.0.1:18081

  prometheus:
    image: monero-exporter-prometheus
    container_name: prometheus
    volumes:
      - prometheus-data:/data
      - ./prometheus/config.yaml:/etc/prometheus/config.yaml:ro
    command:
      - --config.file=/etc/prometheus/config.yaml
      - --storage.tsdb.path=/data
      - --storage.tsdb.retention.time=30d

  grafana:
    container_name: grafana
    image: monero-exporter-grafana
    command:
      - -config=/etc/grafana/grafana.ini
    volumes:
      - ./grafana/grafana.ini:/etc/grafana/grafana.ini:ro
      - ./grafana/provisioning:/etc/grafana/provisioning:ro
      - ./grafana/dashboards:/var/lib/grafana/dashboards:ro
    ports:
      - 3000:3000


volumes:
  prometheus-data:
  monerod-data:
