NTT WebARENA Indigo VPS で NEM Symbol テストネットノードを起動

![PXL_20201206_043749517.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/32a519d4-7e7e-66dc-1932-ac013e09b1ab.jpeg)
※写真と本文は関係はありません。

※2020/12/31 追記。symbol-bootstrap v0.3.2 から root ユーザーでの docker 起動はエラーが出るようになりました。手順を一般ユーザーで行うよう修正しました。
※2021/01/14 追記。symbol-bootstrap v0.4.1。ローンチに向け最終段階の各種バグが修正されました。

いやぁ、年末ですよ皆さん。コロナコロナに明け暮れて、なんだかおかしな年になっちゃいましたね。

とはいえ時は流れて行く！　もういーくつ寝ーると、NEM Symbol メインネットのローンチだ〜（2021/1/14 XEMチェーンのスナップショット時に1XEM持ってると1XYM貰える！）→ [2020/2 に再延期](https://twitter.com/NEM_Japan/status/1344421310961573888?s=20)

価格の方も盛り上がってきまして、ツイッターのタイムラインもかなり盛り上がっています。いいですね、にぎやかなのは。

んで、そろそろ本番でのノード運用をどこのVPSサービスを使おうかなーと「VPS 比較 2020」とかで検索していくつかのサイトを見ていたら、、おおっとNTTさん、なんだかとてもがんばってらっしゃる。キャンペーンにしてもかなり安くない？　みたいな。

![indigo_20201231.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/30175751-df7d-66ad-a804-5581071d0005.jpeg)

ということで、ちょいと Nem Symbol テストノードを起動するところまで試しておきたいと思います。

ノードの必要最低条件

```
・メモリ 4GB
・CPU: 2コア
・HD：20GB
```
https://docs.symbolplatform.com/ja/guides/network/using-symbol-bootstrap.html

ということなので、NTT WebARENA Indigo サービスでのプランは以下を選択しました。

```
・メモリ: 4GB
・CPU: 4GB
・SSD: 80GB
・OS: Ubuntu 18.04
```
https://web.arena.ne.jp/indigo/

クレカで決済した後、最初の最初なので
- 秘密鍵を新規作成します。
- PCローカルに秘密鍵を保存しておきます。
- インスタンスを起動します。
- ターミナルアプリケーション（Putty、Teratermなど）でIDと鍵でログインを試みます。

```
・IPアドレス　…　コントロールパネル内で発行されたIPアドレスを確認
・ログインID　…　ubuntu
・パスワード　…　不要（先程PCローカルに保存した秘密鍵を指定）
```
https://web.arena.ne.jp/indigo/spec/login.html


### サーバーにログイン後

rootユーザーに昇格します。

```
$ sudo su -
```

Node.js をインストールします。

```
ubuntuを最新に
# apt-get update -y && apt-get upgrade -y
nodejsをインストール
# curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
# apt-get install -y nodejs
npmを最新版にアップデート
# npm install -g npm@latest
# node -v
v14.15.3
# npm -v
6.14.10
```

Symbol Bootstrap をインストール

リリースのバージョン値はこちらで確認します。

https://github.com/nemtech/symbol-bootstrap/releases

alpha版 0.4.1 が最新。

```
# npm install -g symbol-bootstrap@alpha    // 0.4.1
# symbol-bootstrap -v
symbol-bootstrap/0.4.1-alpha-202101151722 linux-x64 node-v14.15.4
```

docker のインストール

```
# apt-get 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-get update -y && apt-get install -y docker-ce docker-ce-cli containerd.io
# docker -v
Docker version 20.10.1, build 831ebea
```

docker-compose のインストール

```
# curl -L https://github.com/docker/compose/releases/download/1.27.4/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.27.4, build 40524192
```

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

```
# usermod -g docker ubuntu
# /bin/systemctl restart docker.service
# exit
$ exit
```

ターミナルで再ログインします。

設定ファイルの生成

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

設定ファイルの作成

```
$ vim my-preset.yml
----
nodes:
    -
        friendlyName: curupo-node-01    # ←適当な文字列でいいみたいです
gateways:
    -
        throttlingBurst: 80
        throttlingRate: 40
----
```

テストネットを起動させます。
※意味はAPIおよびピアの両モードを含むデュアルモードに対して上記で作成した自身の設定ファイルを読み込ませる、です。

```
$ cd ~/test-symbol-bootstrap
$ symbol-bootstrap config -p testnet -a dual -c my-preset.yml
                            _               _           _                       _           _
  ___   _   _   _ __ ___   | |__     ___   | |         | |__     ___     ___   | |_   ___  | |_   _ __    __ _   _ __
 / __| | | | | | '_ ` _ \  | '_ \   / _ \  | |  _____  | '_ \   / _ \   / _ \  | __| / __| | __| | '__|  / _` | | '_ \
 \__ \ | |_| | | | | | | | | |_) | | (_) | | | |_____| | |_) | | (_) | | (_) | | |_  \__ \ | |_  | |    | (_| | | |_) |
 |___/  \__, | |_| |_| |_| |_.__/   \___/  |_|         |_.__/   \___/   \___/   \__| |___/  \__| |_|     \__,_| | .__/
        |___/                                                                                                   |_|
