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.
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 -yCreate a dedicated non‑root user for the node:
sudo adduser ethereum
sudo usermod -aG sudo ethereum
su - ethereum2. 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 -yVerify the installation:
geth version3. 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.sh4. 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.hex5. 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.targetPrysm 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.target6. Start and Monitor the Node
Reload systemd and start the services:
sudo systemctl daemon-reload
sudo systemctl start geth
sudo systemctl start prysmCheck status and logs:
# Geth status
sudo systemctl status geth
# Geth logs
sudo journalctl -fu geth.service
# Prysm logs
sudo journalctl -fu prysm.serviceWhen 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:8545Practical 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.
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.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
