ノード管理していく上であったらまぁ便利かなといった部分を追加しました。
目次
環境
Python3.9以上
OpenSSL1.1.1以上
準備
必要なPythonパッケージをインストール
sudo pip install symbol-sdk-python pyopenssl zenlog
ルートにインストールしたくない場合
pip install symbol-sdk-python pyopenssl zenlog --user
peer-tools と certtool をクローン
git clone https://github.com/ccHarvestasya/peer-tools.git
git clone https://github.com/ccHarvestasya/symbol-node-configurator.git
CA プライベートキー生成
cd peer-tools
openssl genpkey -algorithm ed25519 -outform PEM -out ca.key.pem
証明書の生成
python3 ../symbol-node-configurator/certtool.py --working cert --name-ca "my cool CA" --name-node "my cool node name" --ca ca.key.pem
cat cert/node.crt.pem cert/ca.crt.pem | sudo tee cert/node.full.crt.pem
ノードの設定
trustedHosts
Unlockedaccount を取得するには、以下の条件が必要です。
- 実行するマシンの IP/Host をノードの trustedHosts に設定する必要があります(許可されたマシンにしか応答しません)。
- extension.diagnostics が有効になっている必要があります。
trustedHosts はカスタムプリセットに設定すれば良いかと思います。
空にすることで、全ての IP に対して有効となります 。が、セキュリティ的にひじょ~に良くないのでキチンと指定しましょう。
symbol-bootstrap での Peer でローカル上で実行なら 172.20.0.1 を許可すれば良いです。多分。
trustedHosts: 172.20.0.1
「どの IP を許可すれば分からないよ!!」という場合は、一度実行してみてノードログを見ましょう。ignoring unknown packet of type Unlocked_Accounts
を探し出して、表示されてる IP を許可すれば良いです。
<warning> (net::ChainedSocketReader.cpp@71) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 read completed with error: Malformed_Data
<warning> (ionet::SocketReader.cpp@75) D4794B69B5683348F0A1BDF8ACF052CA84C2598E7050FDD9234789A9197FE6F2 @ 203.135.231.85 ignoring unknown packet of type Unlocked_Accounts
<warning> (ionet::PacketHandlers.cpp@115) rejecting packet Unlocked_Accounts with size 8 from 203.135.231.85
diagnostics の有効化
extension.diagnostics は symbol-bootstrap ならデフォルトで有効だと思います。
(target/nodes/dhealth-peer-node/server-config/resources/config-extensions-server.properties)
実行
$ python3 peer_tools.py
peer_tools.py COMMAND [HOSTNAME] [PORT]
COMMANDS
chainInfo /chain/info
nodeInfo /node/info
nodePeers /node/peers
nodeUnlockedaccount /node/unlockedaccount
HOSTNAME
default: 127.0.0.1
PORT
default: 7900
コマンドは長ったらしいので、ci
、ni
、np
、nu
でも動くようにしています。
出力はJson形式です。Restゲートウェイが返すのを真似てます。
$ python3 peer_tools.py ni
{
"version": 16777990,
"publicKey": "7587ECE8D3FA11A075E533E83F2F1CC8E09F7D2E1D1BD547A44AC5D4D4C78242",
"networkGenerationHashSeed": "49D6E1CE276A85B70EAFE52349AACCA389302E7A9754BCF1221E79494FC665A4",
"roles": 1,
"port": 7900,
"networkIdentifier": 152,
"host": "symbol02.harvestasya.com",
"friendlyName": "_Symbol_TestNet_HarvestasyaNode02/.",
"nodePublicKey": "5CFF56769EABA56315233552C849BA9FF6A72130F6AF802996C2EB0EA05AAD6F"
}
peer_simple_rest
peer_tools の機能を Web から確認できるようにしたものです。
peer_tools と同じ機能がRestと同じパスで使用できます。
追加で必要なパッケージをインストール
pip install flask waitress --user
Webサービスの起動
nohup waitress-serve --port=3000 peer_simple_rest:app > waitress-serve.log 2>&1 &
バックグラウンドで起動します。3000ポート解放を忘れずに。
終了は waitress-serve を kill して下さい。
$ ps -A | grep waitress-serve
261858 ? 00:00:01 waitress-serve
$ kill 261858
確認
各自のドメインで以下のパスにアクセスしてください。
- /chain/info
- /node/info
- /node/peers
- /node/unlockedaccount
コメントを残す