安装开发工具组

CentOS 7下搭建以太坊节点全指南**


以太坊作为全球领先的智能合约平台之一,拥有庞大的生态系统,无论是参与DeFi、NFT,还是进行区块链开发,运行一个以太坊节点都是与网络直接交互、获取数据的重要方式,本文将详细介绍如何在CentOS 7操作系统上,从零开始搭建一个以太坊全节点(以Geth客户端为例)。

准备工作

在开始之前,请确保您的系统满足以下基本要求:

  1. 操作系统:CentOS 7 64位
  2. 硬件要求
    • CPU:至少2核心
    • 内存:至少8GB RAM(推荐16GB或以上,因为同步过程会占用大量内存)
    • 存储:至少1TB可用空间(SSD强烈推荐,因为同步速度会快很多,且对硬盘寿命更友好)
    • 网络:稳定的互联网连接,建议带宽10Mbps以上
  3. 用户权限:具有root权限或具有sudo权限的用户

更新系统

确保您的系统是最新状态,这有助于避免潜在的兼容性问题。

sudo yum update -y

安装必要依赖

Geth是以以太坊客户端用Go语言编写的,因此我们需要安装Go环境以及其他一些编译工具和依赖库。

# 安装必要的库
sudo yum install wget git curl -y

安装Go语言环境

Geth的运行需要Go语言环境,我们可以从Go官方下载页面获取最新的稳定版本进行安装(此处以Go 1.21.0为例,请根据实际情况替换为最新版本号)。

# 下载Go安装包
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
# 解压到/usr/local目录
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
# 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export GOBIN=$GOPATH/bin' >> ~/.bashrc
# 使环境变量生效
source ~/.bashrc
# 验证Go安装
go version

如果显示出版本信息,则Go安装成功。

编译并安装Geth

  1. 克隆Geth源码仓库

    cd ~
    git clone https://github.com/ethereum/go-ethereum.git
  2. 编译Geth

    cd go-ethereum
    make geth

    编译过程可能需要一些时间,具体取决于您的CPU性能,编译完成后,geth可执行文件会位于go-ethereum/build/bin/目录下。

  3. 将Geth添加到系统PATH(可选,但推荐)

    echo 'export PATH=$PATH:~/go-ethereum/build/bin' >> ~/.bashrc
    source ~/.bashrc
  4. 验证Geth安装

    geth version

    如果能看到Geth的版本信息,则安装成功。

初始化以太坊节点

在启动节点之前,需要进行初始化,这会创建一个数据目录来存储区块链数据,我们选择使用主网(Mainnet)进行同步。

  1. 创建数据目录

    mkdir -p ~/ethereum_data
  2. 初始化节点

    您需要提供一个创世块文件的路径,Geth已经包含了默认的创世块信息,所以可以直接使用init命令并指定一个空文件或使用默认配置,更常见的方式是直接启动同步,它会自动处理创世块,但如果需要明确初始化:

    # 获取默认创世块文件并初始化(可选步骤,通常直接启动同步即可)
    geth init /dev/null --datadir ~/ethereum_data

    对于大多数用户,可以直接跳过此init步骤,直接在启动时同步区块。

启动并同步以太坊节点

我们可以启动Geth节点并开始同步以太坊区块链数据。

  1. 基本启动命令

    geth --datadir ~/ethereum_data --syncmode "full" --gcmode "full" --http --http.addr "0.0.0.0" --http.port "8545" --http.vhosts "*" --ws --ws.addr "0.0.0.0" --ws.port "8546" --ws.origins "*"

    命令参数说明

    • --datadir ~/ethereum_data:指定数据存储目录。
    • --syncmode "full":同步模式,"full"表示全节点,会下载和验证所有区块和交易,其他可选值有"fast"(快速同步,只下载区块头和状态数据)和"light"(轻节点),推荐使用"full"以支持网络完整功能。
    • --gcmode "full":垃圾回收模式,"full"表示保留所有历史状态。
    • --http:启用HTTP-RPC服务。
    • --http.addr "0.0.0.0":HTTP-RPC监听地址,"0.0.0.0"表示监听所有网络接口。
    • --http.port "8545":HTTP-RPC监听端口。
    • --http.vhosts "*":允许HTTP-RPC访问的主机。
    • --ws:启用WebSocket-RPC服务。
    • --ws.addr "0.0.0.0":WebSocket-RPC监听地址。
    • --ws.port "8546":WebSocket-RPC监听端口。
    • --ws.origins "*":允许WebSocket-RPC访问的源。
  2. 后台运行

    直接运行上述命令会阻塞终端,如果您希望在后台运行,可以使用nohupscreen/tmux工具。

    使用nohup

    nohup geth --datadir ~/ethereum_data --syncmode "full" --gcmode "full" --http --http.addr "0.0.0.0" --http.port "8545" --http.vhosts "*" --ws --ws.addr "0.0.0.0" --ws.port "8546" --ws.origins "*" > geth.log 2>&1 &

    这会在后台启动Geth,并将日志输出到geth.log文件。

  3. 监控同步进度

    启动后,Geth会开始同步区块链数据,您可以通过以下方式查看同步进度:

    • 查看日志tail -f geth.log
    • 连接到Geth控制台:在另一个终端窗口执行
      geth attach ~/ethereum_data/geth.ipc

      进入控制台后,输入:

      eth.syncing

      如果返回false,表示已经同步完成;如果返回一个对象,则表示仍在同步中,可以查看其中的currentBlockhighestBlock等信息了解进度。

配置防火墙(可选)

如果您希望通过外部访问HTTP-RPC或WebSocket服务,需要开放相应的端口。

# 开放8545端口 (HTTP-RPC)
sudo firewall-cmd --permanent --add-port=8545/tcp
# 开放8546端口 (WebSocket-RPC)
sudo firewall-cmd --permanent --add-port=8546/tcp
# 重新加载防火墙
sudo firewall-cmd --reload

️ 安全警告: 默认情况下,开放HTTP-RPC和WebSocket服务到所有网络接口(0.0.0)存在安全风险,建议:

  • 如果仅在本地使用,可以将--http.addr--ws.addr设置为0.0.1
  • 如果需要远程访问,请配置防火墙规则仅允许信任的IP访问,并考虑启用认证(Geth本身不提供HTTP Auth,可通过Nginx反向代理实现)。

常用管理命令

  • 停止节点: 如果在前台运行,直接按Ctrl C。 如果在后台运行,可以找到进程ID后杀死:

    ps aux | grep geth
    sudo kill <PID>

    或者使用pkill

    pkill geth
  • 进入Geth控制台

    geth attach ~/ethereum_data/geth.ipc
  • 查看节点信息: 在控制台中

相关文章