Skip to content

使用Systemd在Moonbeam上运行节点

Full Node Moonbeam Banner

概览

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

本教程的目标人群是有基于Substrate创建区块链经验的用户。运行平行链节点和Substrate节点大致相似,但仍存在一些差异。Substrate平行链节点将会是较大的工程,因为其包含平行链本身以及与中继链同步的代码,还有促进两者之间的交互同步。因此,这项工程相对较大,需要30分钟和32GB的存储空间。

注意事项

Moonbase Alpha仍被视为是一个Alpha网络,因此其正常运行时间_不会_达到100%。平行链将不时地进行清理。在开发自己的应用程序时,请确保您已采取方法快速地将合约与账户重新部署到新的平行链。Discord channel会至少提前24小时发布清理区块链的通知。

上手指南

以下小节将介绍使用二进制以及作为systemd服务运行Moonbeam全节点的操作流程。本教程所使用的示例基于Ubuntu 18.04的环境。Moonbeam也可能与其他Linux版本相兼容,但目前我们仅测试了Ubuntu版本。

如果您不想自己编译二进制文件,您可以使用发布的二进制文件。如果您想要自己编译二进制文件,请查看编译二进制文件部分,安装依赖项和编译可能需要约30分钟。

发布的二进制文件

使用wget快速获取最新发布的二进制文件

wget https://github.com/PureStake/moonbeam/releases/download/v0.24.0/moonbeam
wget https://github.com/PureStake/moonbeam/releases/download/v0.25.0/moonbeam
wget https://github.com/PureStake/moonbeam/releases/download/v0.25.0/moonbeam

您可以在您的终端运行sha256sum命令来确认您所下载的是否为正确版本,您应该看到以下输出:

20466828dec7a3035e209402c2d85bf3190b08f5477c6d51fa02f8cf7e985412
a468d7f8fd834dda504d38138db8021573b0f0afbed3207957e773a6bf79072b
a468d7f8fd834dda504d38138db8021573b0f0afbed3207957e773a6bf79072b

当您检索到二进制文件,您可以直接运行systemd服务开始运行您的节点。

编译二进制文件

手动编译二进制文件需要约30分钟和32GB的存储空间。

以下命令将创建最新版本的Moonbeam平行链。

  1. 克隆Moonbeam repo。

    git clone https://github.com/PureStake/moonbeam
    cd moonbeam
    
  2. 检查最新版本:

    git checkout tags/$(git describe --tags)
    
  3. 如果您已安装Rust,您可跳过以下两个步骤。如果您未安装Rust,请通过执行以下命令通过Rust推荐方式安装Rust和其先决条件:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  4. 接下来,通过运行以下命令更新您的PATH环境变量:

    source $HOME/.cargo/env
    
  5. 编译平行链二进制文件:

    cargo build --release
    

Compiling Binary

如果在终端显示_cargo not found error_的错误提示,请将Rust手动添加至您的系统路径或重启系统:

source $HOME/.cargo/env

现在,您可以使用Moonbeam二进制文件运行systemd服务。

运行服务

通过以下指令完成所有与服务运行相关的设置。

  1. 首先,创建一个服务账户:

    adduser moonbeam_service --system --no-create-home
    
    adduser moonriver_service --system --no-create-home
    
    adduser moonbase_service --system --no-create-home
    
  2. 创建一个目录来存储二进制文件和数据(您可能需要sudo):

    mkdir /var/lib/moonbeam-data
    
    mkdir /var/lib/moonriver-data
    
    mkdir /var/lib/alphanet-data
    
  3. 将上一小节所创建的二进制文件复制到创建的文件夹中。如果您是自己编译二进制文件,则需要将二进制文件移动到目标目录(./target/release/)。或者,将Moonbeam二进制文件移动到根目录(可能需要sudo):

    mv ./moonbeam /var/lib/moonbeam-data
    
    mv ./moonbeam /var/lib/moonriver-data
    
    mv ./moonbeam /var/lib/alphanet-data
    
  4. 在存储链上数据的本地目录设置相应的权限:

    sudo chown -R moonbeam_service /var/lib/moonbeam-data
    
    sudo chown -R moonriver_service /var/lib/moonriver-data
    
    sudo chown -R moonbase_service /var/lib/alphanet-data
    

创建配置文件

接下来,创建systemd配置文件。如果您设定的是收集人节点,请确认您使用的是“收集人”的代码段。您需执行以下操作:

  • 替换两处YOUR-NODE-NAME
  • 用服务器实际RAM的50%替换 <50% RAM in MB>。例如服务器有32 GB RAM,这里则应配置为 16000. 内存配置最低值为 2000,但这将低于推荐配置。
  • 再次检查确认二进制文件是否位于以下正确路径 (ExecStart)
  • 如果您使用不同目录,请再次检查基本路径
  • 将文档命名为/etc/systemd/system/moonbeam.service

