以太坊作为全球领先的智能合约平台和去中心化应用(DApp)生态系统的基石,吸引了无数开发者和研究者的关注,在自己的服务器上搭建以太坊节点,不仅可以参与网络验证、获取交易收益(对于验证者节点),还能更深入地了解区块链的运行机制,并为DApp开发和测试提供稳定的环境,本文将详细介绍如何在阿里云服务器上,从零开始搭建一个以太坊全节点(以Geth客户端为例)。
准备工作:选择合适的阿里云服务器
在开始之前,选择一款合适的云服务器至关重要,以太坊节点对硬件资源有一定要求:
- CPU:建议选择至少2核vCPU,多核CPU有助于同步和同步后的交易处理。
- 内存:建议至少4GB RAM,8GB或以上更佳,特别是在同步区块和运行复杂智能合约时。
- 存储:这是最关键的部分,以太坊区块链数据量巨大且持续增长(截至2024年初,已超过1TB,并仍在增加)。
- 类型:必须选择高性能云盘,如ESSD(弹性块存储),以保证I/O性能,避免同步和运行时因磁盘性能不足而卡顿。
- 大小:建议至少选择500GB起步,但考虑到未来增长,1TB或更大更为稳妥,可以在初始配置时选择较小容量,后续通过扩容功能增加。
- 操作系统:推荐使用Ubuntu Server 20.04 LTS或22.04 LTS,64位版本,因为Geth对Linux的支持最好,社区文档也最丰富。
- 网络:确保服务器带宽足够,建议至少5Mbps以上,且最好是按量后付费或固定带宽,以保证同步速度的稳定性。
连接服务器与基础环境配置
- 远程连接:使用SSH工具(如PuTTY、Xshell或Terminal)连接到你的阿里云服务器,公网IP地址和登录凭证在阿里云ECS控制台可以获取。
ssh root@你的服务器公网IP
- 更新系统:
sudo apt update sudo apt upgrade -y
- 创建非root用户(推荐):
sudo adduser ethereum # 创建一个名为ethereum的用户 sudo usermod -aG sudo ethereum # 将该用户加入sudo组
然后退出root登录,用新创建的ethereum用户登录:
exit ssh ethereum@你的服务器公网IP
- 安装必要工具:
sudo apt install -y git wget curl build-essential
安装Geth以太坊客户端
Geth是以太坊官方Go语言实现的客户端,是最常用、最稳定的以太坊节点软件之一。
-
下载Geth:访问Geth的官方GitHub Releases页面(https://github.com/ethereum/go-ethereum/releases)获取最新稳定版的下载链接,或者使用以下命令下载(以最新版本为例,请替换为实际版本号):
# 下载最新稳定版的geth(请替换为实际版本号) wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.12-4cd6ba6d.tar.gz
(注意:版本号会更新,请务必确认最新稳定版号)
-
解压并安装:
tar -xvf geth-linux-amd64-*.tar.gz sudo cp geth-linux-amd64/geth /usr/local/bin/ # 验证安装 geth version
如果看到版本信息,说明安装成功。
初始化以太坊节点
在启动节点之前,可以选择初始化一个数据目录,这一步不是必须的,但可以提前配置一些参数。
- 创建数据目录:
mkdir -p ~/ethereum/data
- 初始化(可选):
如果你想创建一个自定义的genesis.json文件(通常用于私有链或测试链),可以初始化,对于公共主网,这一步可以跳过,Geth在首次启动时会自动使用主网的genesis block。
# geth init --datadir ~/ethereum/data /path/to/your/genesis.json
启动并同步以太坊节点
这是核心步骤,我们将启动Geth节点并开始同步以太坊区块链数据。
-
基本启动命令:
geth --datadir ~/ethereum/data sync
--datadir:指定数据存储目录。sync:启动同步模式。
-
常用启动参数(推荐): 为了更好的体验和性能,通常会添加更多参数:
geth \ --datadir ~/ethereum/data \ --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 "snap" \ --gcmode "full" \ --cache 8192 \ --maxpeers 50 \ console
--http:启用HTTP-RPC服务,方便DApp或其他工具连接。--http.addr "0.0.0.0":允许任何IP访问HTTP-RPC服务(生产环境请谨慎设置,或限制特定IP)。--http.port "8545":HTTP-RPC服务端口,默认8545。--http.api:允许通过HTTP-RPC访问的API列表。--ws:启用WebSocket-RPC服务,适用于实时性要求高的应用。--ws.addr和--ws.port:WebSocket服务地址和端口。--syncmode "snap":使用快速同步模式(snap sync),是目前最快的同步方式,它会先下载状态数据,再逐步同步历史区块。--gcmode "full":运行全节点模式,保存所有区块数据,可以设置为light运行轻节点,但全节点功能更完整。--cache 8192:设置缓存大小(单位MB),适当的缓存可以提升性能,建议根据服务器内存调整。--maxpeers 50:最大连接节点数,默认25,可根据网络状况调整。console:启动后进入交互式控制台,方便管理和查询节点状态。
-
后台运行: 如果你想让节点在后台持续运行,可以使用
nohup