Beginner's Guide: Setting Up a Docker Container for Ethereum Node ================================================================= Introduction ------------ Running an Ethereum node might sound complicated, but don't worry—this beginner-friendly guide will walk you through everything step by step. We'll set up a Docker container, install the necessary software, and configure both Geth (Ethereum client) and Lodestar (Ethereum consensus client). By the end, you'll have a fully functional Ethereum node running! --- Step 1: Create a Docker Container --------------------------------- ### What is Docker? Docker allows you to run applications in isolated environments called containers. Think of it as a mini virtual computer running inside your system. ### Creating the Container Run the following command in your terminal to create a container based on Ubuntu Jammy: ``` docker run -dit --name eth_node --privileged --cgroupns=host --restart unless-stopped --network host ubuntu:jammy ``` Now, enter the container to start working inside it: ``` docker exec -it eth_node bash ``` --- Step 2: Update the System and Install Dependencies -------------------------------------------------- ### Why Update? Updating ensures your system is using the latest security patches and software versions. Run the following command to update your system: ``` apt-get update && apt-get upgrade -y ``` ### Installing Essential Tools Now, install the required software packages: ``` apt install -y \ curl \ wget \ git \ jq \ nano \ sudo \ unzip \ software-properties-common \ ca-certificates \ ufw \ gnupg ``` Additional dependencies needed for development: ``` apt-get install -y curl git build-essential python3 python3-pip cmake libssl-dev pkg-config openssl ``` --- Step 3: Install Node.js ----------------------- ### What is Node.js? Node.js is a JavaScript runtime that helps run Ethereum tools like Lodestar. ### Installing Node.js We will use **NVM (Node Version Manager)** to install Node.js: ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" ``` Now install and use Node.js version 20: ``` nvm install 20 && nvm use 20 ``` Finally, install **Yarn**, a package manager: ``` npm install -g yarn ``` --- Step 4: Install Go (Required for Geth) -------------------------------------- ### What is Go? Go (Golang) is a programming language required to build and run Geth. ### Installing Go Download and install Go with these commands: ``` curl -LO https://go.dev/dl/go1.21.1.linux-amd64.tar.gz tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc ``` --- Step 5: Create a JWT Secret --------------------------- ### What is a JWT Secret? A JWT (JSON Web Token) secret is used to securely communicate between Ethereum clients. ### Creating the JWT File ``` mkdir -p /jwt openssl rand -hex 32 > /jwt/jwt.hex # Generates a 64-character hex secret ``` --- Step 6: Install Geth (Ethereum Execution Client) ------------------------------------------------ ### What is Geth? Geth is the Ethereum execution client that processes transactions and smart contracts. ### Installing Geth Clone the Geth repository and build it: ``` git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum make geth cp build/bin/geth /usr/local/bin/ cd .. ``` #### Fixing Errors During Installation If `make geth` fails, try reinstalling Go: ``` sudo apt remove golang-go # Remove old Go installation wget https://go.dev/dl/go1.22.4.linux-arm64.tar.gz sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf go1.22.4.linux-arm64.tar.gz echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.bashrc source ~/.bashrc make geth sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt update sudo apt install -y ethereum ``` --- Step 7: Install and Build Lodestar (Ethereum Consensus Client) -------------------------------------------------------------- ### What is Lodestar? Lodestar is the Ethereum consensus client that manages validators and ensures the blockchain remains secure. ### Installing Lodestar ``` git clone https://github.com/ChainSafe/lodestar.git cd lodestar yarn install --ignore-optional yarn build pip3 install setuptools --force-reinstall --user npm rebuild npm install --global yarn yarn global add lerna yarn global add typescript rm -rf node_modules yarn.lock package-lock.json yarn cache clean yarn install yarn workspace @lodestar/test-utils add datastore-level yarn workspace @lodestar/spec-test-util add datastore-level npm link npm install -g @chainsafe/lodestar cd .. ``` #### Fixing Errors If the build fails, try these commands: ``` lerna run build yarn workspace @lodestar/test-utils add datastore-level yarn workspace @lodestar/spec-test-util add datastore-level mkdir types touch types/datastore-level.d.ts && echo "declare module 'datastore-level';" > types/datastore-level.d.ts yarn install lerna run build ``` --- Step 8: Create the Start Script ------------------------------- ### Why Create a Start Script? Instead of typing multiple commands each time, a script will automate the process. ### Creating the Script Create a file named `start.sh` and add the following: ``` #!/bin/bash # Start Lodestar with JWT authentication lodestar beacon \ --network mainnet \ --execution.urls http://localhost:8551 \ --jwt-secret /jwt/jwt.hex & # Start Geth with JWT authentication geth \ --http \ --http.addr 0.0.0.0 \ --http.api eth,net,web3,engine,admin \ --authrpc.jwtsecret /jwt/jwt.hex \ --authrpc.port 8551 \ --authrpc.addr 0.0.0.0 & ``` Give it execution permission and run it: ``` chmod +x start.sh ./start.sh ``` --- Conclusion ---------- Congratulations! 🎉 You've successfully set up an Ethereum node using Docker. With Geth and Lodestar running, you are well on your way to learning about Ethereum Protocol!