全节点

[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

收集人

[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
     --validator \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
     --validator \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
     --validator \
     --port 30333 \
     --rpc-port 9933 \
     --ws-port 9944 \
     --execution wasm \
     --wasm-execution compiled \
     --pruning=archive \
     --state-cache-size 0 \
     --db-cache <50% RAM in MB> \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "YOUR-NODE-NAME" \
     -- \
     --port 30334 \
     --rpc-port 9934 \
     --ws-port 9945 \
     --execution wasm \
     --pruning=1000 \
     --name="YOUR-NODE-NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

注意事项

如果您想要运行RPC终端、连接至polkadot.js.org或是运行您自己的应用,使用--unsafe-rpc-external和/或--unsafe-ws-external标志来运行能够从外部访问RPC端口的全节点。您能够通过执行moonbeam --help以获得更多细节。我们不建议收集人节点使用此配置。有关上述标志的概述,请参阅开发者文档的标志页面。

注意事项

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

运行服务

注册并启动服务:

systemctl enable moonbeam.service
systemctl start moonbeam.service

最后,验证服务是否正在运行:

systemctl status moonbeam.service

Service Status

您也可以执行以下命令检查日志:

journalctl -f -u moonbeam.service

Service Logs

如果出于任何原因需要停止服务,可以运行:

systemctl stop moonbeam.service

更新客户端

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

如果您想要更新您的客户端,您可以保持现有的链数据原封不动,只需按照以下步骤更新二进制文件:

  1. 停止systemd服务:

    sudo systemctl stop moonbeam.service
    
  2. 移除二进制文件的旧版本:

    rm  /var/lib/moonbeam-data/moonbeam
    
    rm  /var/lib/moonriver-data/moonbeam
    
    rm  /var/lib/alphanet-data/moonbeam
    
  3. Moonbeam GitHub Release页面获取Moonbeam的最新版本

  4. 如果您使用的是发布的二进制文件,更新版本并运行以下命令:

    wget https://github.com/PureStake/moonbeam/releases/download/<NEW VERSION TAG HERE>/moonbeam
    

    如果您想要编译二进制文件,请参考编译二进制文件指引,确保您已通过运行git checkout获取最新版本。

  5. 将二进制文件移动到数据目录:

    # If you used the release binary:
    mv ./moonbeam /var/lib/moonbeam-data
    
    # Or if you compiled the binary:
    mv ./target/release/moonbeam /var/lib/moonbeam-data
    
    # If you used the release binary:
    mv ./moonbeam /var/lib/moonriver-data
    
    # Or if you compiled the binary:
    mv ./target/release/moonbeam /var/lib/moonriver-data
    
    # If you used the release binary:
    mv ./moonbeam /var/lib/alphanet-data
    
    # Or if you compiled the binary:
    mv ./target/release/moonbeam /var/lib/alphanet-data
    
  6. 更新权限:

    chmod +x moonbeam
    chown moonbeam_service moonbeam
    
    chmod +x moonbeam
    chown moonriver_service moonbeam
    
    chmod +x moonbeam
    chown moonbase_service moonbeam
    
  7. 启动您的服务:

    systemctl start moonbeam.service
    

您可以运行以上命令查看节点的状态或日志。

清除节点

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

取决于您使用的是发布的二进制文件还是自己编译的二进制文件,清除链数据的方式也有所不同。如果您是自己编译二进制文件,您可跳过该步骤至清除编译的二进制文件部分。

清除发布的二进制文件

首先,您需要停止systemd服务:

sudo systemctl stop moonbeam

您可以运行以下命令清除您的平行链和中继链数据:

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提前通知节点运营商。

清除编译的二进制文件

如果您想要启动一个新的节点实例,您可以使用一些purge-chain命令,它们将按照指令删除以前的链数据。清除平行链和中继链数据的基本命令如下所示:

./target/release/moonbeam purge-chain

如果您想要指定清除的数据,您可以添加以下标志到上述命令:

  • --parachain:只删除平行链数据库,保持中继链数据完整
  • --relaychain:只删除中继链数据库,保持平行链数据完整

您也可以指定清除的链:

  • --chain:使用预定义链或具有chainspec的文件路径来指定链

只清除您的Moonbase Alpha数据,您需要运行以下命令:

./target/release/moonbeam purge-chain --parachain --chain alphanet

清除开发链的指定chainspec路径,您可以运行以下命令:

./target/release/moonbeam purge-chain --chain example-moonbeam-dev-service.json

想要获得可用的purge-chain命令的完整列表,您可以通过运行以下命令访问帮助菜单:

./target/release/moonbeam purge-chain --help

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

注意事项

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