Local Setup

Set up your own local Ergo explorer instance for development and testing purposes.

Introduction

The Ergo Blockchain Explorer is your interface with the blockchain and provides four services:

Chain Grabber

Dumps aggregated data blockchain → database

Explorer API

Provides HTTP API methods for querying on/off-chain data

UTX Tracker

Dumps unconfirmed transactions from mempool to local database

UTX Broadcaster

Broadcasts unconfirmed transactions to known peers

Sources

Explorer Backend

Backend services and API implementation for the Ergo Explorer.

View Repository

Explorer Frontend

Web interface and user experience components for the Ergo Explorer.

View Repository

Resources

Docker Compose Deployment

Deploying Explorer services with Docker Compose

View Documentation

Raspberry Pi Setup

How to setup the Chain-Grabber module on a Raspberry Pi device

View Guide

Ergo Nix Toolkit

Provides Nix derivations for packages and services on Ergo

View Repository

Ergo Bootstrap

Quickly deploy an Ergo blockchain cluster with useful tools for dApp development

View Repository

ergo-setup

Docker based Ergo setup (Node, Explorer & GraphQL). Similar to Ergo Bootstrap but with fewer options and not NixOS-based.

View Repository

Running Your Own Instance

1. Create Working Directory

mkdir explorer && cd "$_"

2. Create Environment Files

Database Environment (.db_env)

echo "DB_URL=jdbc:postgresql://postgres:5432/explorer
DB_USER=postgres
DB_PASS=1234" > .db_env

Redis Environment (.redis_env)

echo "REDIS_URL=redis://localhost:6379" > .redis_env

3. Setup Explorer Frontend

git clone https://github.com/ergoplatform/explorer-frontend
sudo mkdir -p front/build
sudo cp -r explorer-frontend/build /front
sudo mkdir front/config
sudo vi front/config/app.config.js
sudo vi docker-compose.yaml

4. Setup Explorer Backend

git clone https://github.com/ergoplatform/explorer-backend
cd explorer-backend/modules
# Configure services
vi chain-grabber/src/main/resources/application.conf
vi explorer-api/src/main/resources/application.conf
vi utx-tracker/src/main/resources/application.conf
vi utx-broadcaster/src/main/resources/application.conf
# Create docker network
docker network create explorer-network

5. Booting Services

Configure other services (nginx, postgres, redis, adminer) according to their documentation

# Run from /explorer/
docker-compose up -d
# To make sure everything is up and working
docker ps -a

6. Configuration Files

app.config.js

Paste the following into app.config.js. apiUrl points to your backend API, environments.url points to your frontend:

var __APP_CONFIG__ = {
  apiUrl: 'https://api.ergoplatform.org',
  alternativeLogo: false,
  environments: [
    {
      name: 'Mainnet',
      url: 'https://explorer.ergoplatform.org',
    },
  ],
};

if (typeof global !== 'undefined') {
  global.__APP_CONFIG__ = __APP_CONFIG__;
}

docker-compose.yaml

Complete Docker Compose configuration:

version: '3.4'

services:
  nginx:
    image: nginx:1.17.9-alpine
    ports:
      - "443:443"
    volumes:
      - /data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - /data/nginx/ssl:/etc/ssl:ro
      - /explorer/front/build:/usr/share/nginx/html
      - /explorer/front/config:/usr/share/nginx/config
    networks:
      - explorer-network
    depends_on:
      - api

  postgres:
    image: postgres:11-alpine
    shm_size: 2g
    environment:
      POSTGRES_PASSWORD: <password>
    ports:
      - "5432:5432"
    volumes:
      - /data/postgres:/var/lib/postgresql/data:rw
    networks:
      - explorer-network

  redis:
    image: redis:latest
    restart: always
    command: ["redis-server"]
    ports:
      - "127.0.0.1:6379:6379"
    volumes:
      - /data/redis:/usr/local/etc/redis
    networks:
      - explorer-network

  adminer:
    image: adminer:4-standalone
    ports:
      - "8082:8080"
    networks:
      - explorer-network

  grabber:
    image: oskin1/chain-grabber:latest
    networks:
      - explorer-network
    env_file:
      - .db_env
    depends_on:
      - postgres

  api:
    image: oskin1/explorer-api:latest
    ports:
      - "8081:8081"
    networks:
      - explorer-network
    env_file:
      - .db_env
    depends_on:
      - postgres
      - redis

  utx-tracker:
    image: oskin1/utx-tracker:latest
    networks:
      - explorer-network
    env_file:
      - .db_env
    depends_on:
      - postgres

  utx-broadcaster:
    image: oskin1/utx-broadcaster:latest
    networks:
      - explorer-network
    env_file:
      - .redis_env
    depends_on:
      - redis

networks:
  explorer-network:
    external: true

Manual Instance

Prerequisites

sudo apt update
sudo apt full-upgrade

## SDKMAN
curl -s "https://get.sdkman.io" | bash
sdk install java
sdk install sbt

## PostgreSQL
sudo apt install postgresql
sudo su postgres
createuser ergo -P --interactive

Load Database Schema

psql
create database explorer;
\c explorer;
\i /explorer-backend/modules/explorer-core/src/main/resources/db/V9__Schema.sql

Build Services

docker build explorer-backend/modules/chain-grabber/
docker build explorer-backend/modules/explorer-api/
docker build explorer-backend/modules/utx-tracker/
docker build explorer-backend/modules/utx-broadcaster/