自 The Merge 以来,以太坊节点由两个协同工作的程序组成:处理交易和状态的执行客户端,以及跟踪权益证明链的共识客户端。本指南在 Linux VPS 上运行 Geth(执行)和 Lighthouse(共识)。相同的架构也适用于其他客户端组合。
完整节点需要什么
- 磁盘。这是主要限制。目前完整节点大约需要 1 到 2 TB 的高速 NVMe 存储,而且还在增长。归档节点需要的空间多得多。购买前请查阅客户端文档,了解最新的大小。
- 内存。16 GB 是比较舒适的最低配置。32 GB 有助于同步期间以及 RPC 负载下的表现。
- CPU。4 个或更多核心。存储速度比时钟频率更重要。
- 网络。高速端口上的不限流量。节点会传输大量数据。
由于磁盘体积大,大多数人为以太坊使用独立服务器。有关各种规格的套餐,请参阅以太坊节点托管。
步骤 1:准备服务器
使用全新安装的 Ubuntu LTS,并执行如何保护新 VPS 中的步骤。为每个客户端创建用户,使任何程序都不以 root 身份运行。
sudo adduser --system --group --no-create-home geth
sudo adduser --system --group --no-create-home lighthouse
sudo mkdir -p /var/lib/geth /var/lib/lighthouse /etc/ethereum
sudo chown geth:geth /var/lib/geth
sudo chown lighthouse:lighthouse /var/lib/lighthouse
第 2 步:创建共享的 JWT 密钥
两个客户端通过一个共享的密钥文件相互认证。
openssl rand -hex 32 | sudo tee /etc/ethereum/jwt.hex
sudo chmod 640 /etc/ethereum/jwt.hex
sudo chgrp geth /etc/ethereum/jwt.hex
sudo usermod -aG geth lighthouse
第 3 步:安装并运行 Geth
从 Geth 官方下载页面下载稳定版本,或使用该项目的软件包仓库,并进行验证。然后创建 /etc/systemd/system/geth.service:
[Unit]
Description=Geth
After=network-online.target
[Service]
User=geth
ExecStart=/usr/local/bin/geth \
--mainnet \
--datadir /var/lib/geth \
--authrpc.jwtsecret /etc/ethereum/jwt.hex \
--http --http.addr 127.0.0.1 --http.api eth,net,web3
Restart=on-failure
TimeoutStopSec=180
[Install]
WantedBy=multi-user.target
将 HTTP 绑定到 127.0.0.1 可使 RPC 保持私有。切勿将其直接暴露到互联网。
第 4 步:安装并运行 Lighthouse
[Unit]
Description=Lighthouse beacon node
After=geth.service
[Service]
User=lighthouse
ExecStart=/usr/local/bin/lighthouse bn \
--network mainnet \
--datadir /var/lib/lighthouse \
--execution-endpoint http://127.0.0.1:8551 \
--execution-jwt /etc/ethereum/jwt.hex \
--checkpoint-sync-url https://mainnet.checkpoint.sigp.io
Restart=on-failure
[Install]
WantedBy=multi-user.target
检查点同步让共识客户端从最近的可信状态启动,因此几分钟而不是几天就能就绪。在依赖检查点 URL 之前,请对照客户端文档进行核实。
第 5 步:启动并观察同步
sudo systemctl enable --now geth lighthouse
journalctl -u geth -f
curl -s -X POST -H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://127.0.0.1:8545
结果中出现 false 表示节点已完全同步。首次同步可能需要许多小时到几天,取决于磁盘速度。
防火墙和端口
请允许点对点端口(默认情况下 Geth 为 30303 TCP/UDP,Lighthouse 为 9000 TCP/UDP),以获得良好的对等节点数量。请保持 8545、8551 和 5052 对公共互联网关闭。