Running your own Ethereum (ETH) node empowers you with direct access to the blockchain, enhances network decentralization, and allows you to interact with smart contracts and dApps without relying on third-party services. Since Ethereum's transition to Proof of Stake (PoS), operating a full node requires both an execution client and a consensus client. This guide walks you through setting up a fully functional Ethereum node using Geth and Lighthouse, optimized for performance and reliability.
Whether you're a developer, blockchain enthusiast, or validator-in-training, this tutorial covers everything from hardware requirements to synchronization verification—no staking required.
Why Run an Ethereum Node?
Operating a node strengthens the Ethereum ecosystem by increasing redundancy, security, and censorship resistance. With your own node:
- You validate transactions independently
- Gain low-latency access to blockchain data
- Enable secure interactions with wallets and dApps
- Prepare for future validator roles
Core keywords naturally integrated: Ethereum node setup, run Ethereum node, Geth and Lighthouse, ETH full node, Ethereum execution client, consensus client configuration, node synchronization, blockchain infrastructure.
System Requirements for Running an Ethereum Node
To ensure smooth operation, meet or exceed these minimum specifications:
- Operating System: Linux (Ubuntu 22.04 LTS recommended), macOS, or Windows
- CPU: 4+ core high-speed processor
- RAM: 16 GB or more (32+ GB preferred for fast sync)
- Storage: 1 TB+ NVMe SSD (faster read/write speeds are critical)
- Bandwidth: 25 MB/s upload/download (1 Gbps ideal)
💡 This guide uses Ubuntu 22.04.2 LTS with 16-core CPU, 128 GB DDR5 ECC RAM, dual 1.92 TB NVMe SSDs, and 1 Gbps bandwidth in Germany for optimal performance.
👉 Discover how running a node can improve your blockchain development workflow.
While cloud providers like AWS, Google Cloud, or dedicated servers work well, prioritize low-latency networking and sustained disk I/O performance.
Step 1: Server Environment Setup
Begin by updating your system packages.
Update System Packages
For Ubuntu:
sudo apt update && sudo apt dist-upgradeFor CentOS (if used):
yum -y upgrade⚠️ Ifaptfails, useapt-getinstead.
Install Essential Tools
Install necessary utilities for downloading, compiling, and managing processes:
sudo apt install wget git screen gcc automake autoconf libtool make unzip liblz4-tool aria2 vimExplanation of key tools:
wget: Download binariesgit: Fetch source code if neededscreen: Run long-lived processes in detached sessionsliblz4-tool: Decompress LZ4-encoded filesvim: Edit configuration files
Step 2: Install the Execution Client – Geth
The execution client handles transaction processing and state execution. We’ll use Geth (Go Ethereum).
Create Directory Structure
cd /
sudo mkdir -p /eth/kuaizhao
cd /ethWe’ll store binaries in /eth and snapshot data in /eth/kuaizhao.
Download and Extract Geth
Visit geth.ethereum.org/downloads or download directly:
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.12.0-e501b3b0.tar.gz
tar -zxvf geth-linux-amd64-1.12.0-e501b3b0.tar.gz
rm -rf geth-linux-amd64-1.12.0-e501b3b0.tar.gz
mv geth-linux-amd64-1.12.0-e501b3b0 gethEnsure the binary is executable:
chmod +x gethStep 3: Install the Consensus Client – Lighthouse
Lighthouse is a Rust-based consensus client that manages PoS duties like block proposal and attestation.
Download and Extract Lighthouse
cd /eth
wget https://github.com/sigp/lighthouse/releases/download/v4.2.0/lighthouse-v4.2.0-x86_64-unknown-linux-gnu.tar.gz
tar -zxvf lighthouse-v4.2.0-x86_64-unknown-linux-gnu.tar.gz
rm -rf lighthouse-v4.2.0-x86_64-unknown-linux-gnu.tar.gz
chmod +x lighthouseStep 4: Configure Environment Variables
Add Geth and Lighthouse to your system PATH for easy command access.
Edit /etc/profile:
sudo nano /etc/profileAppend these lines at the end:
export PATH=/eth:$PATH
export PATH=/eth/geth:$PATHApply changes:
source /etc/profileVerify installation:
geth version
lighthouse --versionYou should see version outputs confirming successful setup.
Step 5: Generate JWT Secret for Engine Authentication
The execution and consensus layers communicate via the Engine API, secured with a JWT token.
Create the secret:
sudo mkdir -p /secrets
openssl rand -hex 32 | tr -d "\n" | sudo tee /secrets/jwt.hexThis file (/secrets/jwt.hex) will be referenced by both clients.
Step 6: Launch the Execution Client (Geth)
Start Geth with flags optimized for fast sync and external connectivity:
geth \
--cache 32768 \
--datadir /data/ethereum \
--http \
--http.addr 0.0.0.0 \
--http.api "eth,net,engine,web3" \
--ws \
--ws.addr 0.0.0.0 \
--ws.api "eth,net,engine,web3" \
--txlookuplimit 0 \
--rpc.gascap 0 \
--rpc.txfeecap 0 \
--authrpc.addr 0.0.0.0 \
--authrpc.port 8551 \
--authrpc.vhosts "*" \
--authrpc.jwtsecret /secrets/jwt.hex \
--rpc.allow-unprotected-txs \
--maxpeers 2000🔍 Use
screenornohupto keep the process running after SSH disconnects:screen -S geth-node # Run the above command inside the screen session
By default, Geth uses snapshot sync—fast and sufficient for most users.
👉 Learn how node operators gain deeper insights into Ethereum's real-time activity.
Step 7: Launch the Consensus Client (Lighthouse)
Now start the beacon node:
lighthouse bn \
--network mainnet \
--execution-endpoint http://127.0.0.1:8551 \
--execution-jwt /secrets/jwt.hex \
--checkpoint-sync-url https://sync-mainnet.beaconcha.in \
--disable-deposit-contract-sync \
--httpKey parameters explained:
--execution-endpoint: Connects to Geth’s Auth RPC (port 8551)--execution-jwt: Authenticates using the shared JWT secret--checkpoint-sync-url: Enables fast sync from a recent finalized checkpoint (~hours vs weeks)--http: Exposes beacon API onlocalhost:5052
Checkpoint sync sources: https://eth-clients.github.io/checkpoint-sync-endpoints/
👉 Explore advanced configurations for high-performance node operation.
Step 8: Monitor Node Synchronization
Attach to Geth’s JavaScript console to check sync status:
geth attach http://127.0.0.1:8545Or via IPC:
geth attach /data/ethereum/geth.ipcRun these commands:
eth.syncing // Returns false when synced; shows progress otherwise
net.peerCount // Number of connected peers
eth.blockNumber // Current block heightSample output during sync:
{
"currentBlock": 14290861,
"highestBlock": 14297354,
"startingBlock": 14270385
}Once eth.syncing returns false, your node is fully synchronized.
🕒 Initial sync typically takes 3–6 hours with fast hardware and good bandwidth.
Check logs if blockNumber shows zero temporarily—it may take time before catching up.
Frequently Asked Questions (FAQ)
Q: Do I need to stake ETH to run a node?
No. This setup runs a full node for data access and development purposes only—no staking required.
Q: Can I use other client combinations?
Yes! Popular alternatives include Nethermind + Teku or Besu + Prysm. Just ensure compatibility between execution and consensus layers.
Q: What if my sync gets stuck?
Restart the clients, verify disk space (df -h), and confirm network connectivity. Use checkpoint sync to resume quickly.
Q: Is it safe to expose HTTP/RPC endpoints?
Only expose APIs internally or behind a firewall. Avoid public exposure unless reverse-proxied securely.
Q: How much storage will the node use?
As of 2025, expect 800 GB–1.2 TB depending on pruning settings. Archive nodes require significantly more space.
Q: Can I run this on a home server?
Technically yes, but residential internet often has upload limits and dynamic IPs, which can hinder peer connections. A VPS is recommended for reliability.
With your Ethereum node now active, you’re part of the decentralized backbone of Web3. Maintain regular updates to both clients to stay secure and compatible with network upgrades.