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
```

:::note warn
nis-0.6.101.tgzよりjava 11が必要になりました。
:::

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

```
$ sudo apt install openjdk-11-jre-headless
```

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

```
$ java -version
```

NIS1ダウンロード

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

```
https://bob.nem.ninja/
```

```
$ wget https://bob.nem.ninja/nis-0.6.xxx.tgz
```

解凍

```
$ tar -xzvf nis-0.6.xxx.tgz
```

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

```
$ vim ~/package/nix.runNis.sh
```

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

```
#!/bin/bash

cd nis
-java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter
+nohup java -Xms4G -Xmx6G -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ハーベスト設定や[スーパーノードプログラム](https://nem.io/supernode/)に関しては端折ってあります。公式ドキュメントなどで調べてみてください。

- https://nemproject.github.io/
- https://mizunashi-rin.hatenablog.jp/entry/2017/02/15/002342
- https://qiita.com/ROZ-mofumofu-me/items/92d77413033eb8763a10

ノード構築者が集うSlack

- https://tanuson.slack.com/

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

https://qiita.com/curupo/items/4cff7d5e42f89fc125be