以太坊作为全球领先的智能合约平台和去中心化应用(DApp)的基础设施,其节点网络是整个生态系统的基石,在 Linux 环境下部署以太坊节点,无论是对于开发者、DApp 用户,还是对于希望参与网络共识、验证交易的验证者(如以太坊 2.0 的验证者),都是一项核心技能,本文将详细介绍在 Linux 系统上部署以太坊节点的步骤、注意事项以及不同类型节点的选择。
为什么选择 Linux 部署以太坊节点
在开始之前,我们先简要为何 Linux 是部署以太坊节点的理想选择:
- 稳定性和安全性:Linux 系统以其出色的稳定性和安全性著称,适合需要长期不间断运行的服务。
- 高性能:Linux 对系统资源的利用效率较高,能够在有限的硬件条件下获得更好的性能。
- 开源和灵活性:绝大多数以太坊客户端软件都是开源的,并且原生支持 Linux,提供了高度的定制性和灵活性。
- 社区支持:拥有庞大的开发者社区,遇到问题时更容易找到解决方案和帮助。
- 命令行友好:Linux 强大的命令行工具使得自动化部署、监控和管理节点变得更加便捷。
部署前的准备工作
在开始部署之前,请确保您的 Linux 系统满足以下基本要求:
-
硬件要求:
- CPU:至少 2 核 CPU,推荐 4 核或以上。
- 内存 (RAM):运行全节点至少需要 8GB RAM,推荐 16GB 或以上,如果运行验证者节点,建议 32GB 以上。
- 存储 (SSD):这是最关键的部分,以太坊主网的全节点数据(状态、区块、交易等)截至 2023 年)已超过 2TB,并且持续增长,至少需要 2TB 以上的高速 SSD 硬盘,推荐 4TB 或更大,并确保预留足够空间。
- 网络:稳定且带宽充足的有线互联网连接,建议上行和下行带宽均不低于 10Mbps,并且端口(默认 30303,TCP/UDP)能够开放。
-
软件要求:
- 操作系统:推荐使用 Ubuntu 20.04 LTS 或 22.04 LTS,以及其他主流的 Linux 发行版如 Debian、CentOS 等,本文以 Ubuntu 为例进行演示。
- 更新系统:确保系统已更新到最新状态。
sudo apt update && sudo apt upgrade -y
- 安装必要工具:
sudo apt install -y curl wget git build-essential unzip
选择以太坊客户端软件
以太坊节点是通过运行客户端软件来实现的,目前主流的以太坊 1.0(执行层)客户端有:
- Geth:Go 语言编写,功能全面,用户基数大,官方推荐之一。
- Nethermind:.NET (C#) 语言编写,性能较好,模块化设计。
- Besu:Java 语言编写,由 Hyperledger 贡献,企业友好,支持 EVM 和以太坊 2.0。
对于以太坊 2.0(共识层,PoS),客户端有:
- Lodestar:Node.js/TypeScript 语言编写,由 Chainlink 贡献。
- Lodestar (Prysmatic Labs):Go 语言编写,用户较多。
- Teku:Java 语言编写,由 ConsenSys 贡献,企业级特性。
本文将以 Geth(执行层)和 Lodestar(共识层)为例,介绍如何搭建一个以太坊 2.0 的验证者节点(如果硬件充足,也可以选择同步执行层后运行验证者)。
部署以太坊 1.0 执行层节点 (以 Geth 为例)
-
下载并安装 Geth: 访问 Geth 官方 GitHub Releases 页面获取最新版本的下载链接,或使用以下命令(以最新版本号为例,请替换为实际版本号):
# 获取最新版本号 (示例,请替换为实际最新版本) GETH_VERSION="1.13.6" wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-${GETH_VERSION}-d2b8c9e5.tar.gz tar -xvzf geth-linux-amd64-${GETH_VERSION}-d2b8c9e5.tar.gz sudo cp geth-linux-amd64-${GETH_VERSION}/geth /usr/local/bin/ # 验证安装 geth version
-
初始化节点(可选,对于新节点): 如果您是从零开始同步,Geth 会在第一次启动时自动初始化,如果您有特定的创世文件或需要自定义配置,可以手动初始化。
-
启动 Geth 节点: 启动 Geth 的命令非常灵活,以下是一些常用选项:
geth \ --http \ --http.addr "0.0.0.0" \ --http.port "8545" \ --http.api "eth,net,web3,personal" \ --ws \ --ws.addr "0.0.0.0" \ --ws.port "8546" \ --ws.api "eth,net,web3" \ --syncmode "full" \ # 全同步模式,同步所有历史数据 --gcmode "full" \ # 保持全节点模式 --cache 8192 \ # 缓存大小,单位 MB,根据内存调整 --datadir "/mnt/ethereum/geth" \ # 指定数据目录,务必使用大容量 SSD --metrics \ --metrics.expensive \ --pprof
--http和--ws:分别启用 HTTP 和 WebSocket RPC 服务,方便 DApp 连接。--syncmode "full":全同步,下载所有区块和状态数据,对于新节点,这是最慢但最完整的同步方式,也可以选择snap快速同步(默认),但快速同步的“全”节点在查询某些历史状态时可能不完全准确。--datadir:指定数据存储路径,请务必选择一个空间充足、性能好的 SSD 分区。--metrics:启用 Prometheus 格式的指标导出,方便监控。
-
后台运行和管理: 为了让节点在后台持续运行,可以使用
nohup或systemd服务。-
使用
nohup:nohup geth [上面的参数] > geth.log 2>&1 &
-
更推荐使用
systemd创建服务,便于管理和开机自启,创建/etc/systemd/system/geth.service文件,内容类似:[Unit] Description=Geth Ethereum Client After=network.target [Service] User=your_username Group=your_username Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/geth \ --http \ --http.addr "0.0.0.0" \ --http.port "8545" \ --http.api "eth,net,web3,personal" \ --ws \ --ws.addr "0.0.0.0" \ --ws.port "8546" \ --ws.api "eth,net,web3" \ --syncmode "full" \ --gcmode "full" \ --cache 8192 \ --datadir "/mnt/ethereum/geth" \ --metrics \ --metrics.expensive [Install] WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable geth sudo systemctl start geth sudo systemctl status geth
-
部署以太坊 2.0 共识层节点 (以 Lodestar 为例)
如果您计划成为验证者,需要运行共识层客户端,这里以 Lodestar 为例。
-
安装 Node.js (Lodestar 需要):
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs node --version npm --version
-
安装 Lodestar:
npm install -g @chainsafe/lodestar lodestar --version
-
初始化 Lodestar: 指定数据