对于 CentOS 7
CentOS系统搭建以太坊节点详细教程
以太坊作为全球领先的智能合约平台之一,搭建自己的以太坊节点不仅可以参与网络共识(如成为验证者,取决于以太坊当前共识机制)、进行安全的交易广播和同步,还能为DApp开发提供测试环境,本文将详细介绍如何在CentOS操作系统上搭建一个完整的以太坊节点。
重要提示:
- 本教程以搭建一个同步全链数据的完整节点为例。
- 以太坊节点同步和数据存储需要大量的磁盘空间(数百GB到TB级别,取决于网络发展)和稳定的网络连接。
- 不同版本的以太坊客户端(如Geth, Nethermind, Besu)和以太坊网络(主网、测试网)命令和配置略有差异,本文以常用的 Geth 客户端 和 以太坊主网 为例进行讲解。
- 请确保您的CentOS系统版本较新且为64位系统,建议使用CentOS 7或CentOS Stream/8。
第一部分:环境准备
在开始之前,请确保您的CentOS系统满足以下基本要求:
- 操作系统:CentOS 7 / CentOS 8 / CentOS Stream 9 (64位)
- 硬件要求:
- CPU:至少2核心,推荐4核心或以上。
- 内存:至少8GB RAM,推荐16GB或以上,尤其是对于全节点和未来可能的验证者角色。
- 硬盘:至少1TB可用空间(SSD强烈推荐,可大幅提升同步速度),建议使用SSD并预留足够扩展空间。
- 网络:稳定的互联网连接,建议带宽10Mbps以上,上传速度对网络同步也很重要。
- 用户权限:建议使用具有sudo权限的非root用户进行操作。
第二部分:安装步骤
更新系统
更新您的系统软件包到最新版本:
# 对于 CentOS 8 / Stream sudo dnf update -y
安装必要依赖
安装编译和运行Geth所需的依赖工具:
sudo yum install wget git curl -y # 对于 CentOS 8 / Stream sudo dnf groupinstall "Development Tools" -y sudo dnf install wget git curl -y
安装Go语言环境
Geth是用Go语言编写的,需要先安装Go,建议从Go官网下载最新稳定版。
# 1. 访问 Go 官网获取最新版本号 (1.21.0)
# 这里以 1.21.0 为例,请替换为实际最新版本
GO_VERSION=1.21.0
# 2. 下载 Go 二进制包
wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz
# 3. 解压到 /usr/local
sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
# 4. 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >&
gt; ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
# 5. 使环境变量生效
source ~/.bashrc
# 6. 验证Go安装
go version
# 应该显示类似 go version go1.21.0 linux/amd64 的输出
下载并编译Geth
-
克隆Geth源码仓库:
git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum
-
编译Geth:
# 确保在 go-ethereum 目录下 make geth
编译过程可能需要一些时间,具体取决于您的CPU性能。
-
验证Geth安装:
./build/bin/geth version
如果看到版本信息,说明编译成功。
-
(可选)将Geth添加到系统PATH方便全局使用:
# 创建一个目录用于存放可执行文件 mkdir -p ~/bin # 复制geth到个人bin目录 cp ./build/bin/geth ~/bin/ # 将~/bin添加到PATH(如果之前没添加过GOPATH相关PATH) echo 'export PATH=$PATH:~/bin' >> ~/.bashrc source ~/.bashrc # 验证 which geth geth version
启动并同步以太坊节点
您可以启动Geth节点了。
-
创建数据目录(用于存放区块链数据):
mkdir -p ~/ethereum_data
-
启动Geth节点:
基本同步启动(同步所有区块和状态数据):
geth --datadir ~/ethereum_data --syncmode full --http --http.addr 0.0.0.0 --http.port 8545 --http.vhosts "*"
--datadir ~/ethereum_data:指定数据存储目录。--syncmode full:设置为完整同步模式,下载并验证所有区块和状态数据,这是最安全的模式,但同步时间最长。--http:启用HTTP-RPC服务,方便与其他应用交互(如MetaMask、Truffle等)。--http.addr 0.0.0.0:允许任何IP地址访问HTTP-RPC服务(生产环境请谨慎设置,建议使用防火墙限制或绑定到特定IP)。--http.port 8545:设置HTTP-RPC服务端口,默认为8545。--http.vhosts "*":允许所有主机名的HTTP请求。
其他常用启动参数:
--cache 8192:设置缓存大小(MB),可根据内存调整,默认为4096,较大缓存可提高同步速度,但占用更多内存。--rpc.allow-unprotected-tx:允许发送未经签名的交易(主要用于测试)。--ws:启用WebSocket-RPC服务,--ws.addr 0.0.0.0 --ws.port 8546 --ws.origins "*"
后台运行: 如果您希望节点在后台运行,可以使用
nohup或systemd。 使用nohup:nohup geth --datadir ~/ethereum_data --syncmode full --http --http.addr 0.0.0.0 --http.port 8545 --http.vhosts "*" > ~/ethereum_node.log 2>&1 &
这将在后台启动节点,并将日志输出到
~/ethereum_node.log文件。 -
监控同步进度:
- 在Geth运行的控制台(前台运行时)或通过连接到节点的客户端中,可以输入:
eth.syncing
如果返回
false,表示已经同步完成,如果返回一个包含currentBlock,highestBlock等信息的对象,表示正在同步中。 - 查看日志文件:
tail -f ~/ethereum_node.log
- 使用第三方区块浏览器查看网络同步情况(如Etherscan的Syncing Status页面)。
注意:以太坊主网同步可能需要数天甚至数周时间,具体取决于您的硬件性能和网络状况,使用SSD可以显著缩短同步时间。
- 在Geth运行的控制台(前台运行时)或通过连接到节点的客户端中,可以输入:
第三部分:常用操作与维护
进入Geth控制台
当节点运行后,您可以进入Geth JavaScript Console与之交互:
geth attach ~/ethereum_data/geth.ipc
在控制台中,您可以查看账户、余额、发送交易、调用合约等。
eth.blockNumber:查看当前最新区块号。eth.accounts:查看节点管理的账户(如果没有创建则为空)。personal.newAccount("your_password"):创建新账户。
停止节点
如果前台运行,直接按Ctrl+C,如果后台运行,可以查找进程ID并终止:
# 查找geth进程 ps aux | grep geth # 终止进程(替换为实际的PID) kill -9 <PID>
定期维护
- 备份数据:
~/ethereum_data目录是您的区块链数据核心,请定期备份此目录,以防数据丢失。 - 监控磁盘空间:区块链数据会不断增长,请确保有足够的磁盘空间。
- 更新Geth:以太坊社区持续