【IOST】Serviノード導入手順書（GCE版）

#この手順書について
IOSTのServiノードをGoogle Compute Engine（GCE）を使って立てる人のための手順書。なるべく簡潔に書く。
作成者はIOSTのノード（AiyaaNet）を立てたRYOHOです。Qiita初投稿なので見辛かったらスミマセン。
アイヤーネット(哎呀网)
https://twitter.com/aiyaanet
#導入前提
①インターネットに接続可能な端末（デスクトップ又はノートPC）を持っていること
　→端末の性能は問わない。Google Chromeが動けばよい
②Googleアカウントを持っていること
③IOSTパートナーであり210万IOSTの投票を得ていること
　→この手順書を読んでいる方はこの条件はクリアしている前提で進める。パートナー登録方法は記載しない

#①IOSTアカウントの作成
以下アドレスにアクセスする
https://explorer.iost.io/applyIOST
アクセスすると、ログインフォームが出てくるので下記の値を入力して「ログイン」を押下。
【ユーザ名】**iostApply**
【パスワード】**Qt4v*1BV**
<img width="307" alt="01.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/564a5ef7-e616-5074-4e7e-60b9a756689b.jpeg">
すると、次のような画面が表示される。
<img width="339" alt="02.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/f6948b95-49b1-555d-0179-a53bbc4d0ce5.jpeg">
画面上部の赤い文字群は今は無視してよい。入力値は以下となる。

|項目名|設定内容|
|---|---|
|Account PubKey|Generate KeyPair for meにチェックを入れればよい。自動で入力される。|
|Account Name|IOSTパートナー名と近しい半角英数文字列を入力する。【例】AiyaaNet（パートナー名）　→　aiyaa_net　など|
|Email|IOSTパートナー登録時に使用したメールアドレスを入力すること。|

必要な値を入力し、「私はロボットではありません」にチェックを入れて、「Create」を押下。
しばらく待つと登録が完了し、登録完了画面が表示される。
<img width="528" alt="03.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/0e3ec656-5874-39bd-6c9c-822d5eafaf23.jpeg">
Account Nameが前画面で入力したものと同じであることを確認したら、
**Private Keyと共にコピー＆ペーストし、テキスト形式で必ずローカルに保存**すること。
Private Keyが分からなくなるとこの後の作業が何もできなくなるので必ず保存するべし。
※無くなった場合はアカウント作成からやり無しです(´ω｀)

#②Google Compute Engine（以下GCE）のセットアップ
アカウント作成が済んだら、GCEのセットアップを行う。
下記ドキュメントを参考に進めていく（筆者もこちらの手順を下敷きに記載している）
https://developers.iost.io/docs/ja/4-running-iost-node/Google-Compute-Platform.html
まず下記URLにアクセスする（ChromeでGoogleにログインした状態が好ましい）
https://console.cloud.google.com/compute/
※アクセスして「無料トライアルで300ドル～」と出てきた場合は承諾しておく。
<img width="778" alt="04.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/73680fdd-f819-060f-a4c6-2f3b5f972ebf.jpeg">
「課金を有効にする」を押下。
次の画面で「作成」を押下したらしばし待つ。
<img width="624" alt="05.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/62a32fa9-b6b0-95b4-820c-07c2cff20688.jpeg">
作成が完了したら「新規VMインスタンス」を押下して値を入力していく。
画面に蛍光ペンで示す箇所に同様の値を入力していけばよい。
<img width="719" alt="06.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/85a7a099-0124-35eb-dcb3-9828e5f2bfb6.jpeg">

|項目名|設定内容|
|---|---|
|名前|iost|
|リージョン|asia-northeast1（東京）　※プルダウンで入力|
|ゾーン|asia-northeast1-b　※プルダウンで入力。|
|コア数|8　※推奨値|
|メモリ|16　※推奨値|

CPUプラットフォームやGPUなどはデフォルト値のままでよい。
<img width="416" alt="07.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/07632aad-0c14-a49f-529f-d0ef798320f8.jpeg">

イメージはCentOS 7を選択し、その容量は100GBを設定する。
それ以外のチェック項目は特に設定しなくてよいし、デフォルトのままでOK。

さらに、初回起動時にDockerやiwalletなどが一通りインストールされるように、スクリプトを設定しておく。
「管理」タブを選択して少し下に行くと入力欄があるので
https://developers.iost.io/docs/ja/4-running-iost-node/Google-Compute-Platform.html
に記載されているスクリプトをコピーして貼り付ける。
<img width="467" alt="08.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/7e02f8e6-6829-b62a-012b-4ae78165b38d.jpeg">
尚、初回起動後、このスクリプトは不要になるのでVM作成後のファイアウォール設定作業後、削除する。
「ディスク」タブを選択してディスクを指定する。
<img width="538" alt="09.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/674bb06c-9a73-692f-9cd0-d07803edcd3f.jpeg">
<img width="532" alt="10.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/f05fb78b-c0b9-a25d-f7ec-b7f960e9cea3.jpeg">

