CentOS 7 下搭建以太坊(Geth)节点全指南

网络 阅读: 2026-01-06 14:40:51

以太坊作为全球领先的智能合约平台,其去中心化特性离不开众多节点的支持,搭建自己的以太坊节点,不仅可以参与网络共识(如成为验证者,在PoS机制下),还能更安全、自主地与区块链进行交互,部署和测试智能合约等,本文将详细介绍如何在 CentOS 7 操作系统上,使用 Geth(Go-Ethereum)客户端搭建一个以太坊全节点。

准备工作

  1. 硬件要求

    • CPU:至少 2 核,推荐 4 核或以上。
    • 内存:至少 4GB RAM,推荐 8GB 或以上,对于全节点,16GB 更佳。
    • 存储:至少 500GB 可用磁盘空间(SSD 强烈推荐,因为同步区块数据需要大量随机读写),建议 1TB 或更大,因为数据会持续增长。
    • 网络:稳定的互联网连接,建议带宽 10Mbps 或以上,上行带宽尤为重要,因为节点需要为其他节点提供数据。
  2. 软件环境

    • 操作系统:CentOS 7 64-bit
    • 用户权限:具有 sudo 权限的非 root 用户(推荐)
    • 网络连接:确保服务器可以访问互联网,并且所需的端口(默认 30303 TCP/UDP)是开放的。
  3. 更新系统: 在开始之前,建议先更新系统软件包到最新版本:

    sudo yum update -y

安装必要依赖

Geth 的编译和运行需要一些基础的依赖库,我们使用 yum 来安装它们:

sudo yum groupinstall "Development Tools" -y
sudo yum install wget git make gcc-c   -y

安装 Go 语言环境

Geth 是用 Go 语言编写的,因此需要先安装 Go 环境。

  1. 下载 Go: 访问 Go 官方下载页面 获取最新版本的 Linux 64-bit 安装包,我们假设下载的是 go1.21.0.linux-amd64.tar.gz:

    wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
  2. 解压并安装 Go: 将下载的 Go 压缩包解压到 /usr/local 目录下:

    sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
  3. 配置 Go 环境变量: 编辑 ~/.bash_profile 文件,添加 Go 的路径:

    echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
    echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
    echo 'export GOBIN=$GOPATH/bin' >> ~/.bash_profile

    然后使配置生效:

    source ~/.bash_profile
  4. 验证 Go 安装: 执行以下命令,如果显示 Go 版本号,则表示安装成功:

    go version

编译并安装 Geth

  1. 克隆 Geth 源码仓库: 从 GitHub 上克隆 Geth 的最新源码:

    git clone https://github.com/ethereum/go-ethereum.git
  2. 进入源码目录并编译

    cd go-ethereum
    make geth

    这个过程可能需要一些时间,具体取决于你的 CPU 性能。

  3. 验证 Geth 安装: 编译完成后,geth 可执行文件会生成在 build/bin/ 目录下,你可以将其复制到系统 PATH 中的某个目录,/usr/local/bin

    sudo cp build/bin/geth /usr/local/bin/

    然后验证:

    geth version

启动以太坊节点

Geth 提供了多种启动方式,这里我们介绍最常用的同步方式。

  1. 创建数据目录(可选,但推荐):

    mkdir -p ~/ethereum/data
  2. 启动 Geth 节点

    • 同步区块数据: 首次启动时,Geth 需要从其他节点同步区块链上的所有数据,这个过程可能非常耗时,从几个小时到几天甚至几周不等,取决于你的网络速度和硬件性能。

      主网同步(默认): 这是最慢的同步方式,会下载并验证所有历史区块数据。

      geth --datadir ~/ethereum/data --syncmode full --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal"
      • --datadir: 指定数据存储目录。
      • --syncmode full: 全同步模式,下载所有区块和状态数据,也可以选择 --syncmode snap(快速同步,目前推荐,下载状态根而不是全部状态数据,速度更快)。
      • --http: 启动 HTTP-RPC 服务,方便通过 Web3.js 等库与节点交互。
      • --http.addr "0.0.0.0": 允许任何 IP 地址访问 HTTP-RPC 服务(生产环境建议限制为特定 IP)。
      • --http.port "8545": HTTP-RPC 服务端口。
      • --http-api: 指定开放的 API 接口。

      测试网同步(Ropsten 测试网): 如果你想在测试网上进行测试,可以指定测试网名称:

      geth --datadir ~/ethereum/data --testnet --syncmode full --http --http.addr "0.0.0.0" --http.port "8545"
    • 后台运行: 为了让节点在后台持续运行,可以使用 nohup 命令,并将输出重定向到日志文件:

      nohup geth --datadir ~/ethereum/data --syncmode snap --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" > ~/ethereum/geth.log 2>&1 &
      • nohup: 使得命令在用户退出登录后仍然运行。
      • > ~/ethereum/geth.log 2>&1: 将标准输出和标准错误都重定向到日志文件。
    • 查看同步状态: 在另一个终端窗口,你可以使用以下命令查看同步进度:

      geth attach ~/ethereum/data/geth.ipc

      进入控制台后,输入:

      eth.syncing

      如果返回 false,表示同步已完成,如果返回一个对象,则表示仍在同步,currentBlock 是当前同步到的区块号,highestBlock 是网络最高区块号。

常用管理命令

  1. 停止节点: 如果你使用了 nohup,可以通过查找进程 ID (PID) 来停止它:

    ps aux | grep geth
    # 找到 geth 的 PID,然后执行
    kill <PID>

    如果节点正在前台运行,直接按 Ctrl C 即可。

  2. 查看日志

    tail -f ~/ethereum/geth.log
  3. 管理账户: 你可以通过 Geth 控制台创建和管理账户:

    geth attach ~/ethereum/data/geth.ipc

    控制台命令:

    // 创建新账户
    personal.newAccount("your_password")
    // 查看账户列表
    eth.accounts
    // 查看账户余额
    eth.getBalance(eth.accounts[0])

注意事项与最佳实践

  1. 磁盘空间:密切关注磁盘空间使用情况,区块链数据会持续增长,考虑定期清理旧数据或使用更大的存储。
  2. 防火墙:确保服务器的防火墙规则允许 30303 端口(TCP 和 UDP)的入站和出站连接,以便与其他节点通信,如果启用了 HTTP-RPC,确保 8545 端口(或其他你设置的端口)的访问是安全的。
    sudo firewall-cmd --permanent --add-port=30303/tcp
    sudo firewall-c

本文 原创,转载保留链接!网址:https://licai.bangqike.com/bixun/1317830.html

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

扫一扫关注我们,了解最新精彩内容

搜索