本文将介绍如何使用 Docker Compose 搭建一个完整的以太坊(ETH)节点,并集成信标链客户端(Lighthouse),以支持以太坊 2.0 的权益证明(PoS)共识机制。通过这种方式,你可以轻松地在本地或云服务器上运行一个完整的以太坊节点。

推荐硬件配置

  • CPU: 8 核以上
  • 内存: 16GB 或以上
  • 存储: 高性能 SSD,至少 1TB 的空闲空间
  • 网络: 至少 100MB/s 下载速度的网络服务

前提条件

  1. DockerDocker Compose 安装:

    • 你需要安装 Docker 和 Docker Compose 来运行服务。可以使用以下命令进行安装:
    sudo apt-get update
    sudo apt-get install docker.io
    sudo apt-get install docker-compose
    
  2. 服务器配置

    • 推荐使用至少 4 CPU 和 16 GB 内存的服务器来运行以太坊节点和信标链客户端。
    • 确保服务器有足够的磁盘空间来存储区块链数据(500GB 以上)。

环境搭建步骤

1. 创建 Docker Compose 文件

首先,创建一个目录来存储 Docker Compose 配置文件和数据卷。

mkdir ~/eth-node
cd ~/eth-node

然后创建 docker-compose.yml 文件:

nano docker-compose.yml

2. 配置 Docker Compose 文件

docker-compose.yml 中,配置以太坊 Geth 节点(执行层)和信标链客户端(Lighthouse)。以下是 Docker Compose 文件的示例:

services:
  eth-node:
    image: ethereum/client-go:stable
    container_name: geth-node
    volumes:
      - /www/data:/root/.ethereum
      - /www/data/prysm/jwtsecret:/root/.ethereum/geth/jwtsecret
    ports:
      - "8545:8545"
      - "8546:8546"
      - "30303:30303"
      - "8551:8551"
    command: >
      --http
      --http.addr 0.0.0.0
      --http.port 8545
      --http.api eth,web3,net,personal,txpool
      --ws
      --ws.addr 0.0.0.0
      --ws.port 8546
      --ws.api eth,web3,net,personal,txpool
      --syncmode "snap"
      --networkid 1
      --authrpc.port 8551
      --authrpc.addr 0.0.0.0
      --authrpc.vhosts=*
      --authrpc.jwtsecret /root/.ethereum/geth/jwtsecret
    networks:
      - eth-network
    restart: unless-stopped

  lighthouse-beacon-node:
    image: sigp/lighthouse:latest
    container_name: lighthouse-beacon-node
    volumes:
      - /www/data/lighthouse:/data
      - /www/data/prysm/jwtsecret:/root/jwtsecret
    ports:
      - "5052:5052"  # Lighthouse HTTP API
      - "9000:9000"  # Lighthouse P2P 端口
    command: >
      lighthouse bn
      --datadir /data
      --execution-endpoint http://eth-node:8551
      --http
      --metrics
      --execution-jwt=/root/jwtsecret
      --subscribe-all-subnets
      --checkpoint-sync-url https://mainnet-checkpoint-sync.stakely.io
      --disable-deposit-contract-sync
    depends_on:
      - eth-node
    networks:
      - eth-network
    restart: unless-stopped

networks:
  eth-network:
    driver: bridge

3. 生成 JWT 密钥

Geth 和 Lighthouse 需要共享一个 JWT 密钥文件进行安全通信。你可以使用以下命令生成 JWT 文件:

mkdir -p /www/data/prysm/
openssl rand -hex 32 > /www/data/prysm/jwtsecret

4. 启动 Docker Compose

在配置好 docker-compose.yml 文件并生成 JWT 密钥后,使用以下命令启动服务:

docker-compose up -d

这将启动 Geth(执行层)和 Lighthouse(信标链客户端)。-d 参数确保服务在后台运行。

5. 查看日志

你可以使用以下命令查看 Geth 和 Lighthouse 的日志,确保节点正常启动并同步:

  • 查看 Geth 日志:

    docker logs geth-node
    
  • 查看 Lighthouse 日志:

    docker logs lighthouse-beacon-node
    

6. 检查同步状态

Geth(执行层)

Geth 提供了 HTTP 和 WebSocket API,你可以通过它们检查同步状态。使用以下命令连接到 Geth 节点:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545

如果返回结果为 false,说明同步已经完成。

Lighthouse(信标链)

Lighthouse 提供了 HTTP API,可以通过它查看信标链的同步状态。你可以访问以下地址来检查状态:

http://localhost:5052

7. 停止和重启节点

  • 停止节点:

    docker-compose down
    
  • 重启节点:

    docker-compose up -d
    

8. 使用检查点同步(Checkpoint Sync)

为了加快信标链客户端的同步过程,推荐使用检查点同步,可以从以下列表选择一个公共检查点同步 URL:https://eth-clients.github.io/checkpoint-sync-endpoints/

在 Docker Compose 文件中,确保在 lighthouse 启动命令中添加 --checkpoint-sync-url 参数:

--checkpoint-sync-url https://your-checkpoint-sync-url

9. 结论

通过本文,你已经成功使用 Docker Compose 搭建了一个完整的以太坊节点,包括执行层(Geth)和信标链客户端(Lighthouse)。这种方法使得部署和管理节点变得非常方便,并且能够支持以太坊 2.0 的权益证明共识机制。你可以根据需要扩展或修改此配置,例如增加监控工具或其他客户端。


参考资源