初めに。
こんにちは。
(コストの都合上)dHealthノードの移転をすることにしました。
ほぼ自分用の覚書になるかもしれませんが、その手続きについて記載しておきます。
サーバーのログイン設定などのセキュリティ設定は除外します。あくまでも、dHealthノードの構築と引っ越しをメインとします。
また、そんな難しい話があるわけではありません。
新規構築について、元々の手順はこんな感じでまとめられています。
対象となるOSはUbuntu 22.04。
rootユーザーとは別に、ノードの実行用ユーザーを用意しています。
使用するポートについて。
最初に使用するポートを記載しておきます。前もってポート開放をしておきます。
3000 | API用。 |
7900 | ノード通信用。 |
3001 | API用(HTTPS) |
80 | https-portalで使う予定。 |
443 | https-portalで使う予定。 |
インストール。
基本的にインストールはrootで行います。
インストール用スクリプトをダウンロードする。
下記コマンドを実行し、インストールに必要なスクリプトのダウンロードを行います。
curl -fsSL https://yourdlt.tools/files/install-requirements.sh -o install-requirements.sh
下記のようなファイルがダウンロードされます。
必要なものをすべてインストールする。
以下のものをインストールすればよいようです。。。古くない?
下記コマンドを実行します。
sh install-requirements.sh
Node.jsが古いとかワーニングがいくつか言われますが、dockerなどはこれで導入しました。
この時、
とかって出てきます。
ここで問題があって、
・導入されるNode.jsが14であり古い。
・この警告で登場しているseup_Xがそもそも推奨されていない。
っぽいようです。まぁ、手が入っていないね、ということで。。
こちらを回避します。
まず、不要のため、Node.jsを削除します。
apt-get purge nodejs &&\
rm -r /etc/apt/sources.list.d/nodesource.list &&\
rm -r /etc/apt/keyrings/nodesource.gpg
GPGキーというのをよっこらせ。
apt-get update
apt-get install -y ca-certificates curl gnupg
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 [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
※バージョンは20を指定しています。
最後に
apt-get update
apt-get install nodejs -y
を実行します。
とりあえず20が導入されました。
これでいいのか……?
yourdltのインストール。
dhpのノードはyourdltというのでセットアップしていきます。
下記のコマンドでインストールを行います。
npm i -g yourdlt
cd /opt/dhealth
終わり次第、下記コマンドでバージョンを確認します。
yourdlt -v
導入されているようです。
dHealthノードのセットアップ(実行確認まで)。
rootでの実行は避けられるのであれば避けたいため、ノード実行用のユーザーを作成し、dockerのグループへ追加します。
その後、ノード実行用のユーザーでログインします
ノードを展開する好きなディレクトリを用意します。
今回、Symbol側と合わせてplatformとしました。
mkdir platform
cd platform
次にdHealthノードのセットアップを行います。
本来はいくつか設定をするのですが、設定情報は与えず、手っ取り早く実行することとします。
yourdlt config -p dhealth -t node -a dual
このコマンドにおける、-tの後に続くものがノードの実行環境になります。
このディレクトリの下にノードの情報が保存されていきます。
セットアップが実行されました。ここでパスワードが求められています。
秘密鍵等を暗号化するためのパスワードになります。もちろん、忘れないほうがいいですね。
こんな感じでログが表示されていき、進んでいきます。そのまましばらく待ちます。
これで設定情報が完了しました。
実行ディレクトリに
が作成されていることが確認できます。
なお、設定を行わずにセットアップした理由ですが、ノードを建てるにあたって、
- mainPublicKey
- transportPrivateKey
- remotePrivateKey
- vrfPrivateKey
と各種キーが必要です。
面倒なので、設定ファイル作成 -> セットアップ実行によって各種キー生成 -> 設定ファイル修正というのを、
各種キー生成 -> 設定ファイル修正としました。チョンボですね。
その各種キーを”持っていない場合”、設定ファイルを与えないことで自動的に生成されます。
その後、下記コマンドを実行します。
yourdlt decrypt --source node/addresses.yml --destination ./address.plain.yml
パスワードを求められるため、入力します。
これでカレントディレクトリにaddress.plain.ymlが生成され、開くと必要なキーなどが生成されていることが確認できます。
初めてのセットアップなどの際は、この生成された各種キーを利用します。
そうでない場合、過去に生成したキーを使用して設定します。
なお、このファイル(address.plain.yml)については不要になった際には削除してください。
見ればわかる通り、privateKeyが見れる形で配置されています。
後から必要になる場合は、都度decryptするのがいいと思います。
docker-composeの実行。
yourdlt compose -t node
を実行し、docker-composeを実行できるようにします。
この時にパスワード等が求められます。
ノードの仮実行。
ここまでセットアップを終えれば、ノードの仮実行ができるはずです。
なお、僕は今回引っ越しを主としているため先に同期を行いますが、新規構築の場合下記のことがあります。
- データの引っ越しは不要
- ノードの設定を先に行うことができる
そのため、新規構築の場合は後述のノード設定を先に行うことで、ノードの仮実行ではなく本実行となり、ここで終わりとなります。
というわけで、ノードの実行を叩きます。
yourdlt run -d -t node
実行はバックグラウンドのため、一度実行したらそのままです。
ちゃんと動作しているかは、
docker ps
を実行すると起動中のdockerが表示されるため、
こんな感じで出ていればOKです。
また、
http://[ノードのアドレス]:3000/chain/info
としてアクセスすれば、取り込んだブロック数が確認できます。
ここでheightの値が増加していっているようであれば、同期が進んでいる=正常に起動しているとみなしていいかな、と思います。
先の通り、僕は今回はノードの引っ越しを行うため、同期をあらかた終えてからノードの設定および、データ(委任ハーベスター情報)の引っ越しを行います。
データの引っ越しについて。
また、dhpノードについてはノードの委任ハーベスター情報(harvesters.dat)は自動復元されません。
(fast-syncした場合はSymbol、dhpともに復元されません)
そのため、実行環境以下にある、
/nodes/dhealth-full-node/data/harvesters.dat
を引っ越ししてくる必要があります。
※なお、これの引っ越しについては”同期が終わってから実行する。”ほうがいいらしいです。
ノードの設定について。
ノードの設定はpreset.ymlを作成し、記載します。イメージ的にはこんな感じで。
(僕のがこんな感じなんですが)
nodes:
- friendlyName: [わかりやすい名前を設定する]
host: [ドメインまたはIPアドレスを指定する]
maxUnlockedAccounts: [委任を受け入れられる数を指定する]
beneficiaryAddress: [ハーベスト時のノード報酬受領アドレスを指定する。なくすとノード報酬ゼロ]
mainPublicKey: [ノードに必要な公開鍵]
transportPrivateKey: [ノードに必要な秘密鍵]
remotePrivateKey: [ノードに必要な秘密鍵]
vrfPrivateKey: [ノードに必要な秘密鍵]
transactionSelectionStrategy: [委任数オーバー時の追い出し順]
voting: [votingノードかどうか]
httpsProxies:
-
excludeDockerService: true
こんな感じで記載します。最後のhttpsProxiesはおまじないみたいなものとでも思っておいてください。
(DHPで対応していたかは覚えてないです😅)
上記の設定は(僕が考えるほぼ)最小限の設定のため、それぐらいは必要かなーと思っています。
ノード情報の設定を適用するには。
引っ越し後、またはノードの情報を編集後、その編集を適用するためのコマンドがあります。
yourdlt config -p dhealth -t node -a dual -c プリセットファイル --upgrade
プリセットファイルのところに設定したノード情報のファイルを指定してください。
また、アドレス関係を変更している場合、続けて同様に下記のコマンドも実行してください。
yourdlt compose -t node --upgrade
これで完了しました。
あとは
yourdlt run -d -t node
を実行してノードを表示してください。
実行後、
http://[ipアドレス、またはドメイン]:3000/node/info
でアクセスすると、設定したhost等が表示されます。
例えば僕のdhpノードでいうと、
http://dhealth.sixis.xyz:3000/node/info
このように表示されます。
以上です。お疲れさまでした。
その他
dHealthノードの起動時、なかなか同期が始まらなかったです。接続先ノードがなかなか増えず、安定せず。。。
初期接続用に設定されている? ノードがいくつか倒れているせいなんですかね。
とりあえず「同期がなかなか始まらない!」と思いつつ、数時間様子を見るのが正解なようですね。
コマンドメモ
比較的? 使うことが多そうなコマンドをメモっておきます。参考までに。
※公式を見れば載っていると思いますが。
なお、ここに掲載しているコマンドを僕はシェルとかにしています。忘れるし、楽だからね。
機能 | コマンド | ex. |
ノードの起動 | yourdlt run -d -t [実行DIR] | yourdlt run -d -t node |
ノードの停止 | yourdlt stop -t [実行DIR] | yourdlt stop -t node |
ノードの更新 | yourdlt config -p dhealth -t [実行DIR] -a dual -c [プリセットファイル] –upgrade | yourdlt config -p dhealth -t node -a dual -c preset.yml –upgrade |
ノードのdocker compose更新 | yourdlt compose -t [実行DIR] –upgrade | yourdlt compose -t node –upgrade |
証明書更新 | yourdlt renewCertificates -t [実行DIR] | yourdlt renewCertificates -t node |
証明書更新(強制) | yourdlt renewCertificates -t [実行DIR] –force | yourdlt renewCertificates -t node –force |
以上です。