CentOS 7下搭建以太坊节点全指南**

以太坊作为全球领先的智能合约平台之一,拥有庞大的生态系统,无论是参与DeFi、NFT,还是进行区块链开发,运行一个以太坊节点都是与网络直接交互、获取数据的重要方式,本文将详细介绍如何在CentOS 7操作系统上,从零开始搭建一个以太坊全节点(以Geth客户端为例)。
准备工作
在开始之前,请确保您的系统满足以下基本要求:
更新系统
确保您的系统是最新状态,这有助于避免潜在的兼容性问题。
sudo yum update -y
安装必要依赖
Geth是以以太坊客户端用Go语言编写的,因此我们需要安装Go环境以及其他一些编译工具和依赖库。
# 安装必要的库 sudo yum install wget git curl -y
安装Go语言环境
Geth的运行需要Go语言环境,我们可以从Go官方下载页面获取最新的稳定版本进行安装(此处以Go 1.21.0为例,请根据实际情况替换为最新版本号)。
# 下载Go安装包 wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz # 解压到/usr/local目录 sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz # 配置环境变量 echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc echo 'export GOPATH=$HOME/go' >> ~/.bashrc echo 'export GOBIN=$GOPATH/bin' >> ~/.bashrc # 使环境变量生效 source ~/.bashrc # 验证Go安装 go version
如果显示出版本信息,则Go安装成功。
编译并安装Geth
克隆Geth源码仓库
cd ~ git clone https://github.com/ethereum/go-ethereum.git
编译Geth
cd go-ethereum make geth
编译过程可能需要一些时间,具体取决于您的CPU性能,编译完成后,geth可执行文件会位于go-ethereum/build/bin/目录下。

将Geth添加到系统PATH(可选,但推荐)
echo 'export PATH=$PATH:~/go-ethereum/build/bin' >> ~/.bashrc source ~/.bashrc
验证Geth安装
geth version
如果能看到Geth的版本信息,则安装成功。
初始化以太坊节点
在启动节点之前,需要进行初始化,这会创建一个数据目录来存储区块链数据,我们选择使用主网(Mainnet)进行同步。
创建数据目录
mkdir -p ~/ethereum_data
初始化节点

您需要提供一个创世块文件的路径,Geth已经包含了默认的创世块信息,所以可以直接使用init命令并指定一个空文件或使用默认配置,更常见的方式是直接启动同步,它会自动处理创世块,但如果需要明确初始化:
# 获取默认创世块文件并初始化(可选步骤,通常直接启动同步即可) geth init /dev/null --datadir ~/ethereum_data
对于大多数用户,可以直接跳过此init步骤,直接在启动时同步区块。
启动并同步以太坊节点
我们可以启动Geth节点并开始同步以太坊区块链数据。
基本启动命令
geth --datadir ~/ethereum_data --syncmode "full" --gcmode "full" --http --http.addr "0.0.0.0" --http.port "8545" --http.vhosts "*" --ws --ws.addr "0.0.0.0" --ws.port "8546" --ws.origins "*"
命令参数说明:
--datadir ~/ethereum_data:指定数据存储目录。--syncmode "full":同步模式,"full"表示全节点,会下载和验证所有区块和交易,其他可选值有"fast"(快速同步,只下载区块头和状态数据)和"light"(轻节点),推荐使用"full"以支持网络完整功能。--gcmode "full":垃圾回收模式,"full"表示保留所有历史状态。--http:启用HTTP-RPC服务。--http.addr "0.0.0.0":HTTP-RPC监听地址,"0.0.0.0"表示监听所有网络接口。--http.port "8545":HTTP-RPC监听端口。--http.vhosts "*":允许HTTP-RPC访问的主机。--ws:启用WebSocket-RPC服务。--ws.addr "0.0.0.0":WebSocket-RPC监听地址。--ws.port "8546":WebSocket-RPC监听端口。--ws.origins "*":允许WebSocket-RPC访问的源。后台运行
直接运行上述命令会阻塞终端,如果您希望在后台运行,可以使用nohup或screen/tmux工具。
使用nohup:
nohup geth --datadir ~/ethereum_data --syncmode "full" --gcmode "full" --http --http.addr "0.0.0.0" --http.port "8545" --http.vhosts "*" --ws --ws.addr "0.0.0.0" --ws.port "8546" --ws.origins "*" > geth.log 2>&1 &
这会在后台启动Geth,并将日志输出到geth.log文件。
监控同步进度
启动后,Geth会开始同步区块链数据,您可以通过以下方式查看同步进度:
tail -f geth.loggeth attach ~/ethereum_data/geth.ipc
进入控制台后,输入:
eth.syncing
如果返回false,表示已经同步完成;如果返回一个对象,则表示仍在同步中,可以查看其中的currentBlock、highestBlock等信息了解进度。
配置防火墙(可选)
如果您希望通过外部访问HTTP-RPC或WebSocket服务,需要开放相应的端口。
# 开放8545端口 (HTTP-RPC) sudo firewall-cmd --permanent --add-port=8545/tcp # 开放8546端口 (WebSocket-RPC) sudo firewall-cmd --permanent --add-port=8546/tcp # 重新加载防火墙 sudo firewall-cmd --reload
️ 安全警告: 默认情况下,开放HTTP-RPC和WebSocket服务到所有网络接口(0.0.0)存在安全风险,建议:
--http.addr和--ws.addr设置为0.0.1。常用管理命令
停止节点: 如果在前台运行,直接按Ctrl C。 如果在后台运行,可以找到进程ID后杀死:
ps aux | grep geth sudo kill <PID>
或者使用pkill:
pkill geth
进入Geth控制台:
geth attach ~/ethereum_data/geth.ipc
查看节点信息: 在控制台中