#服务 #节点 #运行 #safenode #应用 #管理器 #本地

bin+lib sn-node-manager

用于安装、管理和以服务形式运行 safenode 的命令行应用程序

109 个版本 (9 个破坏性版本)

0.10.1 2024年7月29日
0.9.7 2024年6月12日
0.7.2 2024年3月28日
0.1.11 2023年12月21日
0.1.1 2023年11月29日

#612开发工具

Download history 209/week @ 2024-04-24 2/week @ 2024-05-01 172/week @ 2024-05-08 291/week @ 2024-05-15 183/week @ 2024-05-22 492/week @ 2024-05-29 385/week @ 2024-06-05 148/week @ 2024-06-12 121/week @ 2024-07-03 24/week @ 2024-07-10 105/week @ 2024-07-24 32/week @ 2024-07-31

每月下载量137次
用于 node-launchpad

GPL-3.0 许可协议

1MB
19K SLoC

安全节点管理器

安全节点管理器是一个命令行应用程序,用于安装、管理和以服务形式运行 safenode

它支持 Linux、macOS 和 Windows 系统。

安装

最新版本可以通过 safeup 安装

safeup node-manager

您还可以从本仓库的发行版中获取适用于您平台的二进制文件。

作为服务的节点

Safenode 管理器的主要用例是将 safenode 设置为长期运行的背景服务,使用操作系统提供的服务基础设施。

在macOS和大多数Linux发行版中,支持用户模式服务。传统上,服务是系统级的基础设施,需要提升权限来创建和使用。然而,使用用户模式服务,它们可以在不使用sudo的情况下定义和使用。主要区别在于,用户模式服务需要一个活跃的用户会话,而系统级服务可以在没有任何活跃会话的情况下完全在后台运行。选择哪种更适合他们的用例是用户的决定。在Linux上,一些服务管理器,如用于Alpine的OpenRC,不支持用户模式服务。大多数发行版使用Systemd,它确实支持它们。

本指南中定义的命令将基于用户模式服务运行,因此将不会使用sudo。如果您想运行系统级服务,可以按照相同的指南进行,但只需在每个命令前加上sudo

Windows根本不支持用户模式服务,因此节点管理器必须始终在提升的、管理会话中使用。

创建服务

首先,使用add命令创建一些服务

$ safenode-manager add --count 3 --peer /ip4/139.59.168.228/udp/56309/quic-v1/p2p/12D3KooWFTMtaqu24ddDSXk9v5YxnuhJmTLFRunER1CG4wZ2XLUU

这将下载最新的safenode二进制文件并创建三个服务,这些服务最初将连接到指定的节点。很快,将不再需要指定节点。

有许多参数可用于自定义服务。例如,您可以选择节点运行的端口或safenode的版本。运行safenode-manager add --help以查看所有可用选项。

注意:在所有平台上创建服务都需要提升权限。

现在运行status命令

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          -                                                    ADDED               -
safenode2          -                                                    ADDED               -
safenode3          -                                                    ADDED               -

我们可以看到已添加服务,但它们尚未运行。

启动服务

使用start命令启动每个服务

$ safenode-manager start

不提供任何参数将启动所有可用的服务。如果需要,可以使用--service-name参数单独启动服务。

服务启动后,再次运行status命令

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING              81
safenode2          12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING              82
safenode3          12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING              79

我们可以看到我们的服务正在运行,节点已与其他节点建立连接。

现在,再次运行status命令,但带有--details标志

=================================================
                Safenode Services
=================================================
Refreshing the node registry...
============================
safenode1 - RUNNING
============================
Version: 0.105.0
Peer ID: 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq
RPC Socket: 127.0.0.1:41785
Listen Addresses: Some["/ip4/127.0.0.1/udp/34653/quic-v1/p2p/12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq", "/ip4/192.168.121.7/udp/34653/quic-v1/p2p/12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq"]
PID: 3137
Data path: /var/safenode-manager/services/safenode1
Log path: /var/log/safenode/safenode1
Bin path: /var/safenode-manager/services/safenode1/safenode
Connected peers: 10
<remaining output snipped>

