CentOS 7下搭建以太坊节点全指南**
以太坊作为全球领先的智能合约平台之一,拥有庞大的生态系统,无论是参与DeFi、NFT,还是进行区块链开发,运行一个以太坊节点都是与网络直接交互、获取数据的重要方式,本文将详细介绍如何在CentOS 7操作系统上,从零开始搭建一个以太坊全节点(以Geth客户端为例)。
准备工作
在开始

- 操作系统:CentOS 7 64位
- 硬件要求:
- CPU:至少2核心
- 内存:至少8GB RAM(推荐16GB或以上,因为同步过程会占用大量内存)
- 存储:至少1TB可用空间(SSD强烈推荐,因为同步速度会快很多,且对硬盘寿命更友好)
- 网络:稳定的互联网连接,建议带宽10Mbps以上
- 用户权限:具有root权限或具有sudo权限的用户
更新系统
确保您的系统是最新状态,这有助于避免潜在的兼容性问题。
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.log - 连接到Geth控制台:在另一个终端窗口执行
geth 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。 - 如果需要远程访问,请配置防火墙规则仅允许信任的IP访问,并考虑启用认证(Geth本身不提供HTTP Auth,可通过Nginx反向代理实现)。
常用管理命令
-
停止节点: 如果在前台运行,直接按
Ctrl+C。 如果在后台运行,可以找到进程ID后杀死:ps aux | grep geth sudo kill <PID>
或者使用
pkill:pkill geth
-
进入Geth控制台:
geth attach ~/ethereum_data/geth.ipc
-
查看节点信息: 在控制台中