How to Set Up an Ethereum Full Node with Geth v1.13.14 and Prysm Consensus Client

·

Setting up a fully synchronized Ethereum node is a powerful step toward participating in the decentralized network—whether for development, validation, or simply running your own infrastructure. This guide walks you through deploying a complete Ethereum execution and consensus layer setup using Geth v1.13.14 as the execution client and Prysm as the consensus client.

We'll cover everything from server requirements to configuration, synchronization checks, and even systemd service automation—all optimized for reliability, performance, and long-term operation.


Server Requirements

Before diving into installation, ensure your server meets the necessary hardware and software specs:

👉 Learn how to securely manage blockchain node infrastructure with advanced tools.


Step 1: Install and Configure Geth (Execution Layer)

The Geth client handles transaction processing, smart contract execution, and maintains the Ethereum state—this is known as the execution layer.

Download Geth v1.13.14

Navigate to your working directory and download the correct binary:

cd /data/eth
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.14-2bd6bd01.tar.gz
tar -xf geth-linux-amd64-1.13.14-2bd6bd01.tar.gz
mv geth-linux-amd64-1.13.14-2bd6bd01 bin
mkdir -p chaindata

Ensure the binary is executable:

chmod +x bin/geth

Start Geth with Required Flags

Use screen to run Geth in a persistent session:

screen -S geth
./bin/geth \
--cache 10240 \
--http \
--http.api web3,eth,net,personal,txpool,engine,admin \
--http.addr 0.0.0.0 \
--http.port 3545 \
--datadir /data/eth/chaindata \
--allow-insecure-unlock \
--rpc.allow-unprotected-txs \
--authrpc.addr 0.0.0.0 \
--authrpc.port 8551 \
--authrpc.vhosts localhost \
--maxpeers=300 \
--authrpc.jwtsecret /data/consensus/prysm/jwt.hex

Press Ctrl+A, then D to detach from the screen session.

🔍 Why These Flags Matter:

  • --authrpc.jwtsecret: Enables secure communication between execution (Geth) and consensus (Prysm) layers.
  • --http.api: Exposes essential RPC methods for dApp interaction.
  • --cache 10240: Allocates ~10GB RAM for faster state access.
  • --maxpeers=300: Increases peer connections for robust networking.

Step 2: Install and Run Prysm (Consensus Layer)

With the Merge upgrade, Ethereum now operates on a dual-client model: one for execution (like Geth), and one for consensus (like Prysm). The consensus layer validates blocks and participates in staking.

Install Screen Utility

To keep Prysm running in the background:

On CentOS:

yum update && yum upgrade -y
yum -y install screen

On Ubuntu:

apt-get update && apt-get upgrade -y
apt-get -y install screen

Set Up Prysm and Generate JWT Secret

Create directories and download Prysm:

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

Generate the JWT secret used for inter-client authentication:

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

This creates a file at /data/consensus/prysm/jwt.hex, which both Geth and Prysm will use to authenticate securely.


Launch Prysm Beacon Chain

Start the beacon node in a screen session:

screen -S prysm
./prysm.sh beacon-chain \
--accept-terms-of-use \
--execution-endpoint=http://localhost:8551 \
--jwt-secret=/data/consensus/prysm/jwt.hex \
--checkpoint-sync-url=https://beaconstate.info \
--genesis-beacon-api-url=https://beaconstate.info \
--datadir=/data/execution

Again, press Ctrl+A, then D to detach.

✅ Using checkpoint-sync-url dramatically reduces sync time—from days to under an hour—by syncing from a recent finalized checkpoint instead of genesis.

Step 3: Monitor Node Synchronization

Once both clients are running, verify synchronization status.

Check Geth Sync Status via Console

Attach to the Geth console:

./bin/geth attach /data/eth/chaindata/geth.ipc

Run these commands:

> eth.syncing
false
> eth.blockNumber
19331520

If eth.syncing returns false, Geth has fully synced. Compare eth.blockNumber with Etherscan to confirm it matches the latest block height.

Query Block Height via RPC

Use curl to check remotely:

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

Sample response:

{"jsonrpc":"2.0","id":1,"result":"0x126f9ca"}

Convert 0x126f9ca from hexadecimal to decimal (e.g., using an online converter):

Compare this with Etherscan’s current block—when they align, your node is fully synced.

👉 Discover how professional-grade tools streamline node management and monitoring.


Step 4: Automate Startup with Systemd (Optional but Recommended)

For production use, convert Geth into a managed system service.

Create Systemd Service File

Create the service configuration:

sudo vim /etc/systemd/system/geth.service

Add the following content:

[Unit]
Description=Ethereum Geth Node
After=network.target

[Service]
User=root
Group=root
Type=simple
Restart=always
RestartSec=5
ExecStart=/data/eth/bin/geth \
  --cache 10240 \
  --http \
  --http.addr "0.0.0.0" \
  --http.port 3545 \
  --http.api "web3,eth,net,personal,txpool,engine,admin" \
  --datadir /data/eth/chaindata \
  --allow-insecure-unlock \
  --rpc.allow-unprotected-txs \
  --authrpc.addr 0.0.0.0 \
  --authrpc.port 8551 \
  --authrpc.vhosts localhost \
  --maxpeers=300 \
  --authrpc.jwtsecret /data/consensus/prysm/jwt.hex

[Install]
WantedBy=multi-user.target

Enable and Start the Service

sudo systemctl enable geth
sudo systemctl start geth

Check status:

sudo systemctl status geth

This ensures your node restarts automatically after reboots or crashes.


Frequently Asked Questions (FAQ)

Q: Why do I need both Geth and Prysm?

A: After The Merge, Ethereum uses a two-layer architecture:

Q: How long does it take to sync Geth?

A: With fast sync enabled (default), initial sync can take 6–24 hours, depending on disk speed and bandwidth. Using checkpoint sync for Prysm reduces consensus layer sync time to under an hour.

Q: What is the purpose of the JWT secret?

A: The JWT token enables secure communication between the execution client (Geth) and consensus client (Prysm). It prevents unauthorized access to the Engine API used during block production.

Q: Can I use a different consensus client?

A: Yes! Alternatives include Lighthouse, Teku, or Nimbus. Configuration differs slightly, but all require a JWT secret and execution endpoint integration.

Q: Is 3TB of storage sufficient?

A: Yes—for now. As of early 2025, Ethereum’s full state requires ~2–3TB with snap sync. Plan for expansion as chain growth continues.

Q: Should I expose HTTP ports publicly?

A: Only if needed for external dApps or services. If so, restrict access via firewall rules (iptables or ufw) to trusted IPs to prevent abuse.


Final Thoughts

Running your own Ethereum node empowers you with trustless access to the blockchain, enhances network decentralization, and supports participation in staking or development.

With Geth v1.13.14 and Prysm, you’ve deployed a battle-tested stack capable of handling full validation, RPC services, and future upgrades.

Whether you're building decentralized applications, auditing transactions, or preparing for staking, maintaining your own infrastructure gives you control, privacy, and reliability unmatched by third-party providers.

👉 Explore next-generation crypto platforms designed for developers and validators alike.