Skip to content

使用Docker在Moonbeam上运行节点

概览

在基于Moonbeam的网络运行一个全节点使您能够连接至网络,与bootnode节点同步,获得RPC端点的本地访问,在平行链上创建区块,以及更多其他不同的功能。

在本指南中,您将学习如何使用Docker快速启动 一个Moonbeam节点,以及如何维护和清理您的节点。

检查先决条件

开始之前,您需要: - 安装Docker。截止本文截稿, Docker使用的版本为24.0.6 - 确保您的系统满足基本要求。连接至Kusama上的Moonriver或是Polkadot上的Moonbeam,通常需要几天时间来完成中继链内嵌的同步。

设置链数据的储存空间

设置一个目录来储存链数据,您需要:

  1. 创建一个本地目录
mkdir /var/lib/moonbeam-data
mkdir /var/lib/moonriver-data
mkdir /var/lib/alphanet-data
  1. 接着,请确认您已经为储存链数据的本地目录设定所有权和权限许可。您为特定用户或当前用户设置必要权限许可(将INSERT_DOCKER_USER替换为运行docker命令的用户):
# chown to a specific user
chown INSERT_DOCKER_USER /var/lib/moonbeam-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/moonbeam-data
# chown to a specific user
chown INSERT_DOCKER_USER /var/lib/moonriver-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/moonriver-data
# chown to a specific user
chown INSERT_DOCKER_USER /var/lib/alphanet-data

# chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/alphanet-data

初始命令

开始节点需要执行docker run命令。如果您设定的是收集人节点,确认您使用的是收集人代码段。

注意,在以下初始命令中,您需要:

  • INSERT_YOUR_NODE_NAME 改成您选择的节名名字。您需要在两个地方更改这个数值:平行链一个,中继链一次
  • 用服务器实际RAM的50%替换INSERT_RAM_IN_MB。例如服务器有32 GB RAM,这里则应配置为 16000. 内存配置最低值为 2000,但这将低于推荐配置

了解更多初始命令的不同选项与其他常用选项,请参考文档的Flags页面。

全节点

Linux代码片段
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB\
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB\
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
MacOS代码片段
docker run -p 9944:9944 -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

允许外部访问您的节点

如果您想要运行一个RPC节点,连接至Polkadot.js程序,或是运行您自己的程序,您可以使用--unsafe-rpc-external参数来运行全节点,这会允许外部程序访问RPC端口。

Moonbeam的启动命令示例
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--unsafe-rpc-external \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--unsafe-rpc-external \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

在前端使用SQL后台

Moonbeam节点预装的Frontier 数据库可以修改为使用SQL的后端。Frontier 数据库是 Moonbeam 节点的标准配置,包含以太坊的相关元素,例如交易、区块和日志。由于 eth_getLogs 方法非常耗费资源,与默认的 RocksDB 数据库相比,SQL 后端旨在为索引和查询以太坊日志提供更高性能的选择。

要启动一个使用 Frontier SQL 后端的节点,您需要在启动命令中添加 --frontier-backend-type sql 标志。

您可以使用其他标志来配置 SQL 后端,例如数据池的大小、查询超时等;有关更多信息,请参阅Flags 页面。

Moonbeam的启动命令示例
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
# This is a comment
--db-cache INSERT_RAM_IN_MB \
--frontier-backend-type sql \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
purestake/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--frontier-backend-type sql \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

收集人节点

Linux snippets
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB\
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB\
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run --network="host" -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB\
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
MacOS snippets
docker run -p 9944:9944 -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/moonriver-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
docker run -p 9944:9944 -v "/var/lib/alphanet-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.36.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

同步您的节点

在Docker拉取必要的镜像后,您的全节点将启动并显示许多信息,如区块链参数、节点名称、作用、创世状态等。

Full Node Starting

在同步过程中,您既会看到镶嵌中继链([Relaychain])的日志也会看到平行链([🌗])的日志。日志展示了目标区块(实时网络中的state)与最好区块(本地网络同步state)。

Full Node Starting

如果您使用的是Moonbase Alpha的安装指南,在同步后您会得到一个本地运行的Moonbase Alpha测试网节点!如果是Moonbeam或Moonriver,如果您按照Moonriver或Moonbeam的节点教程操作,当同步完成,您将能够与同类节点连接并且能够看到在Moonriver/Moonbeam网络上生产的区块!

注意事项

同步相应的内嵌中继链需要数天的时间,请注意您的系统符合要求

维护您的节点

随着Moonbeam网络不断发展,有时需要升级节点软件。升级版本发布后,我们将通过Discord channel通知节点运营者,并告知这些升级是否为必要升级(一些客户端升级为可选操作)。升级过程简单直接,并且全节点及收集人的升级过程一样。

  1. 停止Docker容器:

    sudo docker stop INSERT_CONTAINER_ID
    
  2. Moonbeam GitHub Release页面获取Moonbeam的最新版本

  3. 使用最新版本启动您的节点。您需要将开始命令中的的版本替换成最新版本,并运行它

当您的节点再次运行时,您将在您的终端看到日志。

清除节点

如果您需要Moonbeam节点的新实例,您可以通过删除相关联的数据目录来清除您的节点。

首先,您想需要停止Docker容器:

  sudo docker stop INSERT_CONTAINER_ID

如果您在启动节点的时候未使用-v标志来指定用于存储链数据的本地目录,则数据文件夹会与Docker容器本身相关。因此,移除Docker容器将移除链数据。

如果您使用-v标志启动节点,则需要清除指定的目录。例如,对于直接关联的数据,您可以运行以下命令来清除您的平行链和中继链数据:

sudo rm -rf /var/lib/moonbeam-data/*
sudo rm -rf /var/lib/moonriver-data/*
sudo rm -rf /var/lib/alphanet-data/*

仅为指定链移除平行链数据,您可运行以下命令:

sudo rm -rf /var/lib/moonbeam-data/chains/*
sudo rm -rf /var/lib/moonriver-data/chains/*
sudo rm -rf /var/lib/alphanet-data/chains/*

同样地,仅移除中继链数据,您可运行以下命令:

sudo rm -rf /var/lib/moonbeam-data/polkadot/*
sudo rm -rf /var/lib/moonriver-data/polkadot/*
sudo rm -rf /var/lib/alphanet-data/polkadot/*

现在您的链数据已被清除,您可以使用新的数据目录启动一个新节点。您可以通过重复本教程的步骤安装最新版本。确保您所使用的是最新可用标签,您可以在Moonbeam GitHub Release 页面上找到该标签。

注意事项

根据需要,Moonbase Alpha可能被会清除和重置。在这些情况下,您需要清除平行链数据和中继链数据。如果需要清除,将通过Discord channel提前通知节点运营商。

Last update: January 25, 2024
| Created: December 2, 2021