我们将为每个节点获得更多详细信息,包括其日志路径。使用提供的位置,您可以自由查看节点生成的日志。

节点现在可以像这样运行,但出于本指南的目的,我们将做一些更多的事情。

添加更多节点

可以像之前一样再次运行add命令

safenode-manager add --count 3 --peer /ip4/46.101.80.187/udp/58070/quic-v1/p2p/12D3KooWKgJQedzCxrp33u3dBD1mUZ9HTjEjgrxskEBvzoQWkRT9

后续的status命令将显示额外的三个节点,共计六个

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING               4
safenode2          12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING               4
safenode3          12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING               3
safenode4          -                                                    ADDED               -
safenode5          -                                                    ADDED               -
safenode6          -                                                    ADDED               -

同样,新节点尚未启动。

运行start命令启动它们,然后观察状态

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING             138
safenode2          12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING             177
safenode3          12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING             144
safenode4          12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING               2
safenode5          12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG RUNNING               1
safenode6          12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING              30

删除节点

如果我们想删除我们的节点之一,可以使用remove命令。

假设我们想删除第5个服务。首先,我们需要停止该服务。运行以下命令

$ safenode-manager stop --service-name safenode5

观察safenode5已被停止,但其他服务仍在运行

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING              10
safenode2          12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING               5
safenode3          12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING               2
safenode4          12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING               2
safenode5          12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG STOPPED               -
safenode6          12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING              29

现在它已停止,删除它

$ safenode-manager remove --service-name safenode5

status命令将不再显示该服务

vagrant@ubuntu2204:~$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING               2
safenode2          12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING              96
safenode3          12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING             127
safenode4          12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING              76
safenode6          12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING             133

然而,我们仍将在详细视图中看到它

$ safenode-manager status --details
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
<output snipped>
============================
safenode5 - REMOVED
============================
Version: 0.105.0
Peer ID: 12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG
RPC Socket: 127.0.0.1:38579
Listen Addresses: Some(["/ip4/127.0.0.1/udp/58354/quic-v1/p2p/12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG", "/ip4/192.168.121.7/udp/58354/quic-v1/p2p/12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG"])
PID: -
Data path: /var/safenode-manager/services/safenode5
Log path: /var/log/safenode/safenode5
Bin path: /var/safenode-manager/services/safenode5/safenode
Connected peers: -
<output snipped>

升级

可以使用节点管理器不断升级节点服务。

假设我们有五个服务

$ safenode-manager status
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode1          12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap RUNNING               1
safenode2          12D3KooWNbRBR43rdFR44EAbwzBrED3jWUiWKkHD2oabw2jKZ9eF RUNNING               1
safenode3          12D3KooWGYEuqXRhKVF2WK499oCBpkh9c6K7jy8BNSfqGosSzNZ8 RUNNING               1
safenode4          12D3KooWS6WGnhbSfLywaepfZbbqgxTLhr66N1PXU4GVLWDBRZRF RUNNING               1
safenode5          12D3KooWNdEYQAutzcGo26rZayew2rzE24y5VFVxTnsefNevc1Ly RUNNING               1

使用--details标志,我们可以看到它们不是最新版本

$ safenode-manager status --details
=================================================
                Safenode Services
=================================================
Refreshing the node registry...
============================
safenode1 - RUNNING
============================
Version: 0.104.38
Peer ID: 12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap
RPC Socket: 127.0.0.1:37931
Listen Addresses: Some(["/ip4/127.0.0.1/udp/39890/quic-v1/p2p/12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap", "/ip4/192.168.121.114/udp/39890/quic-v1/p2p/12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap"])
PID: 3285
Data path: /var/safenode-manager/services/safenode1
Log path: /var/log/safenode/safenode1
Bin path: /var/safenode-manager/services/safenode1/safenode
Connected peers: 0
<remaining output snipped>

