Skip to content
🎉 Welcome to the new Aptos Docs! Click here to submit feedback!
NetworkNodesRun a Public Fullnode从源代码或 Docker 运行 PFN

从源代码或 Docker 运行公共全节点(PFN)

您可以运行自己的公共全节点(PFN)以同步 Aptos 区块链的状态并保持为最新状态。PFN 通过与其他 Aptos VFN 和 PFN 同步来复制整个区块链的状态。任何人都可以运行 PFN。本教程解释了如何部署 PFN 并连接到 Aptos 网络。

我必须运行PFN吗?
如果您不想运行 PFN,但仍想与 Aptos 区块链交互,您可以使用 Aptos Labs 提供的 REST API(见Aptos API)。但请注意,Aptos Labs 提供的 PFN 有速率限制,这可能会妨碍您的开发。如果您想避免这样的速率限制,您可以部署自己的 PFN 并与 Aptos 区块链直接同步。

⚠️

选择一个网络
本文档描述了如何在 Aptos 主网网络启动公共全节点,但它也可以很容易地在 devnet 或 testnet 网络中执行相同的操作。要做到这一点,请检出所需的网络分支并使用相应分支的 genesis.blobwaypoint.txt 节点文件: 主网devnettestnet

硬件要求

对于运行生产级的 PFN,我们建议您的硬件与验证器或 VFN 的配置相同。您可以在这里查看这些节点的硬件要求:验证器和 VFN 的硬件要求

如果您只想为开发或测试运行 PFN,可以使用较低的硬件规格。但是,它不应该在生产环境使用。例如:

  • CPU: 8 核,16 线程(Intel Xeon Skylake 或更新版本)。
  • 内存: 32GB RAM。
⚠️

最低硬件要求
如果您的 PFN 没有达到生产环境所必需的最低硬件标准,那么在面对高负荷工作时,PFN 很可能会出现运行缓慢和稳定性方面的问题。

网络要求和端口

运行 PFN 的时候,您必须开放节点的网络端口,这样其他节点(对等节点,Peers)才可以连接到您的节点。Aptos 网络有多种类型,每种类型都使用不同的端口。不过,PFN 使用的是公共网络类型,使得各个 PFN 与 VFN(验证器全节点)之间能够互相连接。

您可以配置 PFN,以便公共网络能在您的节点上使用特定的端口。您可以使用节点配置 YAML 文件配置端口设置。这里是一个 PFN 的示例配置文件,配置公共网络时,使用的端口是 6180

端口设置

以下建议是基于 PFN (公共全节点)使用默认端口设置的前提提出的。如果您已经在配置文件中修改了默认的端口设置,那么你需要根据实际情况来适当调整这些建议中的描述,以使其适用于您的配置。

⚠️

暴露端口
除特别指明的情况外,我们建议您在运行 PFN(公共全节点)时,不要开放任何非必需的其他网络端口。这样做的原因是,额外开放的端口可能会增大您节点的面临的风险,从而让节点更容易受到潜在风险引起的攻击。

运行 PFN:

假设使用了默认端口,以下是 PFN 应配置的:

  • 打开以下 TCP 端口:
    • 6182公共网络:打开此端口,并公开以允许其他 PFN 连接到您的 PFN。
  • 关闭以下 TCP 端口:
    • 9101检查服务:关闭此端口以防止未经授权的指标检查。
    • 9102管理服务:关闭此端口以防止未经授权的管理服务交互。
    • 80/8080 REST API:关闭此端口以防止未经授权的 REST API 访问。
⚠️

暴露服务
请注意,对于您的内部网络而言,如应用开发和调试,检查服务端口(9101)、管理服务端口(9102)以及 REST API 端口(80 或 8080)可能会很有帮助。然而,检查服务端口和管理服务端口绝对不能公开到外网,因为很容易被滥用。同样地,如果您决定将 REST API 端点公开到外网,您应当部署额外的安全措施,比如认证机制或流量限制,以避免被滥用。

默认网络设置
您可能还需要在 fullnode.yaml 配置文件中,把 listen_address 和 API 列表的 address 字段的值从 127.0.0.1 修改为 0.0.0.0。

存储要求

Aptos 存储的数据总量由两大部分组成:区块链的账本历史长度以及链上状态的数量,后者包括账户和资源等信息。这两部分的规模受到多个因素的影响,其中包括区块链的使用时间、交易频率的平均水平,以及账本数据裁剪器的具体配置。

请注意,由于存档节点负责保存区块链的全部历史记录,这意味着存档节点的数据库大小会持续不断地增长。因此,对于存档节点的存储容量大小,我们无法给出一个固定的推荐值。

Devnet 区块链存储
Aptos devnet 目前每周重置一次。如果您正在部署 devnet PFN,这意味着存储每周都会重置(即,清除)。请参阅 Aptos Discord 上的 #devnet-release 频道。

