以太坊作为全球领先的智能合约平台和去中心化应用(DApp)生态系统的基石,吸引了无数开发者和研究者的关注,在自己的服务器上搭建以太坊节点,不仅可以参与网络验证、获取交易收益(对于验证者节点),还能更深入地了解区块链的运行机制,并为DApp开发和测试提供稳定的环境,本文将详细介绍如何在阿里云服务器上,从零开始搭建一个以太坊全节点(以Geth客户端为例)。

准备工作:选择合适的阿里云服务器

在开始之前,选择一款合适的云服务器至关重要,以太坊节点对硬件资源有一定要求:

  1. CPU:建议选择至少2核vCPU,多核CPU有助于同步和同步后的交易处理。
  2. 内存:建议至少4GB RAM,8GB或以上更佳,特别是在同步区块和运行复杂智能合约时。
  3. 存储:这是最关键的部分,以太坊区块链数据量巨大且持续增长(截至2024年初,已超过1TB,并仍在增加)。
    • 类型:必须选择高性能云盘,如ESSD(弹性块存储),以保证I/O性能,避免同步和运行时因磁盘性能不足而卡顿。
    • 大小:建议至少选择500GB起步,但考虑到未来增长,1TB或更大更为稳妥,可以在初始配置时选择较小容量,后续通过扩容功能增加。
  4. 操作系统:推荐使用Ubuntu Server 20.04 LTS或22.04 LTS,64位版本,因为Geth对Linux的支持最好,社区文档也最丰富。
  5. 网络:确保服务器带宽足够,建议至少5Mbps以上,且最好是按量后付费或固定带宽,以保证同步速度的稳定性。

连接服务器与基础环境配置

  1. 远程连接:使用SSH工具(如PuTTY、Xshell或Terminal)连接到你的阿里云服务器,公网IP地址和登录凭证在阿里云ECS控制台可以获取。
    ssh root@你的服务器公网IP
  2. 更新系统
    sudo apt update
    sudo apt upgrade -y
  3. 创建非root用户(推荐)
    sudo adduser ethereum  # 创建一个名为ethereum的用户
    sudo usermod -aG sudo ethereum # 将该用户加入sudo组

    然后退出root登录,用新创建的ethereum用户登录:

    exit
    ssh ethereum@你的服务器公网IP
  4. 安装必要工具
    sudo apt install -y git wget curl build-essential

安装Geth以太坊客户端

Geth是以太坊官方Go语言实现的客户端,是最常用、最稳定的以太坊节点软件之一。

  1. 下载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

    (注意:版本号会更新,请务必确认最新稳定版号)

  2. 解压并安装

    tar -xvf geth-linux-amd64-*.tar.gz
    sudo cp geth-linux-amd64/geth /usr/local/bin/
    # 验证安装
    geth version

    如果看到版本信息,说明安装成功。

初始化以太坊节点

在启动节点之前,可以选择初始化一个数据目录,这一步不是必须的,但可以提前配置一些参数。

  1. 创建数据目录
    mkdir -p ~/ethereum/data
  2. 初始化(可选): 如果你想创建一个自定义的genesis.json文件(通常用于私有链或测试链),可以初始化,对于公共主网,这一步可以跳过,Geth在首次启动时会自动使用主网的genesis block。
    # geth init --datadir ~/ethereum/data /path/to/your/genesis.json

启动并同步以太坊节点

这是核心步骤,我们将启动Geth节点并开始同步以太坊区块链数据。

<
随机配图
ol>
  • 基本启动命令

    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文件中。

  • 验证节点状态与远程访问

    1. 查看同步状态: 如果启动时进入了控制台(console),可以输入:

      eth.syncing

      如果返回false,表示已同步完成;如果返回一个对象,则表示仍在同步中,可以查看currentBlockhighestBlock等进度。 如果是后台运行,可以查看日志:

      tail -f ~/ethereum/geth.log

      日志中会显示同步进度。

    2. 远程连接到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隧道连接)

    3. 通过HTTP-RPC远程访问: 确保阿里云ECS服务器的安全组规则已放行你设置的HTTP和WebSocket端口(如8545和8546)。

      登录阿里云