为了简洁,剩余的输出已被省略,但其他四个也是0.104.38。在撰写本文时,最新版本是0.105.3

我们可以使用upgrade命令将每个服务升级到最新版本

$ safenode-manager upgrade
=================================================
           Upgrade Safenode Services
=================================================
Retrieving latest version of safenode...
Latest version is 0.105.3
Downloading safenode version 0.105.3...
Download completed: /tmp/ae310e50-d104-45bc-9619-22e1328d8c8b/safenode
Refreshing the node registry...
<output snipped>
Upgrade summary:
 safenode1 upgraded from 0.104.38 to 0.105.3
 safenode2 upgraded from 0.104.38 to 0.105.3
 safenode3 upgraded from 0.104.38 to 0.105.3
 safenode4 upgraded from 0.104.38 to 0.105.3
 safenode5 upgraded from 0.104.38 to 0.105.3

同样,为了简洁,一些命令输出已被省略,但摘要表明每个服务都是从0.104.38升级到0.105.3

与其他命令一样,如果没有提供参数,upgrade将作用于所有服务,但可以使用--service-name--peer-id参数来升级特定服务。这两个参数都可以多次使用以作用于多个服务。

节点管理器将确定safenode的最新版本,下载它,然后对于每个运行中的服务,如果该服务比最新版本旧,它将停止该服务,用新二进制文件覆盖旧文件,并再次启动该服务。

降级

在某些情况下,可能需要将safenode降级到以前的版本。通过提供--version--force参数,upgrade命令支持此功能,以便强制节点管理器接受较低的版本。

本地网络

Safenode管理器还可以创建本地网络,这对于开发和快速实验非常有用。在本地网络中,节点将作为进程而不是服务运行。本地操作定义在local子命令下。

要创建本地网络,请使用run命令

$ safenode-manager local run
=================================================
             Launching Local Network
=================================================
Retrieving latest version for faucet...
Downloading faucet version 0.4.3...
Download completed: /tmp/4dc310dd-74ef-4dc5-af36-3bc92a882db1/faucet
Retrieving latest version for safenode...
Downloading safenode version 0.105.3...
Download completed: /tmp/f63d3ca8-2b8e-4630-9df5-a13418d5f826/safenode
Launching node 1...
Logging to directory: "/home/chris/.local/share/safe/node/12D3KooWPArH2XAw2sapcthNNcJRbbSuUtC3eBZrJtxi8DfcN1Yn/logs"

Node started

<remaining output snipped>

注意:本地网络不需要提升权限。

检查status命令的输出

$ safenode-manager status
=================================================
                Local Network