部署 PFN

您可以通过以下两种方式之一部署 PFN:(1) 构建并运行 aptos-core 源代码;或 (2) 使用 Docker。本文档描述了如何使用这两种方法部署您的 PFN。

方法 1: 从源代码构建并运行

首先,请参阅从源代码构建 Aptos 了解如何下载 aptos-core 仓库并构建二进制文件。 然后,按照以下步骤操作:

  1. 确保您当前的工作目录是 aptos-core

  2. 使用 git checkout --track origin/mainnet 切换到 mainnet 分支;记住,如果您希望在不同的网络中运行您的 PFN,您也可以使用 devnettestnet

  3. 接下来,为您的 PFN 将要连接的网络下载 genesis.blobwaypoint.txt 文件:

    • 运行此命令下载创世区块(对于主网):

      Terminal
      curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/genesis.blob
    • 运行此命令下载路标文件(对于主网):

      Terminal
      curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/waypoint.txt
    ⚠️

    不想连接到主网?
    如果您想连接到其他的网络,如开发网(devnet)和测试网(testnet),您可以通过这个链接找到它们的 genesis.blob(创世区块)和 waypoint.txt(路标文件):https://github.com/aptos-labs/aptos-networks 。记得为这些网络分别下载 genesis.blobwaypoint.txt 文件,而不是直接使用前面提到的 curl 命令中的链接地址。

  4. 接下来,运行下面的命令创建 PFN 配置 YAML 模板的副本:

    Terminal
    cp config/src/config/test_data/public_full_node.yaml fullnode.yaml
  5. 最后,编辑 fullnode.yaml 配置文件以确保您的 PFN:(1) 包含您刚刚下载的创世区块和路标文件;(2) 将同步的区块链数据保存到您选择的位置(在您的本地机器上)。为此:

    1. 通过编辑 fullnode.yaml 配置中的 execution.genesis_file_location 来指定您刚刚下载的 genesis.blob 的正确路径。默认情况下,它指向当前工作目录中的 genesis.blob

      fullnode.yaml
      execution:
        genesis_file_location: "./genesis.blob"
    2. 通过编辑 fullnode.yaml 配置中的 base.waypoint.from_file 来指定您刚刚下载的 waypoint.txt 的正确路径。默认情况下,它指向当前工作目录中的 waypoint.txt。例如:

      fullnode.yaml
      base:
        waypoint:
          from_file: "./waypoint.txt"
    3. 通过编辑 fullnode.yaml 配置中的 base.data_dir 来指定您希望在本地机器上存储区块链数据库的目录。例如,您可以在您的主目录中创建一个目录 my-full-node/data 并指定它为:

      fullnode.yaml
      base:
        data_dir: "</path/to/my/homedir/my-full-node/data>"
  6. 通过运行以下命令启动您的本地公共全节点:

Terminal
cargo run -p aptos-node --release -- -f ./fullnode.yaml

您现在已经成功配置并开始在 Aptos 主网上运行 PFN。

调试?
上面的命令将在:aptos-core/target/release/aptos-node 构建 aptos-node 的二进制发行文件。二进制发行文件通常比二进制调试文件快得多,但缺乏对开发有用的调试信息。要构建二进制调试文件,请从上面的命令中省略 --release 标志。


方法 2: 使用 Docker

本节描述了如何使用 Docker 配置和运行您的 PFN。

⚠️

仅支持 x86-64 CPU
目前,仅支持 x86-64 CPU 通过 Docker 运行 aptos-core。如果您有 Apple M1/M2(ARM64)Mac,请使用上面介绍的 aptos-core 源代码编译的方法。如果对 M1 / M2 的支持对您很重要,请在此问题下发表您的讨论:https://github.com/aptos-labs/aptos-core/issues/1412

  1. 首先,安装 Docker
  2. 接下来,执行下面的脚本,以便为主网配置您的本地环境和准备数据存储目录。这一过程将下载 fullnode.yaml 配置文件、您的公开全节点(PFN)的 genesis.blobwaypoint.txt 文件,并且会创建一个用于保存主网区块链数据的目录:
Terminal
mkdir mainnet && cd mainnet
mkdir data && \
curl -O https://raw.githubusercontent.com/aptos-labs/aptos-core/mainnet/docker/compose/aptos-node/fullnode.yaml  && \
curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/waypoint.txt  && \
curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/genesis.blob
⚠️

不想连接到主网?
要连接到其他网络(例如 devnettestnet),您可以在此处找到创世区块和路标文件 ➜ https://github.com/aptos-labs/aptos-networks 。 请确保下载这些网络的 genesis.blobwaypoint.txt ,而不是使用上面 curl 命令下载创世区块和路标文件。

  1. 接下来,确保您上面下载的 fullnode.yaml 配置文件只包含以下内容。 这将确保此配置是用于 PFN 而不是其他节点类型(例如,验证器或 VFN):
