Skip to content

使用Docker在Moonbeam上运行节点

概览

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

安装指引

使用Docker可以快速创建Moonbeam节点。关于安装Docker的更多资讯,请访问此页面。截至本文截稿,所使用的Docker版本为19.03.6。当您连接至Kusama上的Moonriver,或Polkadot上的Moonbeam时,将需要数天的时间同步相应中继链内嵌入的数据。请确认您的系统符合以下要求

创建一个本地目录以储存链上数据:

mkdir /var/lib/moonbeam-data
mkdir /var/lib/moonriver-data
mkdir /var/lib/alphanet-data

接着,请确认您已经为储存链数据的本地目录设定所有权和权限许可。在本示例中,为特定用户或当前用户设置必要权限许可(为将要运行docker命令的用户替换为INSERT_DOCKER_USER):

# 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运行的命令。如果您设定的是收集人节点,确认您使用的是收集人代码段。注意,您需要替换:

  • 在两处替换 INSERT_YOUR_NODE_NAME
  • 用服务器实际RAM的50%替换 <50% RAM in MB>。例如服务器有32 GB RAM,这里则应配置为 16000. 内存配置最低值为 2000,但这将低于推荐配置

注意事项

对于v0.27.0之前的客户端版本,--state-pruning标志被命名为--pruning

对于v0.30.0之前的客户端版本,--rpc-port用于指定HTTP连接的端口,--ws-port用于指定WS连接的端口。从客户端版本v0.30.0开始,--rpc-port已被弃用,--ws-port命令行标志同时适用于HTTP连接和WS连接。类似地,--rpc-max-connections命令行标志已被弃用,现在被硬编码为100。您可以使用--ws-max-connections来调整HTTP和WS连接的总限制。

全节点

Linux snippets
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.34.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--state-pruning archive \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.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.34.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.34.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 Apps或是运行您自己的应用,使用--unsafe-rpc-external和/或--unsafe-ws-external标志来运行能够从外部访问RPC端口的全节点。您能够通过执行moonbeam --help以获得更多细节。我们不建议收集人节点使用此配置。

收集人

Linux snippets
docker run --network="host" -v "/var/lib/moonbeam-data:/data" \
-u $(id -u ${USER}):$(id -g ${USER}) \
moonbeamfoundation/moonbeam:v0.34.0 \
--base-path=/data \
--chain moonbeam \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.0 \
--base-path=/data \
--chain moonriver \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
--db-cache <50% 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.34.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.34.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.34.0 \
--base-path=/data \
--chain alphanet \
--name="INSERT_YOUR_NODE_NAME" \
--collator \
--trie-cache-size 1073741824 \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

注意事项

有关上述标志的概述,请参阅开发者文档的标志页面。

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

Full Node Starting

注意事项

您可使用--promethues-port XXXX标志(将XXXX替换成真实的端口号)指定自定义Prometheus端口,平行链和嵌入式中继链都可以进行这项操作。

docker run -p 30334:30334 -p 30333:30333 -p 9944:9944 # rest of code goes here

在同步过程中,您将看到嵌入式中继链和平行链的消息(无标签)。这些消息将显示目标区块(实时网络状态)和最佳区块(本地节点同步状态)。

Full Node Starting

注意事项

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

如果您按照Moonbase Alpha的节点教程操作,当同步完成,您将获得一个在本地运行的Moonbase Alpha测试网节点!

如果您按照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: November 20, 2023
| Created: December 2, 2021