NEM NIS1 ノード (java版) 構築手順 - 2021.11


NEM(NIS1)チェーンが過去のしがらみ体制とさよならするかどうかの岐路のハードフォークがあるというので、ノード構築して支援しようかと思いました。

と、そこにさすが松岡さん。タイミングよく最新の構築手順を投下してくださいました。感謝感激。
本記事はほぼまんまの手順で、さくらインターネットVPSでの確認した手順になります。

ノードを建てたからといってXEMをハーベスティングできてけっこう儲かるぜ、とはならないレベルのハーベスティング量なので、そこは理解しておいたほうが良いです。

参考(ほぼまんまです)
https://qiita.com/salaryman-toushi/items/390a477ff1c504d96229

さくらインターネットVPSで、メモリ8GB、SSD400GB のVPSを用立てします。(メモリ4GBプランでもいけるかも?⇒同期が途中で止まってしまう…)

https://vps.sakura.ad.jp/
OS: Ubuntu 20.04 LTS
ID: ubuntu
PW: 長い記号入りのパスワードを用意
IP: <振り出されたIPアドレス>
Host: xxx-xxx-xxxxx.vs.sakura.ne.jp

サーバーを起動させたらVPSコントロールパネルで以下の6つのポートを開けておいてください。

NIS1で必要なポート

  • 80/443 Web(let's encryptのインストールで必要)
  • 7890 http
  • 7891 https
  • 7778 WebSocket
  • 7779 WebSocket(SSL)

Ubuntuを更新

$ sudo apt update

Java 8 (正確にはOpenJDK8)のインストール

$ sudo apt install openjdk-8-jdk

Java 8 インストール後のバージョン確認

$ java -version

NIS1ダウンロード

ダウンロード先で最新バージョンのファイル名を確認します

https://bob.nem.ninja/
$ curl -o nis1.tgz https://bob.nem.ninja/nis-0.6.98.tgz

解凍

$ tar -xzvf nis1.tgz

ノードの起動スクリプトを修正

$ vim ~/package/nix.runNis.sh

メモリ使用量の最大値を緩和およびノード起動コマンドをバックグラウンドで動作させるようにする

#!/bin/bash

cd nis
java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter
cd -

#!/bin/bash

cd nis
nohup java -Xms1GB -Xmx4G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter &
cd -

config-user.propertiesを作成してホスト名等を記述

  • config.propertiesを書き換えることで設定は可能ですが非推奨のようです
$ vim ~/package/nis/config-user.properties
----
nem.host = xxx-xxx-xxxxx.vs.sakura.ne.jp

# https://nemnodes.org/nodes/ の Name に載ります。識別が楽に。
nis.bootName = BOOTNAME

# ハーベスト接続人数の上限値。4がデフォルト。
nis.unlockedLimit = 10
----

実行権限の付与

$ cd ~/package
$ sudo chmod +x nix.runNis.sh

ノードの起動

$ ./nix.runNis.sh

プロセス確認

$ ps aux | grep java
ubuntu     16651 56.0 28.3 11054936 2315280 ttyS0 Sl  19:35   0:54 java -Xms1G -Xmx4G -cp .:./*:../libs/* org.nem.deploy.CommonStarter

ノード情報をブラウザで確認

http://xxx-xxx-xxxxx.vs.sakura.ne.jp:7890/node/info

ブロック高を確認

http://xxx-xxx-xxxxx.vs.sakura.ne.jp:7890/chain/height

ヘルスチェック状況を確認

http://xxx-xxx-xxxxx.vs.sakura.ne.jp:7890/heartbeat

5分程待ってノードリストに掲載されるかを確認
https://nemnodes.org/nodes/
⇒<振り出されたIPアドレス> で検索したらひとまず掲載される。詳細情報の掲載はもう少し時間がかかる。

続いてSSL化です。

pipをインストール

$ sudo apt install python3-pip

必要なライブラリをインストール

$ sudo pip3 install btrees
$ sudo pip3 install zope
$ sudo pip3 install zope-schema

Let's Encryptをインストール

$ sudo pip3 install letsencrypt

Let's Encryptを実行

$ sudo letsencrypt certonly --standalone -d xxx-xxx-xxxxx.vs.sakura.ne.jp

stunnelをインストール

$ sudo apt-get install stunnel4

設定を追記

$ sudo vim /etc/stunnel/stunnel.conf
----
[nis]
accept = 0.0.0.0:7891
connect = 7890
cert = /etc/letsencrypt/live/xxx-xxx-xxxxx.vs.sakura.ne.jp/fullchain.pem
key = /etc/letsencrypt/live/xxx-xxx-xxxxx.vs.sakura.ne.jp/privkey.pem

[websocket]
accept = 0.0.0.0:7779
connect = 7778
cert = /etc/letsencrypt/live/xxx-xxx-xxxxx.vs.sakura.ne.jp/fullchain.pem
key = /etc/letsencrypt/live/xxx-xxx-xxxxx.vs.sakura.ne.jp/privkey.pem
----

再起動

$ sudo systemctl restart stunnel4

ブラウザでSSLアクセス確認

https://xxx-xxx-xxxxx.vs.sakura.ne.jp:7891/node/info
https://xxx-xxx-xxxxx.vs.sakura.ne.jp:7891/chain/height
https://xxx-xxx-xxxxx.vs.sakura.ne.jp:7891/heartbeat

3か月に1回証明書更新

Let's Encryptは3か月で証明書が切れるので、3か月に1回、certbot renewコマンドを実行する等して証明書の更新を行う必要があります。

certbotのインストール

$ sudo apt install certbot

certbot renewコマンドの実行は、cron等で自動化するのが便利だと思います。

なおノードのXEMハーベスト設定やスーパーノードに関しては端折ってあります。公式ドキュメントなどで調べてみてください。

ノード構築者が集うSlack

ノードの更新手順はこちら