さくらのVPSでNEM Symbol のテストネットノード構築

- 2021/08/23 bootstrap v1.0.7 で手順確認。
- 2021/03/17 メインネットがローンチ。bootstrap v1.0.0 が公開されたのでメインネットノードとしての構築手順を確認。

最新技術情報

- Github https://github.com/nemtech/symbol-bootstrap/issues
- Slack https://tanuson.slack.com 

NEM Symbol のテストノード参加者がまだまだ足りないらしい。
で、さくらインターネットのVPSサービスでテストノード構築記事があったらいいなと思いました。
ので、他のブログを参考に、さくらのVPSで、NEM Symbol のテストネットノードを起動させてみました。
さくらインターネットでは、2週間のお試し期間があるので、気軽に構築してみましょう。
そしてできるのであればメインネットローンチ後の常時運用へとコマを進めましょう。

公式ページ（一次情報はよく読むこと）
https://docs.symbolplatform.com/ja/guides/network/using-symbol-bootstrap.html

公式ページの推奨スペック
https://docs.symbolplatform.com/ja/guides/network/running-a-test-net-node.html

さくらでのプラン
https://secure.sakura.ad.jp/order/vps/

- CPU: 8cores
- メモリ: 16GB
- ディスク: SSD 1600GB

あたりを選択してみました。


クレカで決済後のOSインストール時には

- スタートアップスクリプトを利用しない、を選択。
- パケットフィルタ ポート22番を削除（お好みで）。7900番と3000番は解放。
- 公開鍵の登録は、登録しないを選択。

```
ID: ubuntu
PW: 長めで記号入りのパスワードを用意
```

### サーバー起動後

```
$ sudo su -
[sudo] password for ubuntu:

最新化
# apt update -y
# apt upgrade -y
```

Node.js をインストール（バージョンは 12 以上）

```
# apt install -y curl
# curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
# apt install -y nodejs
# node -v
v14.17.5
```

npmを最新版にアップデート

```
# npm install -g npm@latest
# npm -v
7.21.0
```

Symbol Bootstrap をインストール

リリース情報を確認
https://github.com/nemtech/symbol-bootstrap/releases

```
# npm install -g symbol-bootstrap@1.0.7    # バージョンを指定する場合
# npm install -g symbol-bootstrap@alpha    # 最新のalphaバージョンを入れたい場合
# symbol-bootstrap -v
symbol-bootstrap/1.0.7 linux-x64 node-v14.17.5
```

docker のインストール

```
# apt install -y apt-transport-https ca-certificates gnupg-agent software-properties-common
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# apt-key fingerprint 0EBFCD88
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# apt install -y docker-ce docker-ce-cli containerd.io
# docker -v
Docker version 20.10.8, build 3967b7d
```

docker-compose のインストール

最新バージョンを確認（バージョン値を書き換えてください）

https://github.com/docker/compose/releases

```
# curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# docker-compose -v
docker-compose version 1.29.2, build 5becea4c
```

v0.3.2 からエラーが出るようになりました。
docker を root ユーザーではなく一般ユーザーで操作できるようにします。
ubuntu ユーザーを docker グループに入れ、を docker サービスを再起動します。

```
# usermod -aG docker ubuntu
# systemctl restart docker.service
# exit
$ exit
再度、ログインします。
```

設定ファイルの生成
なお同期したブロックチェーンのデータがtarget配下に保存される。

```
$ cd ~/
$ mkdir -p ~/symbol-bootstrap/target
$ cd ~/symbol-bootstrap
```



設定ファイルの作成（やらなくてもOK。ランダム文字列になり、ノードリストのNameに表示されます）
テストネット https://symbolnodes.org/nodes_testnet/
メインネット https://symbolnodes.org/nodes/

