ETH Full Node Setup Guide (2025)

·

Setting up an Ethereum full node is a powerful step toward participating in the decentralized web. Whether you're a developer, validator, or blockchain enthusiast, running your own node gives you direct access to the Ethereum network—without relying on third-party services. This comprehensive guide walks you through the entire process of deploying a fully synchronized Ethereum execution client (Geth) and consensus client (Prysm) on a Linux server, optimized for performance and reliability.


Why Run an Ethereum Full Node?

Running a full node allows you to independently verify transactions, contribute to network security, and support decentralization. With both execution and consensus layers active, your node participates in block validation and helps maintain the integrity of the Ethereum blockchain.

This guide focuses on setting up a dual-client architecture, which has become standard since The Merge. We'll use:

We’ll also ensure secure communication between them using JWT authentication.


Recommended Server Specifications

To run an Ethereum full node smoothly, especially during initial sync, your server must meet certain hardware and network requirements. Below are the minimum recommended specifications:

Operating System: Linux (Ubuntu 22.04 LTS preferred)
CPU: 16 cores (32 threads recommended)
RAM: 128 GB
Bandwidth: 1 Gbps symmetric (upload/download)
Storage: >4 TB SSD (NVMe preferred), dedicated data disk
Region: USA or low-latency geographic zone
💡 The setup detailed here used Ubuntu 22.04, 32-core CPU with 64 threads, 128GB RAM, 4TB SSD, and 1Gbps symmetric bandwidth—ideal for fast synchronization and long-term stability.

👉 Discover how running a node enhances your blockchain experience and unlocks advanced tools.


Step 1: Prepare Your System Environment

Before installing any Ethereum clients, ensure your system is updated and equipped with essential development tools.

Update System Packages

sudo apt update && sudo apt upgrade -y

Install Git

sudo apt install git -y

Install Go (Golang)

Go is required to compile the Geth client from source. You need Go 1.19 or higher.

wget https://go.dev/dl/go1.19.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

Add Go to your shell profile (~/.bashrc or ~/.profile) to make it persistent:

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

Verify installation:

go version

Expected output:

go version go1.19 linux/amd64
🔧 If the above fails, manually compile and install the latest version from golang.org.

Install Screen (Session Manager)

Use screen to keep your node processes running in the background.

sudo apt install screen -y

Step 2: Deploy Ethereum Clients

We'll now install both the consensus client (Prysm) and the execution client (Geth).

Create Directory Structure

cd /
sudo mkdir eth
cd eth
sudo mkdir consensus execution

Install Prysm (Consensus Client)

Navigate to the consensus directory and download Prysm:

cd /eth/consensus/prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh

Generate JWT secret for secure communication between clients:

./prysm.sh beacon-chain generate-auth-secret

This creates a jwt.hex file at /eth/consensus/prysm/jwt.hex.


Install Geth (Execution Client)

Clone the official Go-Ethereum repository and build Geth from source:

cd /eth/execution
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth

After compilation, the binary will be located at:

./build/bin/geth

👉 Learn how self-hosted nodes empower true ownership of digital assets.


Step 3: Launch the Beacon Chain Client (Prysm)

Start Prysm’s beacon chain in a detached screen session:

screen -S prysm
./prysm.sh beacon-chain \
  --execution-endpoint=http://localhost:8551 \
  --jwt-secret=/eth/consensus/prysm/jwt.hex

Press Ctrl+A, then D to detach from the session while keeping it running.

This connects Prysm to your local Geth instance via the execution endpoint and uses JWT for secure authentication.


Step 4: Launch the Execution Client (Geth)

Now start Geth with appropriate flags for performance and inter-client communication.

screen -S eth
./geth \
  --cache 10240 \
  --datadir ./node \
  --ws \
  --ws.port 8546 \
  --ws.addr 0.0.0.0 \
  --ws.origins '*' \
  --authrpc.addr localhost \
  --authrpc.port 8551 \
  --authrpc.vhosts localhost \
  --maxpeers=300 \
  --authrpc.jwtsecret /eth/consensus/prysm/jwt.hex \
  --state.scheme=path

Parameter Explanation

Detach from screen with Ctrl+A, then D.


Step 5: Monitor Node Synchronization Status

Once both clients are running, monitor their sync progress.

Attach to Geth Console

./geth attach http://localhost:8545
⚠️ If you changed the RPC port, adjust accordingly.

Check synchronization status:

> eth.syncing

Sample output:

{
  currentBlock: 14290861,
  highestBlock: 14297354,
  knownStates: 297473485,
  pulledStates: 297473485,
  startingBlock: 14270385
}

If eth.syncing returns false, your node is fully synced.

Additional useful commands:

> net.peerCount       // View number of connected peers
> eth.blockNumber     // Get current block height

Common Issues & Troubleshooting

Node synchronization can take time—typically 48 to 72 hours under optimal conditions. Here are common issues and solutions:

Issue 1: Geth Stalls at a Specific Block

Issue 2: Prysm Waits Indefinitely for Execution Layer

Issue 3: Slow Sync Speed

📌 Pro Tip: Use a geographically close VPS provider to reduce latency. Our setup in the USA reached full sync within ~72 hours.

Frequently Asked Questions (FAQ)

Q1: How long does it take to sync an Ethereum full node?

Initial sync typically takes 2–4 days with high-end hardware and fast storage. Factors like SSD type, RAM, and network speed significantly affect duration.

Q2: Can I run this setup on consumer hardware?

Yes, but syncing may take over a week on lower-spec machines. For reliable operation, stick to recommended specs.

Q3: What is the purpose of the JWT secret?

The JWT secret enables secure communication between Geth (execution) and Prysm (consensus), preventing unauthorized access to the authenticated RPC interface.

Q4: Do I need to open specific firewall ports?

Yes:

Configure your firewall accordingly:

sudo ufw allow 30303/tcp
sudo ufw allow 30303/udp
sudo ufw allow 13000/tcp
sudo ufw allow 12000/udp

Q5: Is this setup suitable for staking?

Yes! Once synced, you can connect a validator client to Prysm and begin staking ETH. Ensure your system runs 24/7 with stable power and internet.

Q6: Where can I verify my node's public status?

Use Etherscan's Node Tracker or similar tools to check if your node appears in the network.


Final Thoughts

Running an Ethereum full node is not just technical—it’s a commitment to decentralization. With proper configuration, your node becomes a trusted gateway to the blockchain, empowering you with privacy, control, and participation.

Whether you're building dApps, validating blocks, or simply exploring Web3, a self-hosted node puts you in full control.

👉 Explore next-generation crypto tools that work seamlessly with your full node setup.


Core Keywords: Ethereum full node setup, Geth node configuration, Prysm beacon chain, run Ethereum node, ETH consensus client, Ethereum execution client, Linux node deployment, blockchain synchronization