=================================================
Refreshing the node registry...
Service Name       Peer ID                                              Status  Connected Peers
safenode-local1    12D3KooWPArH2XAw2sapcthNNcJRbbSuUtC3eBZrJtxi8DfcN1Yn RUNNING               7
safenode-local2    12D3KooWShWom22VhgkDX7APqSzCmXPNsfZA17Y2GSJpznunAp8M RUNNING               0
safenode-local3    12D3KooWJwLaqsHvVaBkTHLn8Zf5hZdBaoC9pUNtgANymjF3XEmR RUNNING               0
safenode-local4    12D3KooWP1dwBpCQa6mNY62h9LYN5w4gsTqpQfsH1789pvbNVkSQ RUNNING               0
safenode-local5    12D3KooWADWar7uP8pgxahjcgNsvpzVdp2HxtwQoc5ytvgjjFN8r RUNNING               0
safenode-local6    12D3KooWEvPZzdGXPFNGBR5xjt55tSTFJa9ByqLvZAWZ9uYRqYh1 RUNNING               0
safenode-local7    12D3KooWAbLW3UfF9VdeTxtha7TMuMmFyhZGpXi9Anv9toNLQgfv RUNNING               0
safenode-local8    12D3KooWMYhdDsp2eUjGGgqGrStGxyVzoZsui9YQH4N9B6Fh36H3 RUNNING               2
safenode-local9    12D3KooWFMQ9rumJKjayipPgfnCP355oXcD6uzoBFZq985ij1MZP RUNNING               7
safenode-local10   12D3KooWEN8bW2yPfBhJPG9w5xT3zkWGqA9JYY7qkgc1LmuWJshF RUNNING               0
safenode-local11   12D3KooWSUi43YFYQxoRk8iyh7XE3SSeFvLYvANjRjSTS2CAXTwF RUNNING               0
safenode-local12   12D3KooWNhwMVs8jBSwsfM6gD4vhwksVUaP2EMmwReNiibMqPBYT RUNNING               0
safenode-local13   12D3KooWDqgKpbrenxeWyAAw2j45wW7tCpiHYxNnTL7tFioBCTSv RUNNING               1
safenode-local14   12D3KooWAxzJjhxrr2QD4UwkrovVTy5PnjWCFkBPrUJdPVzdNmDP RUNNING               0
safenode-local15   12D3KooWCE3Ccp1GEiXLU8pQdYJued5G6xAiRiarSSgXRhHwG6XJ RUNNING               7
safenode-local16   12D3KooWRC9wjjsnUTEjP8F6pNVu4LacgPMYNP8p3WNeBcgqEGZH RUNNING               0
safenode-local17   12D3KooWKNnLBkDXvdyPV8FALGApnZjtyuxhfzBED4boBQX8gwvD RUNNING               7
safenode-local18   12D3KooWGvMXmnGU3s7g8XZXSExmscXfV8cqHrAQkVKicRxJrx5E RUNNING               1
safenode-local19   12D3KooWHFzdXEiajdSbJRRLnJq56qw2pke9HvneeziuWZB7TTsD RUNNING               2
safenode-local20   12D3KooWMWuuiPwz1mASasxDuT2QpkDFg46RjNiY6FXprFrgFAbT RUNNING               7
safenode-local21   12D3KooWAkgCaCPMBG2gkZJRQJwfM5XYyJ66LmCSidXK6R8x2b7q RUNNING               6
safenode-local22   12D3KooWPep6B7YfsXWdmjDtyNvm8TZ3bvmn9dZ9w9CPtssW2Wtz RUNNING               7
safenode-local23   12D3KooWF486Rjn5DZ7VXcZi99bTabZsWNf73dnnfmpdjusdeEu9 RUNNING               0
safenode-local24   12D3KooWLLWGzyFtB3i1WNrsdu2eW4k3gT7Wewf9D8srgb1dNwcj RUNNING               0
safenode-local25   12D3KooWPpVim2rRHeAYTrM8mSkZjUt5SjQ4v5xPF2h7wi8H1jRj RUNNING               0
faucet             -                                                    RUNNING               -

因此,默认情况下,已启动了25个节点进程,以及一个水龙头。水龙头在上传文件时发放代币。现在我们可以对本地网络运行safe命令。

使用本地网络最常见的情况是开发,但您也可以在本地测试许多功能。有关更多详细信息,请参阅主README中的“使用本地网络”部分。

完成后,运行safenode-manager local kill来销毁本地网络。

运行集成测试

有时需要在本地设置中运行集成测试。问题是,系统级测试需要root权限才能运行,它们还会创建真实的服务,这您可能不希望在开发机器上使用。

可以在由sn_node_manager存档目录中的Vagrantfile提供的虚拟机(VM)中运行测试。该机器被定义为使用libvirt而不是Virtualbox,因此需要安装该软件,但这超出了本文档的范围。

假设您已经安装了libvirt,可以通过运行vagrant up来获取虚拟机。一旦机器可用,运行vagrant ssh以在内部获得shell会话。为了运行测试,使用sudo su -切换到root用户。作为配置过程的一部分,当前的safe_network代码被复制到root用户的主目录。要运行测试

cd safe_network
just node-man-integration-tests

Justfile中的目标是创建一个本地网络,然后测试将针对该网络运行。

依赖项

~46-83MB
~1.5M SLoC