fullnode.yaml
base:
  role: "full_node"
  data_dir: "/opt/aptos/data"
  waypoint:
    from_file: "/opt/aptos/etc/waypoint.txt"
 
execution:
  genesis_file_location: "/opt/aptos/etc/genesis.blob"
 
full_node_networks:
  - network_id: "public"
    discovery_method: "onchain"
    listen_address: "/ip4/0.0.0.0/tcp/6182"
 
api:
  enabled: true
  address: "0.0.0.0:8080"
⚠️

不想允许传入连接?
如果您不希望其他 PFN 连接到您的节点,请覆盖以下内容:listen_address: "/ip4/127.0.0.1/tcp/6182"。另见下面的注释。

  1. 接下来,运行以下 docker 命令:
Terminal
docker run --pull=always \
    --rm -p 8080:8080 \
    -p 9101:9101 -p 6180:6180 \
    -v $(pwd):/opt/aptos/etc -v $(pwd)/data:/opt/aptos/data \
    --workdir /opt/aptos/etc \
    --name=aptos-fullnode aptoslabs/validator:mainnet aptos-node \
    -f /opt/aptos/etc/fullnode.yaml
⚠️

需要 sudo 访问
注意:根据您的配置,您可能需要在 docker 命令前加上 sudo

Docker标签
mainnet 标签始终指向最新的官方 Docker 镜像标签。您可以在以下位置找到最新的哈希值进行比较: https://github.com/aptos-labs/aptos-networks/tree/main/mainnet

验证您的 PFN 的正确性

验证初始同步

在 PFN 最开始的同步阶段,将会涉及传输大量的数据(详情见状态同步指南了解其工作机制)。通过查询指标端口,您可以监控状态同步的进展情况,确认您的节点当前同步到的版本。您可以执行下面的命令示例,查看节点目前的同步版本:

Terminal
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version{.*\"synced\"}" | awk '{print $2}'

该命令将输出节点当前同步的版本。例如:

Terminal
71000

请将命令返回的同步版本号(如 71000)与 Aptos explorer 页面上显示的最新版本号进行比较。如果您的节点版本正在迅速接近最新版本,说明它的同步是正常的。浏览器页面上的版本号与您的节点相差几个版本是正常现象,因为浏览器节点本身可能存在一定的同步延迟。

⚠️

使用快速同步?
如果您的节点正在进行快速同步,该命令可能在最终更新到最新版本之前一直显示0。要验证节点是否正在进行快速同步,请运行以下命令:

Terminal
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_state_sync_version{.*\"synced_states\"}" | awk '{print $2}'

这应该显示同步状态数量的增加。您的节点可能需要几个小时才能快速同步到最新版本。最终,一旦快速同步完成,aptos_state_sync_version{.*"synced"} 命令将返回节点当前同步的版本。

您可以在此处阅读有关快速同步的更多信息:状态同步引导

(可选)验证出站网络连接

如果您愿意,您还可以检查您的 PFN 的出站网络连接。出站网络连接的数量应该大于0,以表明 PFN 是健康的。运行以下命令:

Terminal
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{direction=\"outbound\""

上面的命令将输出节点的出站网络连接数量。例如:

Terminal
curl 127.0.0.1:9101/metrics 2> /dev/null | grep "aptos_connections{direction=\"outbound\""
aptos_connections{direction="outbound",network_id="Public",peer_id="aabd651f",role_type="full_node"} 3

如果返回的出站连接数量为0,则意味着您的节点无法连接到 Aptos 区块链。如果遇到这种情况,请按照以下步骤解决问题:

  1. 按照更新您的 PFN中的描述,更新您的节点到最新版本。
  2. 从配置文件中删除可能已添加的任何 seed 对等节点(Peers)。这些 seed 可能阻碍您连接到网络。seed 对等节点在连接到种子对等节点部分中有讨论。
  3. 确保您的网络使用了正确的 genesis.blobwaypoint.txt 文件。这是一个容易犯错的地方。

(可选)检查 Docker 账本大小

如果您使用 Docker 来运行您的 PFN,可以通过进入 Docker 容器并查询文件大小,来监控区块链账本占用的存储空间。这样,您便可了解到当前区块链账本所占用的存储空间。

  • 首先,在终端上运行docker container ls,并复制 NAME 字段的输出。这将是一个类似于 public_full_node_fullnode_1 的字符串。
  • 接下来,运行这些命令以检查账本占用的存储空间大小,使用您在上一步中复制的 NAME 字段替换 public_full_node_fullnode_1
Terminal
# 获取容器 ID:
id=$(docker container ls | grep public_full_node_fullnode_1 | grep -oE "^[0-9a-zA-Z]+")
 
# 进入容器:
docker exec -it $id /bin/bash
 
# 观察卷(账本)大小:
du -cs -BM /opt/aptos/data