ZBLOG

在Ubuntu系统上搭建以太坊节点完整指南

以太坊作为全球第二大区块链平台,其节点网络是支撑去中心化应用(DApp)、智能合约及整个生态系统的核心基础设施,搭建以太坊节点不仅能深度参与网络验证与数据同步,还能为开发者提供本地测试环境,同时为网络贡献一份算力与存储支持,本文将以主流的Ubuntu系统(以22.04 LTS为例)为环境,详细介绍如何从零开始搭建一个完整的以太坊节点,涵盖环境准备、软件安装、节点配置及维护等全流程。

搭建前的准备工作

在开始搭建节点前,需确保硬件、网络及系统环境满足基本要求,这是节点稳定运行的基础。

硬件要求

以太坊节点分为全节点(存储完整区块链数据,参与共识验证)和归档节点(存储所有历史数据,包括状态根,支持更复杂的历史查询),不同类型节点对硬件的要求差异较大:

  • 全节点

    • CPU:至少2核心(推荐4核心及以上,如Intel i5或AMD Ryzen 5);
    • 内存:至少8GB RAM(推荐16GB,因状态数据会持续增长);
    • 存储:至少1TB SSD(推荐2TB以上,因区块链数据已超1TB且每日新增约50GB);
    • 网络:稳定的宽带连接,上传/下载速度建议≥10Mbps(需长期保持在线,避免因网络中断影响节点同步)。
  • 归档节点

    • 存储:至少4TB SSD(因需存储所有历史状态数据,当前已超8TB且持续增长);
    • 其他配置与全节点类似,但内存建议32GB以上,以应对更大的数据读写压力。

系统环境准备

本文以Ubuntu 22.04 LTS为例(其他Ubuntu版本如20.04步骤类似),确保系统为64位架构,并已更新至最新状态。

(1)更新系统

sudo apt update && sudo apt upgrade -y

(2)安装必要依赖

sudo apt install -y build-essential curl git unzip wget software-properties-common

(3)配置防火墙

Ubuntu默认使用UFW防火墙,需开放以太坊节点的默认端口(主网P2P端口为30303,RPC端口如8545可根据需求调整):

sudo ufw allow 30303/tcp  # 允许TCP连接(P2P通信)
sudo ufw allow 30303/udp  # 允许UDP连接(P2P发现)
sudo ufw allow 8545/tcp   # 可选:允许RPC连接(用于本地交互,如开发工具)
sudo ufw enable          # 启用防火墙(根据提示确认)

选择以太坊客户端软件

以太坊节点通过“客户端”软件实现,客户端是连接用户与以太坊网络的桥梁,目前主流的以太坊客户端分为执行层客户端(处理交易、智能合约执行,原称“以太坊客户端”)和共识层客户端(参与PoS共识验证,原称“验证者客户端”),根据节点类型,需选择对应的组合:

节点类型 执行层客户端 共识层客户端 特点
全节点 Geth、Nethermind Lodestar、Prysm 同步最新区块,参与共识
归档节点 Geth(归档模式) Lodestar(归档模式) 存储完整历史数据
轻节点/同步服务 Geth(轻量模式) 仅同步区块头,不存储完整数据

对于大多数用户,Geth(Go-Ethereum)+ Lodestar 是稳定且文档完善的组合,本文将以该组合为例,介绍全节点的搭建流程。

安装执行层客户端:Geth

Geth是以太坊官方维护的Go语言客户端,功能全面、社区活跃,支持全节点、归档节点及轻节点模式。

下载Geth

通过Geth官方GitHub Releases页面下载最新稳定版本(以v1.13.0为例):

# 下载Linux amd64版本
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.0-1d8ce3dc.tar.gz
# 解压
tar -xvzf geth-linux-amd64-1.13.0-1d8ce3dc.tar.gz
# 移动至系统路径
sudo mv geth-linux-amd64-1.13.0-1d8ce3dc/geth /usr/local/bin/

验证安装

geth version

若输出版本信息(如geth version 1.13.0),则表示安装成功。

初始化节点(创世区块)

首次启动节点前,需通过创世配置文件初始化本地数据目录,以太坊主网的创世配置可通过Geth自动获取:

# 创建数据目录(默认路径为~/.ethereum)
mkdir -p ~/.ethereum
# 下载主网创世配置并初始化
geth init --datadir ~/.ethereum https://github.com/ethereum/ethereum-protocol/raw/master/specs/genesis.json

执行后,~/.ethereum目录下会生成genesis.json文件(创世区块配置)和geth目录(存储链数据)。

安装共识层客户端:Lodestar

Lodestar是Chainlink团队开发的TypeScript客户端,支持PoS共识,具备良好的模块化设计和归档节点支持。

安装Node.js(依赖环境)

Lodestar基于Node.js运行,需安装Node.js 18+版本:

# 通过NodeSource仓库安装Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
# 验证安装
node -v  # 需≥v18.0.0
npm -v   # 需≥v8.0.0

安装Lodestar

通过npm(Node.js包管理器)安装Lodestar:

sudo npm install -g @chainsafe/lodestar

安装完成后,可通过以下命令验证:

lodestar --version

初始化共识层配置

Lodestar需与执行层客户端协同工作,需生成配置文件并指定执行层客户端路径:

# 创建配置目录
mkdir -p ~/.lodestar
# 生成默认配置文件(主网)
lodestar beacon-node --network=mainnet --data-dir=~/.lodestar --execution-endpoint=http://localhost:8551 --jwt-secret=~/.lodestar/jwt.hex > ~/.lodestar/config.yaml 2>&1 &
# 生成JWT密钥(用于执行层与共识层的安全通信)
openssl rand -hex 32 > ~/.lodestar/jwt.hex

参数说明:

  • --network=mainnet:指定主网(测试网可替换为sepolia等);
  • --data-dir:共识层数据存储目录;
  • --execution-endpoint:执行层RPC地址(后续需配置Geth开启RPC);
  • --jwt-secret:JWT密钥文件,用于执行层与共识层的身份验证。

配置执行层(Geth)与共识层(Lodestar)协同

共识层客户端(Lodestar)需从执行层客户端(Geth)获取区块数据,因此需配置Geth开启RPC服务并允许外部连接。

配置Geth RPC

编辑Geth的启动参数(可通过命令行直接启动,或创建服务文件长期运行),以下以命令行启动为例:

geth \
  --datadir ~/.ethereum \
  --http \
  --http.addr "0.0.0.0" \
  --http.port 8545 \
  --http.api "eth,net,web3,personal" \
  --ws \
  --ws.addr "0.0.0.0" \
  --ws.port 8546 \
  --ws.api "eth,net,web3" \
  --authrpc.addr "0.0.0.0" \
  --authrpc.port 8551 \
  --authrpc.jwtsecret ~/.lodestar/jwt.hex \
  --syncmode snap \
  --gcmode full \
  --metrics \
  --metrics.addr "0.0.0.0" \
  --metrics.port 6060

参数说明:

  • --http:开启HTTP RPC服务(用于JSON-RPC交互);
  • --http.addr "0.0.0.0":监听所有网络接口(安全场景建议限制为内网IP);
  • --http.api:开放的API接口
分享:
扫描分享到社交APP