AnsibleでSymbol テストノードを量産できる体制を作る(https化もできるよ)

こんにちは、急にテストノードを建てたくなったので、建てました。
テストノードを量産したかったのでAnsibleを使いました。
本番では秘密鍵を安全に扱える方法を考えたり、セキュリティ対策をしっかりしないとですね。
※動かなくても責任は取れません…

## この記事でやること
- 最小構成でsymbolテストノード構築

## 出来上がるノードの状態
- symbol-bootstrap, symbol-cliが入っています。
- バックグラウンド(systemd)でノードが立ち上がっています。
- 用意した秘密鍵を使ってハーベスティング準備ができます。
- ドメインを用意できればhttps化まで自動でできます。
- ポート制限（ufw）
    - 22
    - 80
    - 443
    - 3000
    - 7900
    - 7902
- conohaは3000円くらいのプランで動作確認済み
    - スワップを作るといい感じに動きました。

## アカウント準備
[symbolのデスクトップアプリケーション](https://github.com/nemgrouplimited/symbol-desktop-wallet/releases)をインストールして、テストネットに適当なアカウントを作成します。

作成したら[faucet](http://faucet-0.10.0.x-02.symboldev.network/)からsymbol.xymを入手しましょう。
ボタンは連打可能ですが控えめにしておきましょう。また使い終わったら返却しましょうね。

## サーバー準備
- 使うスクリプトの関係でUbuntu18.04利用前提です。
- 私はLightSail利用ですが、おそらくOSが同じで公開鍵認証できればどこでも良いです。マシンを使い捨てられるところで試しましょう。私は20回くらい作り直しました。
- メモリ4GB以上のマシンを利用しましょう。メモリが足りないとブロックの同期中に落ちます。

## Ansibleインストール
- macなら[homebrew](https://brew.sh/index_ja)を利用して`brew install ansible`で入ります。
- windowsは…わかりません
- Linuxは[ここ](https://docs.ansible.com/ansible/2.9_ja/installation_guide/intro_installation.html#ubuntu-ansible)を参考にすると良いでしょう。

## ノードの設定

githubからテストノード構築用のスクリプトをダウンロードして設定しましょう。

```shell
# リポジトリをクローン
git clone https://github.com/keisukefunatsu/symbol-testnode-ansible

# コンフィグファイルサンプルをコピーする
cp config-sample.yml config.yml
```

`config.yml`を以下のように編集します。


```shell

# あなたのノードのIPアドレスを入力してください。
server_host: "xxx.xxx.xxx.xxxx"
# あなたのノードのログインユーザ名を入力してください
server_user_name: "xxxxxx"

# ノードにSSHログインするためのキーが存在するパスを入力します。
# 大体~/.ssh以下にあるのではないでしょうか。
ssh_key_file_path: "~/.ssh/xxx.pem"

# テストノードを実行するためのユーザ名とグループ名を決めましょう。
node_user_name: "xxxxxx"
node_user_group: "xxxxxx"


docker_compose_version: 1.27.4
# あなたのノードの名前を書きましょう。
node_friendlyName: "my-awesome-node!"

# 必ずテストネット用の秘密鍵を使うこと！　
# signing_privateKeyの行を削除すると新しい秘密鍵が生成されるので心配なら空にしてもOK！
signing_privateKey: "xxxxxxxxxxx"
# こちらも空でもOKです。
vrf_signing_privateKey: "xxxxxxxxxxx" 

# メモリ不足で落ちるパターンがあったので4GBくらいスワップを作っておきます。
swap_file_size_mb: '4096'

# ドメインを持っている場合はこちらにドメイン名とlet's encryptからのメールの受取先を入力しておくと自動でhttps化してくれます。
# letsencrypt_email: "youremailaddress@example.com" # To receive email from let's encrypt
# domain_name: "example.com" # Domain name to be https

```

## 構築
ここまで準備できたら以下のコマンドを叩いてテストノードを構築しましょう。

```
ansible-galaxy install geerlingguy.swap
ansible-playbook -i hosts.yml playbook.yml
```

成功すると以下のように`ok`と`changed`だけがステータスに表示されるはずです。

![Screen Shot 2020-10-27 at 21.24.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123028/b3ba4f58-55e8-8198-b7d2-aa4ad4a6eb87.png)

https化した場合はこんな感じでドメインを入れてノードの状態確認ができます。

```
https://example.com/node/info
https://example.com/chain/info
```

## ハーベスティングの準備
ここからはサーバーにログインしての作業です。

- ノードのブロック同期が完了するまで待ちましょう。
    - 同期の完了確認は`curl http://localhost:3000/chain/info`を打って出力された内容の"height"の項目が[ここ](http://explorer-0.10.0.x-01.symboldev.network/blocks)で確認できる最新のものと一致しているか確認してください。
    
- 同期が完了したら最後に以下のコマンドを打ちます

```sh
symbol-bootstrap link
```

以上です、アカウント情報を見に行くとimportanceの項目が追加されているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123028/4b86ac1e-790a-1a81-f959-56267e42ca3e.png)


あとは狂タヌ尊様の記事のようにハーベスティングされるのを待つだけです。
https://nemlog.nem.social/blog/50604

ノードは以下の一覧に出てきます。
https://symbolnodes.org/nodes_testnet/

## 確認コマンドなど

- このノード用のもの

```
# 稼働状況とノードのログなんかが見れます。
sudo systemctl status symbol-testnet.service 

# ↑のコマンドでノードが死んでいたら打ってみましょう。
sudo systemctl restart symbol-testnet.service 
```

- symbolのもの

```
# ノードが正常に稼働しているか調べます
symbol-bootstrap healthCheck
# ノードの名前とかがわかります。
curl http://localhost:3000/node/info
# ブロック高なんかがわかります。
curl http://localhost:3000/chain/info
```



## 教えて下さい
- 作成したノードが[ノードリスト](http://explorer-0.10.0.x-01.symboldev.network/nodes)に出てこないのなんでなんでしょう？他にやるべきことがあるのか…
- 全然まだハーベストが始まってません…