services:
  graph-node:
    image: cerc/graph-node:local
    depends_on:
      db:
        condition: service_healthy
      ipfs:
        condition: service_healthy
    extra_hosts:
      - host.docker.internal:host-gateway
    environment:
      ipfs: ipfs:5001
      postgres_host: db
      postgres_port: 5432
      postgres_user: graph-node
      postgres_pass: password
      postgres_db: graph-node
      ethereum: ${ETH_NETWORKS:-lotus-fixturenet:http://lotus-node-1:1234/rpc/v1}
      # Env varaibles reference: https://git.vdb.to/cerc-io/graph-node/src/branch/master/docs/environment-variables.md
      GRAPH_LOG: debug
      ETHEREUM_REORG_THRESHOLD: 3
      GRAPH_ETHEREUM_JSON_RPC_TIMEOUT: ${GRAPH_ETHEREUM_JSON_RPC_TIMEOUT:-180}
      GRAPH_ETHEREUM_REQUEST_RETRIES: ${GRAPH_ETHEREUM_REQUEST_RETRIES:-10}
      GRAPH_ETHEREUM_MAX_BLOCK_RANGE_SIZE: ${GRAPH_ETHEREUM_MAX_BLOCK_RANGE_SIZE:-2000}
      GRAPH_ETHEREUM_BLOCK_INGESTOR_MAX_CONCURRENT_JSON_RPC_CALLS_FOR_TXN_RECEIPTS: ${GRAPH_ETHEREUM_BLOCK_INGESTOR_MAX_CONCURRENT_JSON_RPC_CALLS_FOR_TXN_RECEIPTS:-1000}
    entrypoint: ["bash", "-c"]
    # Wait for ETH RPC endpoint to be up when running with fixturenet-lotus
    command: |
      "wait_for ${ETH_RPC_HOST:-lotus-node-1}:${ETH_RPC_PORT:-1234} -t 1800 -- start"
    ports:
      - "8000"
      - "8001"
      - "8020"
      - "8030"
      - "8040"
    healthcheck:
      test: ["CMD", "nc", "-vz", "localhost", "8020"]
      interval: 30s
      timeout: 10s
      retries: 10
      start_period: 3s
  ipfs:
    image: ipfs/kubo:master-2023-02-20-714a968
    volumes:
      - ipfs-import:/import
      - ipfs-data:/data/ipfs
    ports:
      - "8080"
      - "4001"
      - "5001"
  db:
    image: postgres:14-alpine
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "graph-node"
      POSTGRES_DB: "graph-node"
      POSTGRES_PASSWORD: "password"
      POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C"
    command:
      [
        "postgres",
        "-cshared_preload_libraries=pg_stat_statements"
      ]
    healthcheck:
      test: ["CMD", "nc", "-v", "localhost", "5432"]
      interval: 30s
      timeout: 10s
      retries: 10
      start_period: 3s
    ports:
      - "5432"

volumes:
  ipfs-import:
  ipfs-data:
  db-data:
