はじめに
この記事では、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 ネットワークの一員として、これからもブロックチェーンの発展に貢献していきましょう。何か質問があれば、遠慮なく聞いてください。お疲れ様でした!