Go Ethereum 中文教程:从零开始搭建一个以太坊全节点
2026-09-20发表于
编程语言一、geth 是什么:一台会同步账本的以太坊服务器
入门
以太坊可以理解成一份在全球无数电脑之间共享的账本,每笔交易、每个智能合约的状态都记录在上面。geth(Go Ethereum)就是用来保存这份账本的软件,它是以太坊协议的执行层客户端,负责处理交易、维护账本数据,并对外提供查询接口。
如果你只是想通过第三方服务商查询以太坊数据,其实不需要自己跑节点。但假如你希望自己验证数据、搭建测试环境、开发智能合约,或者给团队提供一个稳定的本地以太坊入口,那 geth 就很合适。它像一个全天候运转的“管家”,持续从其他节点下载新区块、核对内容,并更新本地账本。
二、安装前的准备:这台机器需要什么
入门
运行 geth 节点不只是安装软件,它还需要下载和保存整个以太坊账本,因此对硬件和网络有一定要求。建议准备一台能联网的 Linux 服务器,推荐 Ubuntu 22.04 或更高版本。
基本配置建议如下:
- CPU:4 核以上
- 内存:8 GB 以上
- 硬盘:2 TB 以上的高性能 SSD
- 网络:下行带宽至少 8 Mbit/s
硬盘空间是最容易忽略的问题。以太坊全量账本会持续增长,建议保留余量,避免同步到一半失败。
如果你打算用源码编译 geth,还需要满足两个额外条件:Go 语言环境 1.25 以上,以及 C 编译器(如 gcc)。这些是编译过程所需的基础工具,普通用户如果只使用官方编译好的二进制文件,可以忽略。
三、安装 geth:三种常见方式
进阶 · 推荐细读
官方提供了预编译二进制包,也支持用包管理器和源码安装。下面按推荐顺序介绍。
方式一:用 Ubuntu PPA 安装
这是最省事的方式,适合 Ubuntu/Debian 用户。
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt update
sudo apt install -y ethereum
方式二:下载官方二进制文件
如果你不想添加额外软件源,可以直接从官网下载压缩包。访问 geth 下载页,选择 Linux amd64 版本。
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.14.12-stable.tar.gz
tar -xzf geth-linux-amd64-1.14.12-stable.tar.gz
sudo cp geth-linux-amd64-1.14.12-stable/geth /usr/local/bin/geth
注意把文件名中的版本号替换成你实际下载的版本。安装完成后可以检查版本:
geth version
输出类似:
Geth
Version: 1.14.12-stable
Git Commit: abcdef...
Go Version: go1.22.5
方式三:源码编译
适合需要定制或想验证二进制文件来源的进阶用户。先安装 Go 1.25 以上和 gcc,然后执行:
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth
编译成功后,build/bin/geth 就是可执行文件。你可以把它复制到 /usr/local/bin 方便使用。
四、核心用法:启动节点、创建账户、查看同步状态
进阶 · 推荐细读
geth 是一个 CLI(命令行界面)工具,所有操作都通过命令完成。--datadir 参数用来指定数据保存目录,建议单独挂载一块大容量硬盘。
一个常见的启动命令如下:
geth --datadir /data/geth --http --http.addr 0.0.0.0 --http.port 8545 --syncmode snap
各参数含义:
--http:开启 HTTP RPC 服务,让程序可以通过网络调用节点功能--http.addr 0.0.0.0:允许外部访问,如果只想本机访问可以改成127.0.0.1--http.port 8545:指定 RPC 端口,8545 是以太坊社区常用端口--syncmode snap:使用快照同步,是目前推荐的快速同步模式
启动后,geth 会开始连接其他节点下载数据。你可以另开一个终端,通过 IPC 连接查询同步进度:
geth attach /data/geth/geth.ipc
进入控制台后输入:
eth.syncing
如果返回 false,说明节点已经同步到最新区块。如果还在同步,会返回一个对象,其中 currentBlock 和 highestBlock 的差值就是剩余高度。
创建以太坊账户也可以交给 geth:
geth account new --datadir /data/geth
命令会提示输入密码,并输出账户地址。记得备份 keystore 文件和密码,丢失后无法找回账户控制权。
五、合并后的新现实:geth 需要搭配共识层客户端
深入 · 老手可选
以太坊在 2022 年完成合并后,网络被分成执行层和共识层两部分。geth 只负责执行层,也就是跑交易和维护账本状态;而区块的最终确认和同步驱动,需要另一个叫共识层客户端的软件来完成,比如 Prysm、Lighthouse 或 Teku。
简单说,只启动 geth 可能无法完成区块链同步。不要把“执行层客户端”理解成完整的以太坊节点。
对于生产环境,推荐同时运行一套共识层客户端,并让它们通过 JWT(一种身份验证令牌)互相对接。具体过程是:先启动共识层客户端,提供 --execution-endpoint 指向 geth 的 RPC 端口,并在两边配置同一个 JWT 密钥文件。不同共识客户端的命令不同,操作前建议查阅对应文档。
如果只是想在本地测试智能合约,可以使用 geth 的开发模式或模拟后端,这样不需要同步真实区块链,也更轻量。开发模式只需加一个 --dev 参数:
geth --dev --http --http.addr 127.0.0.1
开发模式会生成一个新的测试环境,几分钟内即可开始使用。
六、用 systemd 或 Docker 托管节点
进阶 · 推荐细读
手动在前台运行 geth,终端关闭节点也会停掉。生产环境建议使用 systemd(Linux 系统启动和服务管理器)或 Docker(一种把软件打包成“集装箱”、随处可运行的工具)让它持续运行。
systemd 托管
先创建一个专门用来运行节点的系统用户:
sudo useradd -m -s /bin/bash geth
sudo mkdir -p /data/geth
sudo chown -R geth:geth /data/geth
然后写一个服务配置文件 /etc/systemd/system/geth.service:
[Unit]
Description=Ethereum geth node
After=network.target
[Service]
User=geth
Group=geth
Type=simple
ExecStart=/usr/local/bin/geth --datadir /data/geth --http --http.addr 0.0.0.0 --http.port 8545 --syncmode snap
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
保存后启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now geth
查看日志和状态:
sudo journalctl -u geth -f
sudo systemctl status geth
Docker 托管
Docker 方式适合快速部署,也方便隔离环境。可以使用官方镜像 ethereum/client-go:
docker run -d --name geth \
-v /data/geth:/root/.ethereum \
-p 30303:30303 \
-p 30303:30303/udp \
-p 8545:8545 \
ethereum/client-go \
--http --http.addr 0.0.0.0 --http.port 8545 --syncmode snap
这里同时映射了 TCP 和 UDP 端口,因为节点发现机制需要两种协议配合。
七、常见踩坑与排查
深入 · 老手可选
节点运维中,多数问题集中在磁盘、网络和权限三个方面。
磁盘空间不足
同步过程中,geth 会占用大量磁盘空间。如果空间不足,进程会报错退出。建议定期用 df -h 检查挂载点剩余空间。快照同步完成后,数据仍会持续增长,不要按着刚刚同步完成时的大小预留空间。
端口不通导致找不到节点
geth 默认使用 30303 端口通过 P2P(点对点网络)与其他节点通信。如果服务器有防火墙,需要同时放行 TCP 和 UDP 30303:
sudo ufw allow 30303/tcp
sudo ufw allow 30303/udp
如果节点在路由器后方,还需要手动设置端口转发或启用 UPnP。
权限问题
如果使用 systemd 运行,/data/geth 目录必须属于服务配置中的用户。否则 geth 无法写入数据,启动时会立即报权限错误。用 ls -ld /data/geth 检查所有者,必要时执行 chown -R geth:geth /data/geth。
内存不足
geth 在同步高峰期可能消耗大量内存,尤其是快照同步阶段。如果服务器配置较低,建议开启 swap 作为缓冲。长期运行建议升级到 16 GB 以上内存。
升级注意事项
geth 升级只需要替换二进制文件,数据目录不需要删除。但要注意,版本升级通常是单向的:新版本写入数据库格式后,旧版本可能无法读取。因此升级后不要再用旧二进制启动同一数据目录。还要确认新版本与共识层客户端的兼容性,避免两边版本严重不匹配。
把 geth 节点纳入监控体系时,建议关注日志中的 Import chain segment 和 Syncing 关键字,以及 RPC 端口 8545 的响应延迟。这些信息能提前暴露磁盘或网络瓶颈。
项目信息
| 项目 | 值 |
|---|---|
| 仓库 | ethereum/go-ethereum |
| 语言 | Go |
| Star | 51,352 |
| Fork | 22,150 |
| 主页 | https://geth.ethereum.org |
参考链接
延伸阅读
想继续探索?这些同领域的教程可能也适合你:
137
72
1
1809
文章目录
评论