symbol-bootstrapのセットアップ

はじめに

この記事では、Symbol ブロックチェーンの Dual ノードをセットアップするための手順について説明します。Dual ノードとは、ブロックの生成(ハーベスト)を行う Peer ノードと、ブロック情報を取得するための API ノード、この 2 つの機能を持ったノードです。symbol-bootstrap を使用することで、簡単に Dual ノードのセットアップや管理を行うことができます。この記事を通じて、基本的なセットアップ手順を学び、Symbol Dual ノードをスムーズに運用できるようになることを目指します。

環境

OS は Ubuntu 24.04 を使用し、この記事で以下のものをインストールします。

  • Docker 27.5.1
  • Volta 2.0.2
    • Node.js 20.18.1
  • symbol-bootstrap 1.1.11

Docker のインストール

Docker の apt リポジトリ追加

GPG キーを追加します。

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

リポジトリを追加します。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

インストール

apt コマンドで Docker パッケージをインストールします。 最近の Docker は docker-compose なしで compose が使えますが、symbol-bootstrap は内部で docker-compose を使用しているので合わせてインストールします。

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose

Docker を使用するユーザーに docker グループを追加します。

sudo usermod -aG docker <ユーザー名>

Volta + Node.js のインストール

容易に Node.js のバージョン管理ができる Volta からインストールします。

sudo curl https://get.volta.sh | bash
exec $SHELL -l
volta install node@20

symbol-bootstrap のインストール

NPM にもありますが、開発者による更新が止まってしまっているため、Symbol コアデベロッパーがフォークしてメンテナンスしているバージョンを使用します。ビルド済のファイルが無いため npm install で直接インストール出来ないため、一旦ローカルにクローンします。クローン場所は任意です。

git clone https://github.com/symbol/symbol-bootstrap.git
cd symbol-bootstrap

npm パッケージをインストールしてビルドします。

npm i
npm run build

symbol-bootstrap をグローバルインストールします。

npm install -g .

Dual(Peer+API)ノードのセットアップ

ノードのワーキングディレクトリ作成

ノードデータを格納するディレクトリを作成します。場所はどこでも良いです。この記事では、/opt ディレクトリに作成します。

sudo mkdir /opt/symbol-node
sudo chown <ユーザー名>: /opt/symbol-node
cd /opt/symbol-node

カスタムプリセットの作成

vi custom-preset.yaml

custom-preset.yaml を作成して、カスタムプリセットを入力します。

# 受け入れる委任者の上限数
maxUnlockedAccounts: 100

# 委任者の受入れ上限数を越えた場合の追い出しルール
# Importance: インポータンス順
# Age: 先着順
delegatePrioritizationPolicy: Age

# ハーベスト報酬受け取るアドレス
beneficiaryAddress: <報酬を受け取るアドレス>

# アセンブリ
# peer, api, dual, demo, multinode, services
assembly: dual

# プリセット
# bootstrap, testnet, mainnet
preset: mainnet

# ホスト設定
nodes:
  - host: <ホスト名> # IPアドレスまたは取得したドメイン
    friendlyName: フレンドリー名 # ノードの名前(分かりやすい名前を付ける)
    voting: false # Votingノード(3,000,000XYM必要)にもなる場合はtrue

# HTTPS対応(不要な場合は削除)
httpsProxies:
  - excludeDockerService: false

# 同期試行あたりの最大チェーンバイト数
maxChainBytesPerSyncAttempt: 50MB

# ブロックディスラプター循環バッファーの最大バイト数
blockDisruptorMaxMemorySize: 1000MB

ノード設定と docker compose の生成

symbol-bootstrap config -c custom-preset.yaml --upgrade
symbol-bootstrap compose --upgrade

custom-preset.yaml を変更した場合は、symbol-bootstrap -c custom-preset.yaml --upgrade を実行してください。

ポート開放