```
$ vi my-preset.yml
----
nodes:
    -
        host: <あなたのホスト名>
        friendlyName: <好きな文字列>
        maxUnlockedAccounts: 10    # ←委託可能数、スペック次第
        beneficiaryAddress: <ハーベスト手数料の送付先ウォレットアドレス>
----
```




建てたいノードタイプによってコマンドが変わります。
https://docs.symbolplatform.com/ja/guides/network/running-a-symbol-node.html

```
$ symbol-bootstrap config -p mainnet -a dual    # メインネットの場合
$ symbol-bootstrap config -p testnet -a dual    # テストネットの場合
$ symbol-bootstrap config -p testnet -a dual -c my-preset.yml    # 個別設定を読み込ませる場合
```

秘密鍵を扱うファイル操作するときのためのをパスワードを設定します。

```
? Enter password to use 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!
```

friendlyName 等が、自分のプリセット設定が読み込まれているか確認します。

```
$ less target/nodes/node/server-config/resources/config-node.properties
```

生成された秘密鍵、公開アドレス等を確認します。
なお、秘密鍵が伏字になっていますので、確認したい場合は手順を他記事を検索で探してください。

```
$ less target/addresses.yml
```

コンテナの起動と停止

```
$ symbol-bootstrap start --detached    # 一回目だけ
$ symbol-bootstrap stop                # 停止
$ symbol-bootstrap run --detached      # 二回目から
```

コンテナの起動状態を確認します。

```
$ symbol-bootstrap healthCheck
```

APIゲートウェイの疎通をまずはローカルで確認します。

```
$ curl http://localhost:3000/node/info
{"version":16777216,"publicKey":"94E0D813F2EAB23557472C7181E86D57F99D3DFFDB62D5C5705BCB9EA3A39E8E","networkGenerationHashSeed":"57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6","roles":3,"port":7900,"networkIdentifier":104,"host":"","friendlyName":"94E0D81","nodePublicKey":"DA35A040FAF90A7BF6C6109317AD8F95B377A30A2AF0363F6702D1CDF04C915C"}
```

以下のコマンドを何回か叩いて、チェーン高 (height) が高くなっていけばブロックチェーンの同期はOK

```
$ curl http://localhost:3000/chain/info
{"height":"741","scoreHigh":"0","scoreLow":"9934755933726872","latestFinalizedBlock":{"finalizationEpoch":1,"finalizationPoint":1,"height":"1","hash":"BEED005B82B22FC32DA6FDF4DFEB7C11BA6A8C5C504EB7B9CCF91B9B2A09E020"}}
  ↓
{"scoreHigh":"0","scoreLow":"7341013067143532","height":"361","latestFinalizedBlock":{"finalizationEpoch":1,"finalizationPoint":1,"height":"1","hash":"C87844DF76236C690D37266F298B7A5A19A9B588913F8A6FD34138B92EF5FD88"}}
```

ローカルでアクセス可能なら、VPSで払い出されたIPアドレスでも叩いてみましょう。

```
$ curl http://{払い出されたIPアドレス}:3000/chain/info
{"scoreHigh":"0","scoreLow":"167633496728810663","height":"10837","latestFinalizedBlock":{"finalizationEpoch":9,"finalizationPoint":45,"height":"5760","hash":"44CA32FC58B565A9C39156C7E28F979EB8B80F933A82D6B4454CFF5583BFD548"}}
```

大丈夫なようですね。

ノードも建てたし次はハーベストだ、と思ったあなたは [NEM Symbol テストノード構築で GoTo 大家](https://qiita.com/curupo/items/30569a4ddc9255f65331) 編 に進んでください。

### 参考URL

Symbol node 構築に関する雑感
https://note.com/ooba8686/m/m6c64b6857010/hashtag/291660

【ローンチ直前版】Symbolテストネットノードで自前でハーベスティング
https://nemlog.nem.social/blog/57098

Symbolテストネットノードを建ててみた (v0.10.x Hippo on Ubuntu Server 18.04)
https://nemlog.nem.social/blog/49345