以太坊作为全球领先的智能合约平台,其去中心化特性离不开众多节点的支撑,部署和维护以太坊节点不仅是参与网络、保障网络安全的重要方式,也为开发者提供了测试和部署智能合约的本地环境,本文将详细介绍如何在 Linux 系统上部署以太坊节点,主要涵盖两种主流方式:使用 Geth 客户端执行全节点同步,以及使用更轻量级的 Erigon 客户端。
前期准备
在开始部署之前,请确保您的 Linux 系统满足以下基本要求:
- 操作系统:推荐使用 Ubuntu 20.04/22.04 LTS 或其他主流 Linux 发行版(如 CentOS, Debian),本文以 Ubuntu 为例进行演示。
- 硬件配置:
- CPU:至少 2 核,推荐 4 核及以上。
- 内存:至少 8GB RAM,推荐 16GB 或以上,尤其是在同步全链数据时。
- 存储:SSD 硬盘是必须的,至少 1TB 可用空间(以太坊主网数据量持续增长,建议预留更大空间,如 2TB 或更多),I/O 性能对同步速度至关重要。
- 网络:稳定的互联网连接,建议带宽 10Mbps 以上,且最好有公网 IP(便于其他节点连接)。
- 权限:需要具有 sudo 权限的用户账户。
部署方式一:使用 Geth 客户端(全节点)
Geth(Go-Ethereum)是以太坊官方实现的 Go 语言客户端,功能全面,是最常用的以太坊节点客户端之一。
-
更新系统并安装依赖
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential unzip git libsnappy-dev
-
安装 Go Geth 依赖于 Go 环境,我们可以从 Go 官方网站下载并安装最新版本的 Go。
# 前往 Go 官网获取最新版本号,这里以 1.21.0 为例 wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
配置 Go 环境变量:
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
-
下载并编译 Geth
# 克隆 Geth 仓库 git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum # 切换到稳定版本(v1.13.6,可根据需要选择) git checkout v1.13.6 # 编译 Geth make geth<
/pre>
编译完成后,可执行文件
geth会在build/bin目录下,我们可以将其移动到系统 PATH 中:sudo cp build/bin/geth /usr/local/bin/
-
初始化 Geth 节点(可选) 如果您想创建一个新的 genesis 区块文件(例如用于私有网络),可以初始化,对于主网,此步骤可跳过,同步时会自动使用主网 genesis。
# geth --datadir ~/ethereum_data init genesis.json # genesis.json 需要您自行准备或编写
-
启动 Geth 节点 启动 Geth 节点并开始同步数据,以下是一些常用参数:
--datadir:指定数据存储目录。--syncmode:同步模式,可选full(全同步,默认,下载所有区块和状态)、snap(快速同步,默认,下载状态和最近区块,较快)、light(轻节点)。--http:启用 HTTP-RPC 服务,默认端口 8545。--ws:启用 WebSocket-RPC 服务,默认端口 8546。--authrpc.port:引擎 API 端口,默认 8551,与客户端交互(如 MetaMask)可能需要。--metrics:启用 metrics 监控,默认端口 6060。--maxpeers:最大连接 peer 数量,默认 50。
示例:启动全节点同步(推荐使用 snap 模式以加快速度)
geth --datadir ~/ethereum_data --syncmode snap --http --ws --authrpc.port 8551 --metrics --maxpeers 50
首次启动时,Geth 会开始从其他节点同步区块数据,这个过程可能需要很长时间(几天到几周,取决于您的网络和硬件性能),同步完成后,您的节点就是一个完整的以太坊全节点。
-
管理 Geth 进程 为了让节点在后台持续运行,可以使用
nohup或systemd服务。 使用 nohup:nohup geth --datadir ~/ethereum_data --syncmode snap --http --ws --authrpc.port 8551 --metrics --maxpeers 50 > geth.log 2>&1 &
使用 systemd(推荐): 创建服务文件
sudo nano /etc/systemd/system/geth.service:[Unit] Description=Geth Ethereum Client After=network.target [Service] User=your_username Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/geth --datadir /home/your_username/ethereum_data --syncmode snap --http --ws --authrpc.port 8551 --metrics --maxpeers 50 [Install] WantedBy=default.target
将
your_username替换为您的用户名,然后启用并启动服务:sudo systemctl daemon-reload sudo systemctl enable geth sudo systemctl start geth
-
监控 Geth 状态
- 查看日志:
journalctl -u geth -f或tail -f ~/ethereum_data/geth/geth/chaindata/LOG(具体日志路径可能不同) - 查看同步状态:
geth attach http://localhost:8545然后在控制台输入eth.syncing,如果返回false表示同步完成。
- 查看日志:
部署方式二:使用 Erigon 客户端(全节点,另一种选择)
Erigon 是一个用 Go 语言编写的高性能以太坊客户端,它采用不同的架构(Merkle Patricia Trie 的高效处理),在某些情况下同步速度和存储效率可能优于 Geth。
-
安装 Erigon Erigon 提供了预编译的二进制文件,安装相对简单。
# 下载 Erigon 最新版本(请访问其 GitHub Releases 页面获取最新链接) wget https://github.com/ledgerwatch/erigon/releases/download/v2.29.0/erigon-linux-amd64-2.29.0.tar.gz tar -xzf erigon-linux-amd64-2.29.0.tar.gz sudo mv erigon-linux-amd64 /opt/erigon sudo ln -s /opt/erigon/erigon /usr/local/bin/erigon
-
启动 Erigon 节点 Erigon 的启动命令相对简单:
erigon --datadir ~/erigon_data
Erigon 也有自己的同步机制,首次启动也会同步数据,但其
--syncmode通常为snap或full,具体取决于版本和配置,它会自动管理数据库和同步过程。 -
管理 Erigon 进程 同样可以使用
systemd来管理 Erigon 服务,创建/etc/systemd/system/erigon.service:[Unit] Description=Erigon Ethereum Client After=network.target [Service] User=your_username Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/erigon --datadir /home/your_username/erigon_data [Install] WantedBy=default.target
然后启用并启动:
sudo systemctl daemon-re