以太坊作为全球领先的智能合约平台,其去中心化特性离不开众多节点的支持,搭建自己的以太坊节点,不仅可以参与网络共识(如成为验证者,在PoS机制下),还能更安全、自主地与区块链进行交互,部署和测试智能合约等,本文将详细介绍如何在 CentOS 7 操作系统上,使用 Geth(Go-Ethereum)客户端搭建一个以太坊全节点。

准备工作
硬件要求:
软件环境:
更新系统: 在开始之前,建议先更新系统软件包到最新版本:
sudo yum update -y
安装必要依赖
Geth 的编译和运行需要一些基础的依赖库,我们使用 yum 来安装它们:
sudo yum groupinstall "Development Tools" -y sudo yum install wget git make gcc-c -y
安装 Go 语言环境
Geth 是用 Go 语言编写的,因此需要先安装 Go 环境。
下载 Go: 访问 Go 官方下载页面 获取最新版本的 Linux 64-bit 安装包,我们假设下载的是 go1.21.0.linux-amd64.tar.gz:
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
解压并安装 Go: 将下载的 Go 压缩包解压到 /usr/local 目录下:
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
配置 Go 环境变量: 编辑 ~/.bash_profile 文件,添加 Go 的路径:
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile echo 'export GOPATH=$HOME/go' >> ~/.bash_profile echo 'export GOBIN=$GOPATH/bin' >> ~/.bash_profile
然后使配置生效:

source ~/.bash_profile
验证 Go 安装: 执行以下命令,如果显示 Go 版本号,则表示安装成功:
go version
编译并安装 Geth
克隆 Geth 源码仓库: 从 GitHub 上克隆 Geth 的最新源码:
git clone https://github.com/ethereum/go-ethereum.git
进入源码目录并编译:
cd go-ethereum make geth
这个过程可能需要一些时间,具体取决于你的 CPU 性能。
验证 Geth 安装: 编译完成后,geth 可执行文件会生成在 build/bin/ 目录下,你可以将其复制到系统 PATH 中的某个目录,/usr/local/bin:
sudo cp build/bin/geth /usr/local/bin/
然后验证:
geth version
启动以太坊节点
Geth 提供了多种启动方式,这里我们介绍最常用的同步方式。
创建数据目录(可选,但推荐):
mkdir -p ~/ethereum/data
启动 Geth 节点:
同步区块数据: 首次启动时,Geth 需要从其他节点同步区块链上的所有数据,这个过程可能非常耗时,从几个小时到几天甚至几周不等,取决于你的网络速度和硬件性能。

主网同步(默认): 这是最慢的同步方式,会下载并验证所有历史区块数据。
geth --datadir ~/ethereum/data --syncmode full --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal"
--datadir: 指定数据存储目录。--syncmode full: 全同步模式,下载所有区块和状态数据,也可以选择 --syncmode snap(快速同步,目前推荐,下载状态根而不是全部状态数据,速度更快)。--http: 启动 HTTP-RPC 服务,方便通过 Web3.js 等库与节点交互。--http.addr "0.0.0.0": 允许任何 IP 地址访问 HTTP-RPC 服务(生产环境建议限制为特定 IP)。--http.port "8545": HTTP-RPC 服务端口。--http-api: 指定开放的 API 接口。测试网同步(Ropsten 测试网): 如果你想在测试网上进行测试,可以指定测试网名称:
geth --datadir ~/ethereum/data --testnet --syncmode full --http --http.addr "0.0.0.0" --http.port "8545"
后台运行: 为了让节点在后台持续运行,可以使用 nohup 命令,并将输出重定向到日志文件:
nohup geth --datadir ~/ethereum/data --syncmode snap --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" > ~/ethereum/geth.log 2>&1 &
nohup: 使得命令在用户退出登录后仍然运行。> ~/ethereum/geth.log 2>&1: 将标准输出和标准错误都重定向到日志文件。查看同步状态: 在另一个终端窗口,你可以使用以下命令查看同步进度:
geth attach ~/ethereum/data/geth.ipc
进入控制台后,输入:
eth.syncing
如果返回 false,表示同步已完成,如果返回一个对象,则表示仍在同步,currentBlock 是当前同步到的区块号,highestBlock 是网络最高区块号。
常用管理命令
停止节点: 如果你使用了 nohup,可以通过查找进程 ID (PID) 来停止它:
ps aux | grep geth # 找到 geth 的 PID,然后执行 kill <PID>
如果节点正在前台运行,直接按 Ctrl C 即可。
查看日志:
tail -f ~/ethereum/geth.log
管理账户: 你可以通过 Geth 控制台创建和管理账户:
geth attach ~/ethereum/data/geth.ipc
控制台命令:
// 创建新账户
personal.newAccount("your_password")
// 查看账户列表
eth.accounts
// 查看账户余额
eth.getBalance(eth.accounts[0]) 注意事项与最佳实践
sudo firewall-cmd --permanent --add-port=30303/tcp sudo firewall-c