使用Systemd在Moonbeam上运行节点¶
概览¶
在基于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.31.1/moonbeam
wget https://github.com/PureStake/moonbeam/releases/download/v0.31.1/moonbeam
wget https://github.com/PureStake/moonbeam/releases/download/v0.31.1/moonbeam
您可以在您的终端运行sha256sum
命令来确认您所下载的是否为正确版本,您应该看到以下输出:
7be10574dee3f5b4fc61fef120e6742cdbee5739a36ebc052144cc3a9bff94f5
7be10574dee3f5b4fc61fef120e6742cdbee5739a36ebc052144cc3a9bff94f5
7be10574dee3f5b4fc61fef120e6742cdbee5739a36ebc052144cc3a9bff94f5
当您检索到二进制文件,您可以直接运行systemd服务开始运行您的节点。
编译二进制文件¶
手动编译二进制文件需要约30分钟和32GB的存储空间。
以下命令将创建最新版本的Moonbeam平行链。
-
克隆Moonbeam repo。
git clone https://github.com/PureStake/moonbeam cd moonbeam
-
检查最新版本:
git checkout tags/$(git describe --tags)
-
如果您已安装Rust,您可跳过以下两个步骤。如果您未安装Rust,请通过执行以下命令通过Rust推荐方式安装Rust和其先决条件:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
接下来,通过运行以下命令更新您的PATH环境变量:
source $HOME/.cargo/env
-
编译平行链二进制文件:
cargo build --release
如果在终端显示_cargo not found error_的错误提示,请将Rust手动添加至您的系统路径或重启系统:
source $HOME/.cargo/env
现在,您可以使用Moonbeam二进制文件运行systemd服务。
运行服务¶
通过以下指令完成所有与服务运行相关的设置。
-
首先,创建一个服务账户:
adduser moonbeam_service --system --no-create-home
adduser moonriver_service --system --no-create-home
adduser moonbase_service --system --no-create-home
-
创建一个目录来存储二进制文件和数据(您可能需要
sudo
):mkdir /var/lib/moonbeam-data
mkdir /var/lib/moonriver-data
mkdir /var/lib/alphanet-data
-
将上一小节所创建的二进制文件复制到创建的文件夹中。如果您是自己编译二进制文件,则需要将二进制文件移动到目标目录(
./target/release/
)。或者,将Moonbeam二进制文件移动到根目录(可能需要sudo
):mv ./moonbeam /var/lib/moonbeam-data
mv ./moonbeam /var/lib/moonriver-data
mv ./moonbeam /var/lib/alphanet-data
-
在存储链上数据的本地目录设置相应的权限:
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
注意事项
对于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连接的总限制。
全节点¶
[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 \
--execution wasm \
--wasm-execution compiled \
--state-pruning=archive \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--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 \
--execution wasm \
--wasm-execution compiled \
--state-pruning=archive \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/moonriver-data \
--chain moonriver \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--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 \
--execution wasm \
--wasm-execution compiled \
--state-pruning=archive \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/alphanet-data \
--chain alphanet \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--name="YOUR-NODE-NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
注意事项
如果您想要运行RPC终端、连接至polkadot.js.org或是运行您自己的应用,使用--unsafe-rpc-external
和/或--unsafe-ws-external
标志来运行能够从外部访问RPC端口的全节点。您能够通过执行moonbeam --help
以获得更多细节。我们不建议收集人节点使用此配置。有关上述标志的概述,请参阅开发者文档的标志页面。
收集人¶
[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 \
--execution wasm \
--wasm-execution compiled \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--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 \
--collator \
--execution wasm \
--wasm-execution compiled \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/moonriver-data \
--chain moonriver \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--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 \
--collator \
--execution wasm \
--wasm-execution compiled \
--trie-cache-size 0 \
--db-cache <50% RAM in MB> \
--base-path /var/lib/alphanet-data \
--chain alphanet \
--name "YOUR-NODE-NAME" \
-- \
--execution wasm \
--name="YOUR-NODE-NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
注意事项
您可使用--promethues-port XXXX
标志(将XXXX
替换成真实的端口号)指定自定义Prometheus端口,平行链和嵌入式中继链都可以进行这项操作。
运行服务¶
注册并启动服务:
systemctl enable moonbeam.service
systemctl start moonbeam.service
最后,验证服务是否正在运行:
systemctl status moonbeam.service
您也可以执行以下命令检查日志:
journalctl -f -u moonbeam.service
如果出于任何原因需要停止服务,可以运行:
systemctl stop moonbeam.service
更新客户端¶
随着Moonbeam网络不断发展,有时需要升级节点软件。升级版本发布后,我们将通过Discord channel通知节点运营者,并告知这些升级是否为必要升级(一些客户端升级为可选操作)。升级过程简单直接,并且对于全节点及收集人,其升级过程一样。
如果您想要更新您的客户端,您可以保持现有的链数据原封不动,只需按照以下步骤更新二进制文件:
-
停止systemd服务:
sudo systemctl stop moonbeam.service
-
移除二进制文件的旧版本:
rm /var/lib/moonbeam-data/moonbeam
rm /var/lib/moonriver-data/moonbeam
rm /var/lib/alphanet-data/moonbeam
-
从Moonbeam GitHub Release页面获取Moonbeam的最新版本
-
如果您使用的是发布的二进制文件,更新版本并运行以下命令:
wget https://github.com/PureStake/moonbeam/releases/download/<NEW VERSION TAG HERE>/moonbeam
如果您想要编译二进制文件,请参考编译二进制文件指引,确保您已通过运行
git checkout
获取最新版本。 -
将二进制文件移动到数据目录:
# 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
-
更新权限:
chmod +x moonbeam chown moonbeam_service moonbeam
chmod +x moonbeam chown moonriver_service moonbeam
chmod +x moonbeam chown moonbase_service moonbeam
-
启动您的服务:
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提前通知节点运营商。
| Created: December 2, 2021