[Symbol] XYM未保有でもノード構築で収穫祭

# 概要
- 0XYMでもSymbolノード構築・運用でハーベスティング報酬（手数料）を貰うための構築手順を残します。
- 本記事は、ubuntu 20.04、symbol-bootstrap v1.0.3で確認しています。
- 委任してもいいよという方は「**symbol-node.takagi-tech.com**」まで
- 投げXYMは「**NDLS6GYOIPHATATNAVVOUNJXBD6X4BXU6IRBHIY**」まで

# 事前準備
まずは最新の公式情報に目を通しましょう。

| サイト | 備考 |
|-------------|------------|
| https://symbolnodes.org/ | 全ての情報源 |
| http://explorer.symbolblockchain.io/ | アカウントやトランザクションの確認に便利 |
| https://docs.symbolplatform.com/ja/ | 公式ドキュメント |
| https://github.com/nemtech/symbol-bootstrap | symbol-bootstrapのgithub |

# サーバの準備
今回はAWSでサーバを構築します。[推奨スペック](https://docs.symbolplatform.com/ja/guides/network/running-a-symbol-node.html)は、
「CPU: **8core**、メモリ: **32GB**、容量: **750GB**、Diskスピード: **1500 IOPS SSD**」
とのことなので、EC2インスタンスは
「**t3a.2xlarge** (`CPU: 8core, メモリ: 32GiB, EBS[gp2]: 768GiB`)」
にしました。
AMI：`ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210223`
SecurityGroup：`TCP3000,7900port`を`0.0.0.0/0`で公開（お好みでssh用なども追加してください）
これで推奨スペック基準のubuntuサーバを用意できました。

# 環境構築
symbol-bootstrapを動作させるには、「**Node, Docker, Docker Compose**」がインストールされている必要があります。
下記手順でインストールしました。

既存パッケージ最新化

```
# sudo su -
# apt update -y
# apt upgrade -y
```
引き続きrootユーザのままで、
Nodeのインストール

```
# curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
# apt install -y nodejs
# node -v
v14.16.1
```
npmを最新版にアップデート

```
# npm install -g npm@latest
# npm -v
7.9.0
```
symbol-bootstrapのインストール
（4/12時点の最新バージョンはv1.0.3）

```
# npm install -g symbol-bootstrap@1.0.3
# symbol-bootstrap -v
symbol-bootstrap/1.0.3 linux-x64 node-v14.16.1
```
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.5, build 55c4c88
```
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ユーザーではなく一般ユーザーで操作できるようにします。
ubuntuユーザーをdockerグループに入れ、dockerサービスを再起動します。
ここまでがrootユーザでの作業です。

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

# symbol-bootstrapの導入・起動
ここからは一般ユーザ（ubuntuユーザ）で行います。
まず、データが保存されていくディレクトリの作成と、設定ファイルの作成を行います。

```
$ cd ~/
$ mkdir -p ~/symbol-bootstrap/target
$ cd ~/symbol-bootstrap
$ vi my-preset.yml
-----
nodes:
        - friendlyName: Ninja Hi-performance Symbol-Node
          maxUnlockedAccounts: 64
          beneficiaryAddress: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----
```
推奨スペックとはいえ、現状そこそこリッチな環境なので、「**maxUnlockedAccounts** を **10(default) -> 64**」へ引き上げます。
手数料が送られる、**beneficiaryAddress**は自分のウォレットアドレスを間違えないように入力します。
このウォレットアドレスの残高は0XYMでも問題ありません。
（ここが本記事の趣旨である0XYMでハーベスティングのキモです）

上記の設定で初期化します。
（下記コマンド実行時に、秘密鍵を扱うファイル操作用パスワードも設定します。）

```
$ symbol-bootstrap config -p mainnet -a dual -c my-preset.yml
```

念のため、設定通りになっているかを確認します。

```
$ less target/nodes/node/server-config/resources/config-node.properties
-----
[localnode]
host =
friendlyName = Ninja Hi-performance symbol node
version = 1.0.0.0
roles = Peer,Api
-----
```

大丈夫なことが確認できたので、起動します。

```
$ symbol-bootstrap start --detached
```

起動確認

```
$ symbol-bootstrap healthCheck
                         _             _         _                    _         _
  ___  _   _  _ __ ___  | |__    ___  | |       | |__    ___    ___  | |_  ___ | |_  _ __  __ _  _ __
 / __|| | | || '_ ` _ \ | '_ \  / _ \ | | _____ | '_ \  / _ \  / _ \ | __|/ __|| __|| '__|/ _` || '_ \
 \__ \| |_| || | | | | || |_) || (_) || ||_____|| |_) || (_) || (_) || |_ \__ \| |_ | |  | (_| || |_) |
 |___/ \__, ||_| |_| |_||_.__/  \___/ |_|       |_.__/  \___/  \___/  \__||___/ \__||_|   \__,_|| .__/
       |___/                                                                                    |_|
2021-04-12T13:44:42.140Z info     Container db is running
2021-04-12T13:44:42.141Z info     Container node is running
2021-04-12T13:44:42.146Z info     Container broker is running
2021-04-12T13:44:42.146Z info     Container rest-gateway is running
2021-04-12T13:44:42.149Z info     Container node port 7900 -> 7900 is open
2021-04-12T13:44:42.149Z info     Container rest-gateway port 3000 -> 3000 is open
2021-04-12T13:44:42.157Z info     Testing http://localhost:3000/node/health
2021-04-12T13:44:42.173Z info     Rest http://localhost:3000/node/health is up and running...
2021-04-12T13:44:42.174Z info     Network is running!
```

初回はブロックチェーンの同期に時間が掛かりますが、しばらく経つと[Node List](https://symbolnodes.org/nodes/)から自分のノードが確認できるようになります。
（下記NodeはVoting設定も追加しています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183156/dada3ce5-5685-03bb-afac-2ce1d0aa81ab.png)

あとは委任とハーベスティングされるのをゆっくり待つのみです。
みなさまも良い収穫ライフを！！！

# 次回記事

https://qiita.com/nobu_kyutech/items/ff38c48502d1be835340

# 参考情報
- [さくらのVPSでNEM Symbol のテストネットノード構築](https://qiita.com/curupo/items/12357755b9ac0a23ae22)
- [NEM Symbol テストノード構築で GoTo 大家](https://qiita.com/curupo/items/30569a4ddc9255f65331)
- [[Symbol]委任したいノードが見つからない時にやること](https://qiita.com/raharu0425/items/1f11654dee1f129337c2)