以太坊作为全球领先的智能合约平台和去中心化应用(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结合&:
nohup geth --datadir ~/ethereum/data --syncmode snap --gcmode full --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" --cache 8192 --maxpeers 50 > ~/ethereum/geth.log 2>&1 &
这样,Geth将在后台运行,日志会输出到~/ethereum/geth.log文件中。
验证节点状态与远程访问
-
查看同步状态: 如果启动时进入了控制台(
console),可以输入:eth.syncing
如果返回
false,表示已同步完成;如果返回一个对象,则表示仍在同步中,可以查看currentBlock、highestBlock等进度。 如果是后台运行,可以查看日志:tail -f ~/ethereum/geth.log
日志中会显示同步进度。
-
远程连接到Geth控制台: 在本地电脑上,可以通过以下命令连接到服务器上的Geth控制台:
ssh -L 8545:localhost:8545 ethereum@你的服务器公网IP
然后在SSH连接会话中运行:
geth attach http://localhost:8545
或者直接使用geth attach命令(如果geth在PATH中):
geth attach ~/ethereum/data/geth.ipc
(注意:IPC文件只在本地有效,所以通常需要先SSH隧道连接)
-
通过HTTP-RPC远程访问: 确保阿里云ECS服务器的安全组规则已放行你设置的HTTP和WebSocket端口(如8545和8546)。
登录阿里云