以太坊作为全球领先的智能合约平台和去中心化应用(DApps)的底层基础设施,其节点网络是整个生态系统的基石,运行一个以太坊节点,无论是作为开发者、DApp用户,还是区块链爱好者,都能让你更深入地参与到这个去中心化的网络中,享受数据自主、隐私保护的便利,而将节点部署在云服务器上,相较于本地部署,具有更高的稳定性、可访问性和扩展性,本文将详细介绍如何在云服务器上部署一个以太坊节点,从准备工作到运行维护,带你一步步搭建属于你的以太坊门户。

为何选择云服务器部署以太坊节点?

在开始之前,我们首先需要明确为何选择云服务器而非本地硬件来部署以太坊节点:

  1. 高可用性与稳定性:云服务提供商通常能提供99.9%以上的SLA(服务等级协议),确保节点持续在线,避免了本地硬件故障、断电等问题。
  2. 网络性能优越:主流云服务商在全球拥有多个数据中心节点,选择靠近目标用户或网络骨干节点的服务器,能提供更低的延迟和更高的带宽,有利于节点同步和数据交互。
  3. 灵活性与可扩展性:根据需求选择不同配置的云服务器,轻松应对同步、交易处理等不同负载场景,未来如需升级配置或增加存储,也相对便捷。
  4. 远程管理便利:可以通过SSH等方式远程访问和管理服务器,无需在本地设备上长时间运行。
  5. 成本效益:对于个人开发者或小型项目,使用云服务器可以避免前期硬件投入的沉没成本,采用按需付费或包年包月模式,更经济灵活。

部署前的准备工作

  1. 选择云服务商与服务器配置

    • 云服务商:主流选择包括阿里云、腾讯云、AWS、Google Cloud、DigitalOcean、Vultr等,建议选择信誉良好、服务稳定、节点地区较多的服务商。
    • 操作系统:推荐使用Linux发行版,如Ubuntu Server 20.04 LTS或22.04 LTS,社区支持广泛,教程丰富。
    • 服务器配置
      • CPU:至少2核,推荐4核或以上,以同步和处理交易。
      • 内存:至少4GB,推荐8GB或以上,运行全节点(特别是执行层)内存消耗较大。
      • 存储这是最关键的部分之一,以太坊全节点(执行层 共识层)的数据量(状态、历史交易、收据等)持续增长,截至2024年初,已超过1TB,且还在不断增加,建议选择高性能SSD,存储容量至少2TB,推荐4TB或更大,并预留一定的增长空间,如果选择存档节点(Archive Node),则需要更大的存储空间(可能数TB甚至数十TB)。
      • 带宽:至少10Mbps,推荐更高,以保证同步速度和节点响应速度。
  2. 创建与连接服务器

    • 在云服务商平台注册账号,完成实名认证(如需要)。
    • 创建新的云服务器实例,选择上述推荐的操作系统和配置。
    • 设置安全组(防火墙规则),开放必要的端口:
      • TCP 30303:以太坊P2P通信端口(默认,可根据需要修改)。
      • SSH端口(默认22):用于远程服务器管理。
      • (可选)如果需要通过HTTP API访问节点,还需开放8545(HTTP)或8546(WebSocket)端口,并注意设置访问白名单,确保安全。
    • 使用SSH工具(如PuTTY、Xshell或终端命令ssh username@server_ip)连接到你的云服务器。
  3. 更新系统与安装必要工具

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y software-properties-common curl git build-essential

选择并安装以太坊客户端软件

以太坊网络由执行层(Execution Layer,原ETH1)和共识层(Consensus Layer,原ETH2)组成,你需要分别安装对应的客户端。

  1. 执行层客户端

    • 常用选择:Geth(Go语言实现,最流行,功能全面)、Besu(Java语言实现,企业友好,支持EVM多种特性)、Nethermind(.NET语言实现,高性能)。
    • 以安装Geth为例
      # 官方推荐方式安装(以最新版本为例,请查阅Geth官方文档获取最新安装命令)
      sudo add-apt-repository -y ppa:ethereum/ethereum
      sudo apt update
      sudo apt install -y geth
    • 验证安装
      geth version
  2. 共识层客户端

    • 常用选择:Prysm(Go语言实现,用户最多)、Lodestar(Node.js/TypeScript实现)、Lodestar(Python语言实现,轻量级)。

    • 以安装Prysm为例

      # 安装Go(如果尚未安装,Prysm需要Go环境)
      wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
      sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
      echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
      source ~/.bashrc
      go version
      # 克隆Prysm仓库
      git clone https://github.com/prysmaticlabs/prysm.git
      cd prysm
      # 编译Prysm
      make install
    • 验证安装

      prysmctl version

启动并同步以太坊节点

  1. 启动执行层节点(Geth)

    • 全节点同步(默认同步所有历史数据,耗时较长,但数据最全):
      geth --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" --syncmode "full" --gcmode "full" --datadir "/path/to/your/geth/data"
      • --http--http.addr--http.port:启用HTTP API服务,方便DApp连接。
      • --http.api:指定开放的API接口。
      • --syncmode "full":全同步模式。
      • --gcmode "full":保留所有状态数据。
      • --datadir:指定数据存储目录,确保你有足够的空间。
    • 快速同步(Snap Sync)(推荐,默认方式,只下载状态数据,同步速度快):
      geth --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" --syncmode "snap" --gcmode "full" --datadir "/path/to/your/geth/data"
  2. 启动共识层节点(Prysm)

    • 需要指定Beacon节点地址(可以是本地启动的Prysm Beacon节点,或远程的Beacon节点API)。
    • 如果在同一服务器上运行Prysm Beacon和Validator:
      # 启动Beacon节点
      prysm-beacon-chain --datadir "/path/to/your/prysm/data" --http-web3provider "http://localhost:8545" --genesis-state-url https://github.com/eth-educators/eth2.0-deposit-cli/raw/master/example-genesis-state/genesis.ssz --p2p-host-ip your_server_ip
      • --datadir:Prysm数据目录。
      • --http-web3provider:指向执行层节点(Geth)的HTTP API。
      • --genesis-state-url:创世状态文件URL。
      • --p2p-host-ip:服务器公网IP。
    • (可选)如果运行验证者节点,还需配置prysm-validator命令和钱包。
  3. 后台运行与日志管理

    • 直接在SSH终端运行客户端,一旦断开SSH连接,节点进程会终止,建议使用nohuptmux/screen工具在后台运行。
    • 使用nohup示例:
      nohup geth --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,person