ETH使用docker自建节点
使用docker-compose 自建ETH节点
本文将介绍如何使用 Docker Compose 搭建一个完整的以太坊(ETH)节点,并集成信标链客户端(Lighthouse),以支持以太坊 2.0 的权益证明(PoS)共识机制。通过这种方式,你可以轻松地在本地或云服务器上运行一个完整的以太坊节点。
推荐硬件配置
- CPU: 8 核以上
- 内存: 16GB 或以上
- 存储: 高性能 SSD,至少 1TB 的空闲空间
- 网络: 至少 100MB/s 下载速度的网络服务
前提条件
- Docker 和 Docker Compose 安装: - 你需要安装 Docker 和 Docker Compose 来运行服务。可以使用以下命令进行安装:
 - sudo apt-get update sudo apt-get install docker.io sudo apt-get install docker-compose
- 服务器配置: - 推荐使用至少 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 的权益证明共识机制。你可以根据需要扩展或修改此配置,例如增加监控工具或其他客户端。
参考资源
- 推荐硬件配置
- 前提条件
- 环境搭建步骤
- 1. 创建 Docker Compose 文件
- 2. 配置 Docker Compose 文件
- 3. 生成 JWT 密钥
- 4. 启动 Docker Compose
- 5. 查看日志
- 6. 检查同步状态
- Geth(执行层)
- Lighthouse(信标链)
- 7. 停止和重启节点
- 8. 使用检查点同步(Checkpoint Sync)
- 9. 结论
- 参考资源