```

friendlyName に、自分の書き込んだ設定が読み込まれているか確認します。

```
$ less ~/test-symbol-bootstrap/target/nodes/api-node/userconfig/resources/config-node.properties
```

docker-compose.yml の生成

```
$ symbol-bootstrap compose
```

生成されたファイルの中身をちらっと確認しておきます

```
$ less ~/test-symbol-bootstrap/target/docker/docker-compose.yml
```

いよいよコンテナの起動

```
$ symbol-bootstrap start -d
```

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

```
$ symbol-bootstrap healthCheck
                            _               _           _                       _           _
  ___   _   _   _ __ ___   | |__     ___   | |         | |__     ___     ___   | |_   ___  | |_   _ __    __ _   _ __
 / __| | | | | | '_ ` _ \  | '_ \   / _ \  | |  _____  | '_ \   / _ \   / _ \  | __| / __| | __| | '__|  / _` | | '_ \
 \__ \ | |_| | | | | | | | | |_) | | (_) | | | |_____| | |_) | | (_) | | (_) | | |_  \__ \ | |_  | |    | (_| | | |_) |
 |___/  \__, | |_| |_| |_| |_.__/   \___/  |_|         |_.__/   \___/   \___/   \__| |___/  \__| |_|     \__,_| | .__/
        |___/                                                                                                   |_|
2020-12-06T03:50:15.862Z info     Container db is running
2020-12-06T03:50:15.864Z info     Container api-node is running
2020-12-06T03:50:15.869Z info     Container api-broker is running
2020-12-06T03:50:15.870Z info     Container rest-gateway is running
2020-12-06T03:50:15.873Z info     Container api-node port 7900 -> 7900 is open
2020-12-06T03:50:15.873Z info     Container api-broker port 7902 -> 7902 is open
2020-12-06T03:50:15.874Z info     Container rest-gateway port 3000 -> 3000 is open
2020-12-06T03:50:15.882Z info     Testing http://localhost:3000/node/health
2020-12-06T03:50:15.972Z info     Rest http://localhost:3000/node/health is up and running...
2020-12-06T03:50:15.973Z info     Network is running!
```

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

```
$ curl http://localhost:3000/node/info
{"version":0,"publicKey":"8E885B69D611183223DD6372E12BF8189E0B2C898B00A8D7E57F7A92AD838765","networkGenerationHashSeed":"6C1B92391CCB41C96478471C2634C111D9E989DECD66130C0430B5B8D20117CD","roles":3,"port":7900,"networkIdentifier":152,"host":"","friendlyName":"curupo-node-01"}
```

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

```
$ curl http://localhost:3000/chain/info
{"scoreHigh":"0","scoreLow":"76216686138591054","height":"4817","latestFinalizedBlock":{"finalizationEpoch":4,"finalizationPoint":45,"height":"2160","hash":"65E4BE4BEE77095C02E68FFD8E6394D73C56BA8EA934DB7247E79BF74E570A3C"}}
  ↓
{"scoreHigh":"0","scoreLow":"76216686138591054","height":"4817","latestFinalizedBlock":{"finalizationEpoch":5,"finalizationPoint":44,"height":"2880","hash":"6405CF81AE3D8BDB41E254BB1BAF09807876DF0300944287CA9E6B79C7D05038"}}
```

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

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

大丈夫なようですね！

最後に利用が終わったインスタンスは停止しておきましょう。電気代の無駄。節約、節約。

ということで、Nem Symbol のテストノード起動までさくっと進めることができました。ね、簡単。

このあとは、サーバーにドメイン名を割りあてたり、ssl対応したり、ノードのバージョンが上がったらアップデートしたりとそれなりに対応することはありますが。
そこはまぁ大家さんなんだから手間はかかるってことで、頑張っていきましょう。

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

さぁみんなで NEM Symbol チェーンを支えましょう～

### 参考URL

- [Nemの最新ソースはGithub](https://github.com/nemtech/symbol-bootstrap/issues)
- [技術情報交換はSlackで](https://nem2.slack.com)
- [【ローンチ直前版】Symbolテストネットノードで自前でハーベスティング
]( https://nemlog.nem.social/blog/57098)
- [Symbolテストネットノードを建ててみた (v0.10.x Hippo on Ubuntu Server 18.04)](https://nemlog.nem.social/blog/49345)