環境
$ 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 });
コメントを残す