LoginSignup
16
7
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

Symbol Shoestringでのノード構築備忘録

Last updated at Posted at 2024-01-07

構築したノード

Dual Node(Peer Node + API Node)
・将来的にRest改造を試してみたかったためAPI Nodeの機能が欲しかった

サーバ

レンタルしたサーバ:Contabo Cloud VPS L

推奨に近いスペックで安価だったため選択
※2024年からスペック、料金体系が変わっている模様

項目 推奨 使用したもの
CPU 8 Core 8 Core
RAM 32GB 30 GB
Disk Size 750 GB 800 GB
Disk IOPS 1500 IOPS SSD 詳細な記載なし

構築の前に

contaboサーバにデフォルトでインストールされていたPythonバージョンは3.8でしたがsymbol-shoestringの新しいバージョン(0.1.0)を利用するには3.9が必要なようなので何かしらの方法でPythonバージョンアップをお願いします。
※symbol-shoestringの旧バージョン(0.0.5)はPython3.8で動作することを確認しています。

環境情報

  • Ubuntu 20.04.6 LTS
  • Python 3.9.18
  • pip 23.3.1
  • Docker version 24.0.7, build afdd53b

構築手順

下記ページを参考に実施

操作用アカウント追加(usernameはお好きなものに変更してください)

adduser username
usermod -aG sudo username
su - username

rootアカウントによるログイン禁止設定

※「vi チートシート」などで検索するとviコマンドの基本的な操作方法が分かると思います。

sudo vi /etc/ssh/sshd_config

# ファイル内に存在する下記設定を yes から no に変更
PermitRootLogin no

上記設定を反映

sudo systemctl restart ssh

ミドルウェア追加

sudo apt install -y libssl-dev gettext
pip install PyOpenSSL --upgrade
pip install symbol-shoestring

docker インストール

curl https://get.docker.com | sh
sudo usermod -aG docker username
sudo reboot
sudo systemctl start docker
sudo systemctl enable docker

作業用ディレクトリ(/symbol)作成

cd ~
mkdir symbol

Wizard実行(ノードの設定項目入力)

python3 -m shoestring.wizard

Wizard内の詳細な設定は下記動画が大変参考になりました。

※ノードのハーベスト報酬を受け取りたい方はbeneficiary addressの設定をお忘れなく。
image.png

ノード起動

cd ~/symbol
docker compose up -d

ファイアウォール設定

公開したポート:80、3000、3001、7900、SSH用ポート

設定を変更したい場合の操作(upgrade)

ノード停止

docker compose down

設定更新

shoestring/overrides.iniファイルを更新

sudo vi ~/symbol/shoestring/overrides.ini

Wizardでupgrade実行

python3 -m shoestring.wizard

image.png

ノード起動

docker compose up -d

※上記はづ~さんに教えていただきました。ありがとうございます!
shoestringに関する操作をまとめてくださってますのでこちらもご参照ください。

+αの設定

NFT-DriveやCOMSAのエクスプローラー検索速度やXEMBookの表示速度向上

コンテナ起動

cd ~/symbol
docker compose exec db bash

インデックス作成

mongo --host db
use catapult
db.transactions.createIndex({'transaction.mosaics.id' : 1});
db.transactionStatements.createIndex({'statement.receipts.targetAddress' : 1});
db.transactionStatements.createIndex({'statement.receipts.senderAddress' : 1});
db.transactions.reIndex();
db.transactionStatements.reIndex();
exit
exit

反映確認

cd ~/symbol
docker compose exec db bash
mongo --host db
use catapult
db.transactions.find({'transaction.mosaics.id': NumberLong("-6242235878428273386")}).explain('executionStats');

explain('executionStats')を実行してwinningPlanを確認して"stage" : "IXSCAN" が表示されていればOK

> db.transactions.find({'transaction.mosaics.id': NumberLong("-6242235878428273386")}).explain('executionStats');
{
        "explainVersion" : "1",
        "queryPlanner" : {
                "namespace" : "catapult.transactions",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "transaction.mosaics.id" : {
                                "$eq" : NumberLong("-6242235878428273386")
                        }
                },
                "maxIndexedOrSolutionsReached" : false,
                "maxIndexedAndSolutionsReached" : false,
                "maxScansToExplodeReached" : false,
                "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                                "stage" : "IXSCAN",★
                                ...

■検証
https://node.exymlab.com:3001/transactions/confirmed?embedded=true&transferMosaicId=0F2AFAE62B575AB3

インデックス見直し前の検索速度:5230 ms
image.png

見直し後の検索速度:995 ms
image.png

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7