ノード間通信と Rest ゲートウェイ(HTTP/HTTPS)に 7900, 3000, 3001 を使用するので、このポートを開放します。

sudo ufw allow 7900
sudo ufw allow 3000
sudo ufw allow 3001

ノードの起動

起動

symbol-bootstrap run -d

稼働確認

symbol-bootstrap healthCheck

正常に稼働していれば、以下の様なメッセージが表示されます。

                         _             _         _                    _         _
  ___  _   _  _ __ ___  | |__    ___  | |       | |__    ___    ___  | |_  ___ | |_  _ __  __ _  _ __
 / __|| | | || '_ ` _ \ | '_ \  / _ \ | | _____ | '_ \  / _ \  / _ \ | __|/ __|| __|| '__|/ _` || '_ \
 \__ \| |_| || | | | | || |_) || (_) || ||_____|| |_) || (_) || (_) || |_ \__ \| |_ | |  | (_| || |_) |
 |___/ \__, ||_| |_| |_||_.__/  \___/ |_|       |_.__/  \___/  \___/  \__||___/ \__||_|   \__,_|| .__/
       |___/                                                                                    |_|
2025-02-02T05:12:58.600Z info     User for docker resolved: 1001:1001
2025-02-02T05:12:58.602Z info     Running image using Exec: symbolplatform/symbol-server:gcc-1.0.3.7 openssl x509 -enddate -noout -in node.crt.pem -checkend 2592000
2025-02-02T05:12:59.096Z info     The node.crt.pem certificate for node node will expire on Jan 31 12:32:28 2026 GMT. No need to renew it yet.
2025-02-02T05:12:59.138Z info     Container db is running
2025-02-02T05:12:59.139Z info     Container node is running
2025-02-02T05:12:59.149Z info     Container broker is running
2025-02-02T05:12:59.149Z info     Container rest-gateway is running
2025-02-02T05:12:59.152Z info     Container node port 7950 -> 7950 is open
2025-02-02T05:12:59.153Z info     Container rest-gateway port 3000 -> 3000 is open
2025-02-02T05:12:59.154Z info     Testing http://localhost:3000/node/health
2025-02-02T05:12:59.239Z info     Rest http://localhost:3000/node/health is up and running...
2025-02-02T05:12:59.239Z info     Network is running!

ノードの停止

サーバやノードのメンテナンス時に停止させます。

symbol-bootstrap stop

証明書の更新

ノード間通信に使用する証明書の有効期限は約 1 年です。期限切れになると周りのノードと通信が出来なくなり停止します。忘れず更新しましょう。1 ヶ月前から更新できます。--force オプションで強制的に更新出来ます。

symbol-bootstrap stop
symbol-bootstrap renewCertificates
symbol-bootstrap run -d

こんなときは?

could not acquire instance lock "./data/recovery.lock"

正常に終了出来なかった場合、target/nodes/node/data に以下のファイルが残ったままになります。

  • server.lock
  • broker.lock
  • recovery.lock

この場合は、recovery.lock を削除してもう一度 symbol-bootstrap を起動させます。 上手くいけば recovery プログラムが動いて、正常にしてくれます。

rm target/nodes/node/data/recovery.lock
symbol-bootstrap run -d

それでも起動しない場合は、.lock ファイルを全て削除して symbol-bootstrap を起動させます。

rm target/nodes/node/data/*.lock
symbol-bootstrap run -d

おわりに

これで Symbol ブロックチェーンの Dual ノードのセットアップが完了しました。この記事を参考にして、ノードのセットアップや管理がスムーズに行えるようになったと思います。ノードの運用中に問題が発生した場合は、公式ドキュメントやコミュニティを活用して解決してください。

Symbol ネットワークの一員として、これからもブロックチェーンの発展に貢献していきましょう。何か質問があれば、遠慮なく聞いてください。お疲れ様でした!

Empowering People with Blockchain
Hugo で構築されています。
テーマ StackJimmy によって設計されています。