dHealthノードインストール

環境

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy

node.jsインストール

aptでインストールすると古いバージョンがインストールされるので、最新の20.xをインストールする。

Nodesource GPGキーのダウンロード&インポート

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

debリポジトリの作成

NODE_MAJOR=20
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

インストール

sudo apt update
sudo apt install nodejs -y
sudo npm install -g npm@latest

バージョン確認

$ nodejs -v
v20.8.0

$ npm -v
10.1.0

Dockerのインストール

Docker GPGキーのダウンロード&インポート

sudo apt update
sudo apt install lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

debリポジトリの作成

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker Engine のインストール

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

バージョン確認

$ docker -v
Docker version 24.0.6, build ed223bc

Dockerのログをjournalに出力するよう変更

echo '{"log-driver":"journald","log-opts":{"tag":"docker/{{.ImageName}}/{{.Name}}"}}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

ユーザーをdockerグループに追加

毎回sudoするのが面倒なのでdockerグループに追加する。
<USER>部分は各自の作業ユーザーに変更してください。

sudo gpasswd -a <USER> docker

docker-composeインストール

sudo curl -L https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

YourDLTのインストール

dHealthのノードとなるYourDLTをインストールする。

sudo npm install -g yourdlt

バージョン確認

$ yourdlt -v
yourdlt/1.4.1 linux-x64 node-v20.8.0

セットアップ

sudo mkdir -p /opt/dhealth_node
cd /opt/dhealth_node

設置場所は各自お好みで。
これ以降/opt/dhealth_nodeをカレントとして記載します。

カスタムプリセット

各ノード設定を記述します。
Dualノードにする場合は、voting: falseが必要です。
ドメインを取っている場合はhostに設定します。取ってない場合は行自体不要です。
friendlyNameはノードの名前みたいな物です。好きなワードを設定してください。
maxUnlockedAccountsは、委任者の受け入れ可能数です。数が多くても負荷が上がるということはなさそうです。

vi my-preset.yml
nodes:
  -
    host: dhealth02.harvestasya.com
    friendlyName: _dHealth_HarvestasyaNode02/.This node is a backup.
    beneficiaryAddress: NDU4M2HN5KS2F6OIKQODEYNVTLU6F73T4HMEJMI
    maxUnlockedAccounts: 1
    voting: false

Dualノード作成

作成したカスタムプリセットを読み込んでプリセットを作成します。
パスワードは任意です。好きなパスワードを設定してください。
実行するとtargetディレクトリが作成されます。

$ yourdlt config -p dhealth -a dual -c my-preset.yml
                                _  _  _
  _   _   ___   _   _  _ __  __| || || |_
 | | | | / _ \ | | | || '__|/ _` || || __|
 | |_| || (_) || |_| || |  | (_| || || |_
  \__, | \___/  \__,_||_|   \__,_||_| \__|
  |___/
? Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a password, p
rivate keys will be encrypted. Keep this password in a secure place! <任意のパスワードを入力>

なお、二回目以降は末尾に--upgradeを付けてください。
このとき求められるパスワードは最初に設定したパスワードです。

yourdlt config -p dhealth -a dual -c my-preset.yml --upgrade

docker-compose.yml の生成

コンテナ起動情報を生成します。

$ yourdlt compose
                                _  _  _   
  _   _   ___   _   _  _ __  __| || || |_ 
 | | | | / _ \ | | | || '__|/ _` || || __|
 | |_| || (_) || |_| || |  | (_| || || |_ 
  \__, | \___/  \__,_||_|   \__,_||_| \__|
  |___/                                   
? Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing a password, private keys will be encrypted. Keep this password in a secure place! <任意のパスワードを入力>

こちらも二回目以降は末尾に--upgradeを付けてください。

yourdlt compose --upgrade

コンテナの起動と停止

起動

yourdlt run -d

初回はイメージのダウンロードがあるので少々時間掛かります。

起動確認

yourdlt healthCheck

警告が出てなければOK。初回はほぼでないと思う。

停止

yourdlt stop

バックアップ

ブロックデータのバックアップを取る場合は以下の2つのディレクトリをバックアップしてください。なお、バックアップを取る場合は、停止して行ってください。

target/databases/db
target/nodes/dhealth-full-node/data

再起動時などでエラーが出る事がありますが、その場合はエラーメッセージ等を確認して修正してください。(これがいちばんつらい)

ブロックデータの検索を速くする

データベースにインデックスを追加することで、検索速度を上げることが出来ます。
なお、これはデータベースを作成するタイミングで反映されるので、再同期させる必要があります。

編集するファイル

target/docker/mongo/mongoDbPrepare.js

モザイクの検索

db.transactions.createIndex({ 'transaction.mosaics.id': 1});

レシートの検索

db.transactionStatements.createIndex({ 'statement.receipts.targetAddress': 1 });
db.transactionStatements.createIndex({ 'statement.receipts.senderAddress': 1 });