Symbol ノード構築で GoTo 大家（入門編）- 2021.12

![IMG20211204081001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/5d27294c-5ff5-7218-3b8f-43344cf0df8b.jpeg)

:::note alert
2023-11-21 こちらの記事は古くなっております。Symbol コミュニティの記事が最新です。
:::

https://symbol-community.com/ja/docs/5


# まえがき

皆様お元気でらっしゃいますでしょうか、コロナ禍がおさまりつつあるこの年末、あぁ年末、もう年末。あっという間に一年が経ちまして。そういえば昨年の今頃、Symbolノード構築手順を書きました。そしてかなりのアクセス数になっておりました。

![Screenshot_20211203.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/41ed5f57-e1be-6e30-b940-1accf5c328c7.png)

やはり[ハーベスト報酬とノード報酬](https://quest.nodes-xym.work/harvest/decrease)で、それなりの利益が出る（可能性がある）というのは大事なことだと思いますね。そして報酬は100年続きます。

この一年を振り返ってみますと、2021年3月に[Symbolメインネットがローンチ](https://coinpost.jp/?p=228319)され[ZaifにSymbolが上場](https://zaif.jp/)、10月には突如[bitbankにも上場](https://bitbank.cc/)されました。また、11月にはコアデブとNGL等との関係が整理され、よりコミュニティ重視へと路線転換を表明、その同意を得る[ハードフォーク（キプロス）](https://coinpost.jp/?p=292609)があり、キービジュアルの刷新が図られサイバーパンクな宇宙海賊風に。コアデブの、特に[ハチェット姉さん(@0x6861746366574)](https://twitter.com/0x6861746366574)がエンドユーザーとのコミュニケーションを積極的に取るようになり情報発信および情報開示の推進が見られました。昨年と比べると情報発信をするユーザーが段違いに増え、Symbol界隈がとてもにぎやかになってきております。実際情報を追いきれません:joy:

![xem2xym.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50227/84b816ea-f9ce-4ab3-c3f9-873873dfcfc8.png)

現在のところ[1400台強のノードが稼働](https://symbolnodes.org/nodes/)しており、Symbolチェーンをベースとしたデータが絶対消えない[NFT-Drive](https://nft-drive.localinfo.jp/)サービスが登場、クラウドファウンディング的な[QUEST](https://quest-bc.com/)サービスなど、個人にエンパワーメントするサービスが続々と登場しています。そして米国:flag_us:[Valkyrie財団](https://valkyrieinvest.com/)が新たに信託に加わり、今後スイス:flag_ch:に「[Fushicho（不死鳥）財団](https://twitter.com/TheFushichou)」の設立、米国デラウェア州:flag_us:に暗号通貨NGO「[Symbolシンジケート](https://twitter.com/SymbolSyndicate)」の設立、また「[リンガフランカ](https://twitter.com/aBermudaCompany)」という組織の設立などが予定されています。いやはや加速してます、してます。

さて今後の期待が高まったところで、[昨年書いたノード構築記事](https://qiita.com/curupo/items/30569a4ddc9255f65331)を読み返しますといささか古くなっておりまして。メインネットローンチ前後の情報収集中の記事だったため、ノード構築手順と委任ハーベスト手順が入り混じっており、混乱を呼ぶものとなっております。ということで、本記事では一旦ノード構築に焦点を絞り、改めて手順を整理したいと思います。ツールの[Symbol Block Explorer(testnet)](https://testnet.symbol.fyi/)や[蛇口WEBアプリ](https://testnet.symbol.tools/)等のURLも変わってたりしますので。

ということで以下は本題の、Symbolノード構築に興味を持った初心者が __テストネット__ でノード構築するところまでの手順です。ちょうどタイミングよくというか昨日リセットされたようですね。

ノード構築に自信がついたらメインネットへ参加しましょう！

# Symbol テストネットノード構築

### 事前準備

- サーバー: VPSをレンタル or 自宅サーバー（より分散を:earth_asia: [Node map](https://symbolnodes.org/nodemap/)）
- OS: Ubuntu 20.04

### symbol-bootstrapのバージョン確認

- https://github.com/symbol/symbol-bootstrap/releases
    - 現時点でバージョンは 1.1.1 でした。こちらは定期的にチェックしましょう。またコアデブ3人をフォローしておくと良いでしょう。
    - https://twitter.com/NCOSIGIMCITYNRE
    - https://twitter.com/Jaguar0625
    - https://twitter.com/0x6861746366574

### 公式ドキュメント

- https://docs.symbol.dev/ja/guides/network/using-symbol-bootstrap.html

### ハードウェア要件

- https://docs.symbolpl.dev/ja/guides/network/running-a-test-net-node.html

本記事では dual node 設定で構築します。

- CPU: 4 cores
- RAM: 16GB
- Disk size: 750 GB
- Disk speed: 1500 IOPS SSD

### 開放するポート

- 3000
- 7900

# サーバー起動後

以下、sudo su - できるユーザーでOSにログインできているとします。

### symbol-bootstrap 稼働要件

- https://github.com/symbol/symbol-bootstrap
    - Node 12.0.0+
    - Docker 18.3.0+
    - Docker Compose 1.25.0+

### Node.js インストール

公式サイト（公式ではnvmでインストールしろとありますが…）

- https://nodejs.org/ja/

```
$ sudo apt install -y curl
$ sudo curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt install -y nodejs
$ node -v
v16.13.1
```

### npm 最新化

```
$ sudo npm install -g npm@latest
$ npm -v
8.2.0
```

### Dockerインストール

既存のパッケージのリストを更新します。

```
$ sudo apt update
```

いくつかの必要になるパッケージをインストールします。

```
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
```

Docker公式リポジトリを登録します。

```
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
```

パッケージデータベースを更新します。

```
$ sudo apt update
```

リポジトリが、デフォルトのUbuntuではなくDockerリポジトリになっていることを確認します。

```
$ apt-cache policy docker-ce
```

Dockerをインストールします。

```
$ sudo apt install docker-ce
```

実行されていることを確認します。

```
$ sudo systemctl status docker
```

sudoなしでDockerコマンドを実行できるようにします。確認をします。

```
$ id -nG
```

グループに追加します。

```
$ sudo usermod -aG docker ${USER}
```

dockerグループに追加されたことを確認します。

```
$ id -nG
```

グループ追加を適用させるためにサーバーから一旦ログアウトおよび再度ログインするか、次のように入力します。


```
$ su - ${USER}
```

バージョン確認

```
$ docker -v
Docker version 20.10.11, build dea9396
```

Dockerのインストールが完了です。

### Docker Compose インストール

バージョンを確認します。

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

要件にあるように2系ではなく1系をインストールします。

```
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

コマンド実行できるように権限を設定します

```
$ sudo chmod +x /usr/local/bin/docker-compose
```

バージョン確認

```
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
```

### Symbol Bootstrap をインストール

リリース情報を確認

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

```
$ sudo npm install -g symbol-bootstrap@1.1.2-alpha-202112032036
$ sudo symbol-bootstrap -v
symbol-bootstrap/1.1.2-alpha-202112032036 linux-x64 node-v16.13.1
```

設定ファイルの生成

なお同期したブロックチェーンのデータが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: <委託可能数>
        beneficiaryAddress: <ハーベスト手数料の送付先ウォレットアドレス>
----
```

建てたいノードタイプによってコマンドが変わります。

- https://docs.symbol.dev/ja/guides/network/running-a-symbol-node.html

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

$ symbol-bootstrap config -p mainnet -a dual    # メインネットの場合
```

privateKeyを扱うファイル操作するときのためのをパスワードを設定する必要があります。

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

生成されたpublicKey等を確認します。
なお、privateKeyが伏字になっていますので、確認したい場合は手順を他記事を探してみてください。

```
$ 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":16777985,"publicKey":"F6A35285E5AF7744C578524012B3FB1CBEEE23AFED3CB019C669BA6104D8D0DC","networkGenerationHashSeed":"3B5E1FA6445653C971A50687E75E6D09FB30481055E3990C84B25E9222DC1155","roles":3,"port":7900,"networkIdentifier":152,"host":"ik1-102-57776.vs.sakura.ne.jp","friendlyName":"CURUPO_TEST","nodePublicKey":"FC7BC8B5F56F483018F4EA70D4335ADFEE45BF08C1F8194757DFD1F0905B35C2"}
```

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

```
$ curl http://localhost:3000/chain/info
{"scoreHigh":"0","scoreLow":"69786224148995062","height":"6841","latestFinalizedBlock":{"finalizationEpoch":3,"finalizationPoint":68,"height":"1440","hash":"BFC81A9E0680618ABDDDEA8D5566388959B0100A8CD13CF715107F655B873C9A"}}
  ↓
{"scoreHigh":"0","scoreLow":"87786224148912949","height":"8641","latestFinalizedBlock":{"finalizationEpoch":4,"finalizationPoint":68,"height":"2160","hash":"0ED79886586F1AD641B7F39A8BAC46CB0A1D6350C6A51012DD4EBE8EA613F7AD"}}
```

ローカルでアクセス可能なら、VPSで払い出されたIPまたは自宅サーバーに割り当ててある固定IPアドレスでも叩いてみましょう。

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

最後に __テストネット__ のノードリストに追加されたか確認してみましょう。

- https://symbolnodes.org/nodes_testnet/

大丈夫なようですね、これであなたもノード大家の仲間入りィィ！！:yum:

https化については以下の記事を参照ください。

- https://qiita.com/curupo/items/3d8705f2b713049e4335

ノードに対してウォレットから委任ハーベストするパートについては、別記事を早めに書きます（予定）。

ともあれノード構築で困ったらノード構築の神々が集うタヌソンSlack道場へ。
有益な情報を得られると思います。それでは！

- https://tanuson.slack.com