Back to Infrastructure

Node Setup Guide

Complete guide to running your own Ethereum node. Choose execution and consensus clients, configure hardware, and maintain a fully synced node.

Hardware Requirements

Storage

2+ TB

NVMe SSD recommended

RAM

16+ GB

32 GB for archive

CPU

4+ Cores

8 cores recommended

Network

25+ Mbps

Unmetered preferred

Execution Clients

The execution client (formerly "Eth1 client") processes transactions and executes smart contracts.

Geth

Go

The original and most widely used Ethereum client

Storage

~900 GB (full)

RAM

16 GB+

Sync Time

~1 week

Pros
  • Most documentation
  • Battle-tested
  • Strong community
Cons
  • Higher resource usage
  • Slower sync

Erigon

Go

Optimized for archive node operation and fast sync

Storage

~2 TB (archive)

RAM

16 GB+

Sync Time

~3-5 days

Pros
  • Fastest sync
  • Efficient storage
  • Archive-friendly
Cons
  • Less documentation
  • Different RPC compatibility

Reth

Rust

New high-performance client built in Rust

Storage

~900 GB

RAM

8 GB+

Sync Time

~2-3 days

Pros
  • Very fast
  • Low resource usage
  • Modern codebase
Cons
  • Newer/less tested
  • Smaller community

Nethermind

C#

Enterprise-focused client with extensive features

Storage

~900 GB

RAM

16 GB+

Sync Time

~1 week

Pros
  • Rich metrics
  • Good for enterprise
  • Active development
Cons
  • Higher memory usage
  • More complex setup

Consensus Clients

The consensus client (beacon node) handles proof-of-stake consensus and coordinates with validators.

Prysm

Go
~40% usage

Most popular consensus client with extensive tooling

Lighthouse

Rust
~35% usage

High-performance client focused on security

Teku

Java
~15% usage

Enterprise-grade client by ConsenSys

Nimbus

Nim
~10% usage

Lightweight client optimized for resource-constrained devices

Client Diversity Matters

Running minority clients helps network security. If a bug affects the majority client, it could cause issues for the entire network. Consider using less common client combinations.

Setup Process

1

Hardware Preparation

Ensure you have adequate hardware: SSD storage, sufficient RAM, stable internet

2

Install Dependencies

Install Docker, or build tools if compiling from source

3

Configure Execution Client

Set up Geth, Erigon, or your chosen execution client

4

Configure Consensus Client

Set up Prysm, Lighthouse, or your chosen beacon chain client

5

Connect Clients

Link execution and consensus clients via JWT authentication

6

Wait for Sync

Monitor sync progress and wait for full synchronization

Quick Start with Docker

docker-compose.yml
version: "3.8"

services:
  # Execution Client (Geth)
  geth:
    image: ethereum/client-go:stable
    container_name: geth
    restart: unless-stopped
    ports:
      - "8545:8545"  # HTTP RPC
      - "8546:8546"  # WebSocket
      - "8551:8551"  # Auth RPC (for consensus client)
      - "30303:30303"  # P2P
    volumes:
      - geth-data:/root/.ethereum
      - ./jwt.hex:/jwt.hex:ro
    command:
      - --http
      - --http.addr=0.0.0.0
      - --http.api=eth,net,web3,engine
      - --http.vhosts=*
      - --http.corsdomain=*
      - --ws
      - --ws.addr=0.0.0.0
      - --ws.api=eth,net,web3
      - --authrpc.addr=0.0.0.0
      - --authrpc.port=8551
      - --authrpc.vhosts=*
      - --authrpc.jwtsecret=/jwt.hex
      - --syncmode=snap

  # Consensus Client (Lighthouse)
  lighthouse:
    image: sigp/lighthouse:latest
    container_name: lighthouse
    restart: unless-stopped
    depends_on:
      - geth
    ports:
      - "9000:9000"  # P2P
      - "5052:5052"  # HTTP API
    volumes:
      - lighthouse-data:/root/.lighthouse
      - ./jwt.hex:/jwt.hex:ro
    command:
      - lighthouse
      - beacon_node
      - --network=mainnet
      - --execution-endpoint=http://geth:8551
      - --execution-jwt=/jwt.hex
      - --http
      - --http-address=0.0.0.0
      - --checkpoint-sync-url=https://beaconstate.info

volumes:
  geth-data:
  lighthouse-data:

1. Generate JWT Secret

openssl rand -hex 32 > jwt.hex

2. Start the Node

docker-compose up -d

Monitoring Your Node

Essential Checks

Sync Status

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'

Block Number

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

Peer Count

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'

Lighthouse Status

curl http://localhost:5052/eth/v1/node/syncing

Need Help with Node Setup?

Join our community or use ChainLens managed infrastructure for hassle-free access.