Bare Metal

These instructions will walk you through spinning up a Graph node on a generic Linux host.


  • A Linux machine with access to the internet.

  • Sudo privileges on this machine.

  • A Klaytn API Endpoint.

This guide, with examples and the complete Docker configuration can be found on the Klaytn Indexing repo published and deployed by Bware Labs.


NOTE: : These instructions were tested on Ubuntu 22.04 LTS

  • Connect to your machine.

  • We will run services in docker, so we have to install it first. The way to do it is described here

NOTE: : It might be useful to allow non-root users to run docker too: sudo chmod 666 /var/run/docker.sock

  • Configure docker to start automatically on boot:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service
  • Install other useful tools for debugging issues:

sudo apt install net-tools
  • Copy the nginx.conf file to /etc/nginx/nginx.conf on your host.

NOTE: : You might first have to create the directory: sudo mkdir -p /etc/nginx

  • Edit docker-compose.yml and fill in your Klaytn API URL. Search for KLAYTN_API_URL.

  • Copy the docker-compose.yml file somewhere on your host.

  • Start the docker containers. Run this command from the same folder as your docker-compose.yml:

docker compose up -d
  • Verify everything is running correctly:

    • Check the running docker containers:

        docker ps

    You should see the following containers: query-node, index-node, ipfs, postgres, nginx

    • Verify ports used by these services are open:

        netstat -nltp

    You should see the following ports: 80, 5001, 5432, 8000, 8020

    • Check if the index-node has started sync-ing:

        docker logs index-node

    You should see something like this:

    Downloading latest blocks from Ethereum, this may take a few minutes..., provider: klaytn-rpc-0, component: BlockIngestor
    Oct 12 14:52:17.601 INFO Syncing 84 blocks from Ethereum, code: BlockIngestionLagging, blocks_needed: 84, blocks_behind: 84, latest_block_head: 103684173, current_block_head: 103684089, provider: klaytn-rpc-0, component: BlockIngestor
    Oct 12 14:52:47.482 INFO Syncing 30 blocks from Ethereum, code: BlockIngestionLagging, blocks_needed: 30, blocks_behind: 30, latest_block_head: 103684203, current_block_head: 103684173, provider: klaytn-rpc-0, component: BlockIngestor
    Oct 12 14:52:58.759 INFO Syncing 11 blocks from Ethereum, code: BlockIngestionStatus, blocks_needed: 11, blocks_behind: 11, latest_block_head: 103684214, current_block_head: 103684203, provider: klaytn-rpc-0, component: BlockIngestor
  • Navigate to the http://<EXTERNAL_IP>/subgraphs/graphqlurl in a browser to confirm it is working correctly

NOTE: : If you are doing everything on localhost, then navigate to http://localhost/subgraphs/graphql

NOTE: : To stop the services run docker compose down

Last updated