Blockchain 10 min read

How to Set Up an Ethereum Test Node on Ubuntu: Step‑by‑Step Guide

This guide walks you through why a test node is essential, the recommended server hardware, required software, and detailed step‑by‑step commands to install Geth and Prysm on Ubuntu, configure JWT authentication, create systemd services, and monitor a fully synchronized Ethereum Holesky test network.

Ops Development & AI Practice
Ops Development & AI Practice
Ops Development & AI Practice
How to Set Up an Ethereum Test Node on Ubuntu: Step‑by‑Step Guide

Why Run a Test Node?

Developing on Ethereum mainnet requires real ETH for gas, which is costly and risky. A test node connects to test networks such as Sepolia or Holesky, which use valueless test tokens, providing a safe sandbox for deploying and testing contracts.

Recommended Server Hardware

CPU : at least 4 cores.

RAM : minimum 16 GB, preferably 32 GB.

Storage : SSD (NVMe preferred). Minimum 300 GB, 1–2 TB recommended for future growth.

Network : stable 20–25 Mbps connection with high‑quota or unlimited traffic.

Software Requirements

Operating System : Ubuntu Server 22.04 LTS or 24.04 LTS.

Execution Client : Geth, Nethermind, or Erigon.

Consensus Client : Prysm, Lighthouse, or Teku.

Step‑by‑Step Installation

1. Prepare the Server

Connect via SSH and update the system:

ssh your_username@your_server_ip
sudo apt update && sudo apt upgrade -y

Create a dedicated non‑root user for the node:

sudo adduser ethereum
sudo usermod -aG sudo ethereum
su - ethereum

2. Install the Execution Client (Geth)

Add the Ethereum PPA and install Geth:

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt update
sudo apt install geth -y

Verify the installation:

geth version

3. Install the Consensus Client (Prysm)

Create a directory and download the install script:

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

4. Generate a JWT Secret

Create a shared secret for authenticated RPC communication between the execution and consensus clients:

mkdir -p /home/ethereum/jwt
openssl rand -hex 32 | tr -d "
" | sudo tee /home/ethereum/jwt/secret.hex

5. Create systemd Service Files

Geth service ( /etc/systemd/system/geth.service)

[Unit]
Description=Go Ethereum Execution Client (Holesky)
After=network.target
Wants=network.target

[Service]
User=ethereum
Group=ethereum
Type=simple
Restart=always
RestartSec=5
ExecStart=geth \
  --holesky \
  --http \
  --http.addr=0.0.0.0 \
  --http.api=eth,net,web3,engine \
  --authrpc.jwtsecret=/home/ethereum/jwt/secret.hex \
  --datadir /home/ethereum/geth-data

[Install]
WantedBy=default.target

Prysm service ( /etc/systemd/system/prysm.service)

[Unit]
Description=Prysm Consensus Client (Holesky)
After=geth.service
Wants=geth.service

[Service]
User=ethereum
Group=ethereum
Type=simple
Restart=always
RestartSec=5
ExecStart=/home/ethereum/prysm/prysm.sh beacon-chain \
  --holesky \
  --datadir=/home/ethereum/prysm-data \
  --jwt-secret=/home/ethereum/jwt/secret.hex \
  --rpc-provider=127.0.0.1:8551 \
  --grpc-gateway-host=0.0.0.0 \
  --execution-endpoint=http://127.0.0.1:8551 \
  --accept-terms-of-use \
  --suggested-fee-recipient=YOUR_FEE_RECIPIENT_ADDRESS

[Install]
WantedBy=default.target

6. Start and Monitor the Node

Reload systemd and start the services:

sudo systemctl daemon-reload
sudo systemctl start geth
sudo systemctl start prysm

Check status and logs:

# Geth status
sudo systemctl status geth
# Geth logs
sudo journalctl -fu geth.service
# Prysm logs
sudo journalctl -fu prysm.service

When synchronization catches up with the Holesky head, the node is fully synced. Verify with a JSON‑RPC call, e.g.:

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

Practical Tips

Sync mode : Use the default "snap" mode for fast sync; choose "full" if you need the complete historical state.

Firewall : Open TCP/UDP port 30303 to allow peer discovery.

Maintenance : Regularly update the OS and client binaries to keep the node secure and stable.

Conclusion

Setting up an Ethereum test node involves several steps but is achievable with the right hardware and careful configuration. A self‑hosted node provides a cost‑free environment for blockchain development and deeper understanding of Ethereum’s architecture.

blockchainEthereumUbuntuNode SetupPrysmTestnet
Ops Development & AI Practice
Written by

Ops Development & AI Practice

DevSecOps engineer sharing experiences and insights on AI, Web3, and Claude code development. Aims to help solve technical challenges, improve development efficiency, and grow through community interaction. Feel free to comment and discuss.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.