以太坊作为全球领先的智能合约平台和去中心化应用(DApp)的底层基础设施,吸引了大量开发者和用户,在 Linux 系统上安装和运行以太坊节点,无论是对于参与网络共识、开发 DApp,还是进行链上数据分析,都是一项基础且重要的技能,本文将以主流的 Linux 发行版(如 Ubuntu/Debian)为例,详细介绍如何从零开始安装和运行以太坊节点。
准备工作
在开始安装之前,请确保您的 Linux 系统满足以下基本要求:
- 操作系统:推荐使用 Ubuntu 20.04 LTS 或 22.04 LTS,或其他基于 Debian 的发行版,对于其他发行版如 CentOS/RHEL,命令可能略有不同,但核心步骤类似。
- 硬件要求:
- CPU:至少 2 核 CPU,推荐 4 核或以上。
- 内存:至少 4GB RAM,推荐 8GB 或以上,对于全节点(特别是归档节点),16GB+ 更佳。
- 存储:
- 同步模式:全节点需要存储完整的区块链数据,截至 2024 年,以太坊主网已超过 1TB,并且持续增长,建议使用 SSD 固态硬盘,至少 2TB 可用空间,对于归档节点可能需要数 TB。
- 快速同步(Snap Sync):这是目前最常用的同步方式,它会先下载最新的状态数据,然后再同步区块头和交易,速度较快,但仍需大量存储空间。
- 网络:稳定的互联网连接,建议带宽 10Mbps 以上,同步期间对带宽要求较高。
- 用户权限:建议使用具有
sudo权限的非 root 用户进行操作,以确保安全性。
安装依赖项
更新系统包列表并安装必要的依赖软件:
sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git wget software-properties-common curl libsnappy-dev libc6-dev ncurses-dev unzip libgmp-dev libssl-dev libboost-all-dev autoconf automake libtool
这些依赖项包括编译工具、开发库等,对于后续安装以太坊客户端至关重要。
选择并安装以太坊客户端
以太坊有多种客户端实现,它们遵循相同的以太坊协议规范,但在性能、功能、资源消耗和开发语言上有所不同,最主流的全节点客户端包括:
- Geth (Go-Ethereum):使用 Go 语言编写,是最流行、历史最悠久的客户端之一,功能全面,社区支持好。
- Prysm:使用 Go 语言编写,专注于以太坊 2.0(信标链),支持验证者功能。
- Lodestar:使用 TypeScript/Node.js 编写,同样是以太坊 2.0 信标链客户端。
- Lodestar:使用 Rust 语言编写,以高性能和安全性著称,支持以太坊 1.0 和 2.0。
对于大多数只想运行以太坊 1.0 全节点的用户,Geth 是最常见的选择,本文以 Geth 为例进行讲解。
1 安装 Geth
-
下载 Geth 二进制文件: 最简单的方式是从 GitHub 的官方发布页面下载预编译的二进制文件,首先访问 Geth 的 GitHub Releases 页面:https://github.com/ethereum/go-ethereum/releases
找到最新稳定版本(
v1.13.11),下载适用于 Linux AMD64 的二进制包(通常是geth-alltools-linux-amd64-<version>.tar.gz)。您也可以使用
wget直接下载(请替换<version>为实际版本号):# 请替换为最新版本号 VERSION="1.13.11" wget https://github.com/ethereum/go-ethereum/releases/download/v${VERSION}/geth-alltools-linux-amd64-${VERSION}.tar.gz -
解压并安装:
tar -xvzf geth-alltools-linux-amd64-${VERSION}.tar.gz cd geth-alltools-linux-amd64-${VERSION}解压后,您会看到
geth等可执行文件,您可以将它们复制到系统的PATH中,/usr/local/bin:sudo cp geth bootnode rlpdump /usr/local/bin/
-
验证安装:
geth version
如果能看到 Geth 的版本信息,则表示安装成功。
启动并同步以太坊节点
安装完成后,就可以启动 Geth 节点了,Geth 提供了多种启动选项,以满足不同的需求。
1 基本启动命令
最简单的启动全节点命令是:
geth --http
--http:启用 HTTP-RPC 服务,默认监听8545端口,方便与 DApp 或工具交互(如 MetaMask)。
2 常用启动选项
为了更好地控制节点行为,通常会添加更多选项:
-
指定数据目录: 默认情况下,Geth 将数据存储在
~/.ethereum目录下,如果您有多个节点或希望指定其他位置:geth --http --datadir /path/to/your/ethereum/data
-
选择同步模式:
--syncmode:指定同步模式。fast(默认):快速同步,先下载状态,再同步区块头和交易,是目前推荐的全节点同步方式。full:完整同步,从创世块开始逐块同步,耗时非常长,但数据最完整。light:轻节点,只同步区块头,不存储完整状态和交易,资源消耗小,但功能受限。geth --http --syncmode fast
-
启用 WebSocket: 如果需要通过 WebSocket 与节点交互(例如一些前端应用):
geth --http --ws --ws.addr 0.0.0.0 --ws.port 8546
--ws:启用 WebSocket 服务。--ws.addr 0.0.0.0:监听所有网络接口(默认只监听本地0.0.1)。--ws.port 8546:指定 WebSocket 端口。
-
设置 RPC API: 默认情况下,HTTP-RPC 只开放部分 API,您可以通过
--http.api选项指定要开放的 API:geth --http --http.api eth,net,web3,personal
常见 API 包括
eth,net,web3,personal,admin等。adminAPI 权限较高,请谨慎开放。 -
控制台交互: 启动 Geth 时可以附加一个 JavaScript 控制台,方便直接操作:
geth --http --console
启动后会进入
>提示符,可以输入命令,如eth.blockNumber查看当前区块号。
3 后台运行
为了让节点在后台持续运行,可以使用 nohup 或 systemd 服务。
-
使用
nohup:nohup geth --http --syncmode fast --datadir /path/to/your/ethereum/data > geth.log 2>&1 &
这会将 Geth 的输出重定向到
geth.log文件,并且即使关闭终端,Geth 也会继续运行。 -
使用
systemd(推荐): 创建一个 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 --http --syncmode fast --datadir /home/your_username/.ethereum StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
保存后,启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable geth sudo systemctl start geth
您可以使用 `sudo