Skip to content

Setup a Goërli node

This is a step-by-step guide to setting up a full node on the Goërli Testnet to act as the Layer 1 (L1).

Follow the steps below to get started.


Before starting the setup, you will need at least 500 GB of free disk space to allocate a full Goerli node.

Next, make sure you have the following commands installed:

  • wget
  • jq
  • docker
sudo apt update -y
sudo apt install -y wget jq

sudo usermod -aG docker $USER
newgrp docker && newgrp $USER

Additionally, you will need an L1 Goerli address to proceed with the setup that will act as the suggested fee recipient. Make sure you have this address provisioned.


  1. Create a directory for your Goerli node:
mkdir -p ~/goerli-node/docker-volumes/{geth,prysm}
  1. Create a docker-compose.yml file and open it for editing:
  cd ~/goerli-node/
  vim docker-compose.yml
  1. Copy and paste the following content into the docker-compose.yml file:
    image: "ethereum/client-go:stable"
    container_name: goerli-execution
    command: |
      --http.api eth,net,engine,admin
      - "./docker-volumes/geth:/root/.ethereum"
      - "./config.toml:/app/config.toml"
      - "${L1_RPC_PORT}:8545"
      - ""

    image: ""

    container_name: goerli-consensus
    command: |
      - "./docker-volumes/prysm:/data"
      - "./docker-volumes/geth:/geth"
      - ""
      - ""
      - ""
      - ""
      - geth
  1. Save and Close the docker-compose.yml file.

  2. Create an .env file and open it for editing:

cd ~/goerli-node/
vim .env
  1. Set the following environment variables in the .env file:
 L1_SUGGESTED_FEE_RECIPIENT_ADDR=0x  # Put your Goerli account address
  1. Save and Close the .env file.

  2. Add geth config.toml file with following values to increase RPC timeouts

cd ~/goerli-node/
vim config.toml
ReadTimeout = 600000000000
ReadHeaderTimeout = 600000000000
WriteTimeout = 600000000000
IdleTimeout = 1200000000000


  1. Start the compose services:
cd ~/goerli-node/
docker compose --env-file /root/goerli-node/.env -f /root/goerli-node/docker-compose.yml up -d
  1. Check the logs of the prysm service to monitor the synchronization progress:
docker compose --env-file /root/goerli-node/.env -f /root/goerli-node/docker-compose.yml logs -f prysm --tail 20

Wait for the initial sync to complete. You will see log messages similar to the following indicating the progress:

  #goerli-consensus  | time="2023-06-19 09:39:44" level=info msg="Synced up to slot 5888296" prefix=initial-sync
  1. Check the logs of the geth service to monitor the initial download and sync progress:
docker compose --env-file /root/goerli-node/.env -f /root/goerli-node/docker-compose.yml logs -f geth --tail 20
  • This process may take a couple of hours. Look for log messages similar to the following indicating the progress:
#goerli-execution  | INFO [06-19|09:43:24.954] Syncing beacon headers                   downloaded=25600 left=9,177,918 eta=1h5m31.860s
#goerli-execution  | INFO [06-19|10:09:19.488] Syncing: state download in progress      synced=0.30% state=331.34MiB [email protected] slots=1,112,[email protected] [email protected] >


Once both service logs show the sync completion and new blocks are being updated, you can verify the correctness of the RPC by making a call. For example, to get the current block number, use the following command:

printf "%d\n" $(curl -s -X POST --header "Content-Type: application/json"  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' http://localhost:8845 | jq -r .result)

If everything is correctly set up, you should see the current block number returned.

Congratulations! You have successfully set up your own full node on the Goerli Testnet. You can now use this node to perform transactions and interact with the Goerli network.

Last update: January 9, 2024
Authors: EmpieichO (64.29%), Nadim Kobeissi (8.93%), Thiên Toán (26.79%)