Skip to content

使用Systemd在Moonbeam上运行节点

概览

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

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

如果您有兴趣自己编译二进制文件(请注意这个过程可能需要超过30分钟并需要32GB内存)您可以查看手动编译Moonbeam二进制文件指南。

查看先决条件

以下小节将介绍使用二进制以及作为systemd服务运行Moonbeam全节点的操作流程。开始之前,您需要: - 确认您的Ubuntu版本为18.04,20.04,或22.04。Moonbeam也可能与其他Linux版本相兼容,但目前我们仅测试了Ubuntu版本。 - 确保您的系统满足基本要求。连接至Kusama上的Moonriver或是Polkadot上的Moonbeam,通常需要几天时间来完成中继链内嵌的同步。

下载最新版二进制文件

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

wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam

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

dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e
dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e
dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e

运行服务

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

  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. 将上一小节所创建的二进制文件复制到创建的文件夹中(可能需要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配置文件。如果您设定的是收集人节点,请确认您使用的是收集人的代码段。

首先您需要创建一个名为/etc/systemd/system/moonbeam.service的文件来储存配置信息。

请注意,在以下的启动配置中,您需要:

  • INSERT_YOUR_NODE_NAME 改成您选择的节名名字。您需要在两个地方更改这个数值:平行链一个,中继链一次
  • 用服务器实际RAM的50%替换INSERT_RAM_IN_MB。例如服务器有32 GB RAM,这里则应配置为 16000. 内存配置最低值为 2000,但这将低于推荐配置
  • 再次检查确认二进制文件是否位于以下正确路径 (ExecStart)
  • 如果您使用不同目录,请再次检查基本路径

有关以下启动命令中使用的标志的概述,以及其他常用标志,请参阅我们文档的Flags页面。

全节点

[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 \
     --state-pruning=archive \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_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 \
     --state-pruning=archive \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_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 \
     --state-pruning=archive \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

允许外部访问您的节点

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

Moonbeam启动命令实例
[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 \
     --state-pruning=archive \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "INSERT_YOUR_NODE_NAME" \
     --unsafe-rpc-external \
     -- \
     --name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

在前端使用SQL后台

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

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

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

Moonbeam启动命令实例
[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 \
     --state-pruning=archive \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "INSERT_YOUR_NODE_NAME" \
     --frontier-backend-type sql \
     -- \
     --name="INSERT_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 \
     --collator \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonbeam-data \
     --chain moonbeam \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_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 \
     --collator \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/moonriver-data \
     --chain moonriver \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_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 \
     --collator \
     --trie-cache-size 1073741824 \
     --db-cache INSERT_RAM_IN_MB \
     --base-path /var/lib/alphanet-data \
     --chain alphanet \
     --name "INSERT_YOUR_NODE_NAME" \
     -- \
     --name="INSERT_YOUR_NODE_NAME (Embedded Relay)"

[Install]
WantedBy=multi-user.target

运行服务

注册并启动服务:

systemctl enable moonbeam.service
systemctl start moonbeam.service

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

systemctl status moonbeam.service

Service Status

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

journalctl -f -u moonbeam.service

Service Logs

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

注意事项

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

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

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/moonbeam-foundation/moonbeam/releases/download/INSERT_NEW_VERSION_TAG/moonbeam
    
  5. 将二进制文件移动到数据目录:

    mv ./moonbeam /var/lib/moonbeam-data
    
    mv ./moonbeam /var/lib/moonriver-data
    
    mv ./moonbeam /var/lib/alphanet-data
    

    Note

    如果您使用的是手动编译二进制文件,您需要将文件从 ./target/release/moonbeam移至数据目录。

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

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