ディスク名は「data」でよい。
サイズは大きすぎると色々と他の設定の変更が必要となり、面倒なのでとりあえず2048GBとする。
（クラウドなので後で柔軟に変更できるのでご安心を）
一通り設定したら「作成」を押下する。しばし待つと作成される。
<img width="532" alt="11.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/587b8595-5054-10fe-8973-32663e657944.jpeg">
左側の「iost」を押下すると、詳細設定画面が表示される。
<img width="714" alt="12.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/a0169c74-9acd-1f83-48de-a5ceb3f52463.jpeg">
少し下にスクロールすると「ネットワークインターフェース」の項目がある。
一番右の「詳細を表示」を押下。
<img width="704" alt="13.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/7a5049a0-0a82-3aaa-993c-660270ecd3ba.jpeg">
左メニューの「ファイアウォールルール」を押下。
上部の「ファイアウォールルールを作成」を押下。
必要な情報を一通り入力する（下記を参照すればOK。IPが手打ちになることに注意）
![14.png](https://qiita-image-store.s3.amazonaws.com/0/39453/7dce2cf7-62a6-d2a4-e1c2-3b13030815bc.png)
※元ドキュメントに記載の画像のため英語だが、気にせず同じように入力してOK。
![15.png](https://qiita-image-store.s3.amazonaws.com/0/39453/f6939dc6-89b6-4ff7-ac5d-e8831495732c.png)
IPは手打ちで「0.0.0.0/0」と入れること。
全て入力が終わったら「作成」を押下。

この作業の後、設定した先ほどスクリプトを削除しておくこと。
<img width="656" alt="16.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/810b6149-9c25-7581-1828-2562aff10e7b.jpeg">
VMインスタンスの詳細画面で「編集」を押下し、下にスクロールしていくと
先ほど追加したスクリプトが出てくるので削除しておく。
最後に、この後作業をしていくターミナルを立ち上げる。
https://console.cloud.google.com/
↑からトップ画面に戻り、左メニューでCompute Engineを選ぶと、既に作成したVMが一覧で表示される。
<img width="620" alt="17.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/1c788747-a19e-5a7e-5596-4e140a53b688.jpeg">
右側の接続から「ブラウザウィンドウで開く」を選ぶと、別画面でコンソールが立ち上がる。
<img width="631" alt="18.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/2406ce50-91a2-5223-4496-f123c2ba5389.jpeg">
GCEでのVM作成はとりあえずここまで。ここからはコンソールでの操作を解説する。

#③コンソールでの操作手順
`sudo passwd root`
と入力するとパスワードを2回入力するように求められるので、連続2回同じパスワードを入力。
※パスワードの初期設定なので、既存の何かのパスワードを入力するわけではないことに注意
`sudo su`
rootユーザになる。
`docker ps`
起動しているdockerコンテナ一覧が表示される。
<img width="631" alt="19.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/39453/1aa1fa26-b9a9-8e61-af63-f078290aed11.jpeg">
iwalletのコンテナのIDをここでメモしておくこと。

上記のCONTAINER IDに表示されたIDを使って、コンテナの中に入る。
※表現が正確でないかもしれないがここでは割愛させていただく
`docker exec -it コンテナID /bin/bash`
※コンテナID は 前コマンドで確認したIDに置き換えること

成功するとコンテナの中に入れるので、早速いくつかの設定をしていく。

`./iwallet account import アカウント名 秘密鍵`
※アカウント名は一番最初にIOSTアカウント作成で使用したアカウント名
　秘密鍵はIOSTアカウント作成後に生成された秘密鍵

実行したら、一旦コンテナから抜ける。
`exit`

次に、フルノードを起動する。
`curl https://raw.githubusercontent.com/iost-official/go-iost/master/script/boot.sh | bash`

上記コマンドを実行し、成功するとずらずらと英文が出てくる。
> Pulling iserver ... done
> Creating iserver ... done
> …

などと表示されて、

>If you want to register Servi node, exec:

という記載が見当たれば起動成功。
ここまでの手順で起動失敗することはまず無いので、成功した前提で進める。
まず、フルノード起動後にずらずら出てくるログのうち、以下から始まる2行はコピーして保存しておく。
***
Your node's Public key: ここに文字列があるはず
Your node's Network ID: ここに文字列があるはず
***
それぞれ、公開鍵とネットIDとなる。この後使うコマンドで使用するため、
これらもローカルに保存しておくこと。
再びコンテナに入るので、下記コマンドを実行。

`docker exec -it コンテナID /bin/bash`

Serviノードとして登録するコマンド

`./iwallet sys register 公開鍵 --net_id ネットID --account アカウント名 -s 35.176.24.11:30002`
※日本語部分は下記表を見てそれぞれ置き換えた上で実行すること。

|項目名|設定内容|
|---|---|
|公開鍵|直前のノード起動後に出たログで保存した公開鍵|
|ネットID|直前のノード起動後に出たログで保存したネットID|
|アカウント名|IOSTアカウント登録で使用したアカウント名|

実行後、しばらく経って「SUCCESS」と表示されるまで待つ（40秒くらい）

次に、Serviノードでログインする。

`./iwallet sys plogin --account アカウント名`
※アカウント名は直前でも入力したアカウント名と同様

実行後、しばらく経って「SUCCESS」と表示されるまで待つ（40秒くらい）

最後に、iserver.ymlの修正を行う。

#④iserver.ymlの修正
コンテナから出る
`exit`
iserver.ymlのあるディレクトリまで移動
`cd  /data/iserver`
iserver.ymlを修正するため、viで開く
`vi iserver.yml`
挿入（INSERT）モードに入る
`i`
下記内容に書き換える（通常のテキストエディタと同様の操作で書き換えてOK）
> ノードアクセスを確認後、IOSTが状態をモニターして、マトリックスを通知するように設定をします。＊これはブロックノードだけが対象
>  /data/iserver/iserver.yml にある <node-name>  を自分のノード名（アカウント名が好ましい）に編集します。
> Metrics:
>     pushAddr: do.iost.network:80
>     Username: producer
>     Password: パスワードは関連資料を参照してください
>     Enable: true
>     Id: mainnet:<node-name>

※idの部分は例えばAiyaaNetであれば　id: mainnet:aiyaa_net　とした
修正が終わったら、Escキーを押下する。

上書き保存して閉じる
`:wq`

iserver serviceを再起動する
`docker restart iserver`


以上でServiノードの導入は終わりです。お疲れさまでした( ´･ω･)⊃旦