GCP(Google Cloud Platform)でSymbolノードを構築する手順(Ubuntu)

＜＜＜以下の手順を実行するに際しては、あくまでも自己責任でお願いします＞＞＞
＜＜＜発生した不具合や損害に対し、当方は一切の責任を負いません＞＞＞

#１．GCP(Google Cloud Platform)上に新規プロジェクトを作成

＜設定例＞
プロジェクト名：　＜任意入力＞（例：```symbol-node```）
場所：　```組織なし```

#２．GCE(Google Compute Engine) VMインスタンスを作成

作成したプロジェクト(例：```symbol-node```)を選択。
画面左上のナビゲーションメニューを表示させる三本線のボタンをクリックし、```コンピューティング```内の```Compute Engine```内の```VMインスタンス```をクリック。
「VMインスタンス」と表示されている箇所の近くの```作成```ボタンをクリック。

＜設定例＞
名前：　＜任意入力＞（例：```symbol-api-1```）
リージョン：　```asia-northeast1 (東京)```
ゾーン：　```asia-northeast1-a```
[マシンの構成]
マシンファミリー：　```汎用```
シリーズ：　＜任意選択＞
マシンタイプ：　＜任意選択（API, Dual / Voting ノードの推奨スペック：CPU: 4コア / メモリ: 16GB / ディスク: 750GB）＞
ブートディスク：　```Ubuntu 20.04```
　```LTS```のラジオボタンにチェックを入れ、サイズ(GB)欄に任意の数字（例：```400```）を入力し、```選択```ボタンをクリック
ファイアウォール：
　```Httpトラフィックを許可する```にチェックを入れる
　```Httpsトラフィックを許可する```にチェックを入れる

　```作成```ボタンをクリックしてVMインスタンスを作成。インスタンス作成が完了し、インスタンス名の左横に緑色のチェックマークが表示されるのを確認。

#３．ファイアーウォールルールの作成とVMインスタンスへの適用

Symbolノードはhttpノードでは、API接続用に3000番、ノード同士の通信用に7900番、APIブローカー用に7902番のポートを使用するため、これらのポートを開放する。GCPでは先に「ファイアーウォールルール」を作成し、それをVMインスタンスへ適用する手順になる。

　```「ファイアウォールルール」```内の、+マークのある```ファイアウォールルールの作成```を選択。

＜＜設定例＞＞
名前：　```symbol-http-allow```
トラフィックの方向：　```上り```
一致したときのアクション：　```許可```
ターゲット：　```指定されたターゲットタグ```をプルダウンで選択
ターゲットタグ：　```symbol-http-allow```
ソースフィルタ：　```IP範囲```
ソースIPの範囲：　```0.0.0.0/0```
プロトコルとポート：　```指定したプロトコルとポート```のラジオボタンにチェック
　　　　　　　　　　　```tcp```にチェック
　　　　　　　　　　　```tcp```の右横の入力欄に```3000```,```7900```,```7902```と入力

設定内容が入力できたら、```作成```ボタンをクリック。

#４．ファイアウォールルールをGCE (Google Compute Engine)のVMインスタンスに適用

画面左上のナビゲーションメニューを表示させる三本線のボタンをクリックし、その中の```コンピューティング```の項目内の```Compute Engine```内```VMインスタンス```を選択。
対象のVMインスタンスの名前を選択し、出てきた画面で、上の方にある```編集```をクリック。
```ネットワークタグ```項目に、先ほど作成したファイアーウォールルール（例：```symbol-http-allow```）を入力。一番下の保存ボタンをクリック。

#５．IPアドレスの固定化

画面左上のナビゲーションメニューを表示させる三本線のボタンをクリックし、その中の```ネットワーキング```内の```VPCネットワーク```内の```外部IPアドレス```を選択。
出てきた画面で```外部IPアドレス```のタイプをプルダウンで```エフェメラル```から```静的```に変更。
その際出てくるダイアログで、IPアドレスの予約設定の名前の入力が要求されるので、任意入力（```symbol-api-1```など）。

#６．必要なソフトウェアのインストール

VMインスタンスの接続列（SSH）のプルダウンから```ブラウザウィンドウで開く```を選択。

Root権限に切り替え

```
sudo su
```

**Node.js / npm のインストール**

```
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
```

```
apt-get install -y nodejs
```

```
npm install -g npm@latest
```
バージョンを確認

```
node -v
```

（画面表示→）```v14.*.*```

```
npm -v
```

（画面表示→）```*.*.*```

**Symbol Bootstrapのインストール**

```
npm install -g symbol-bootstrap@latest
```

バージョンを確認

```
symbol-bootstrap -v
```

（画面表示→）```symbol-bootstrap/1.*.* linux-x64 node-v14.*.*```

**Docker / Docker Compose のインストール**

Dockerは仮想環境コンテナを実行するためのソフトウェア。Dockerのインストール。

```
apt-get install -y apt-transport-https ca-certificates curl 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-Composeは定義ファイルに従って、コンテナ群を起動するユーティリティソフトウェア。Docker-Composeのインストール。

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

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

バージョン確認

```
docker -v
```
（画面表示→）```Docker version *.*.*, build *******```

```
docker-compose -v
```

（画面表示→）```docker-compose version *.*.*, build *******```

#７．実行ユーザーをDockerグループに追加

```
sudo gpasswd -a ＜ユーザー名＞ docker
```

Root権限からの脱却

```
exit
```

Docker再起動

```
sudo /bin/systemctl restart docker.service
```

再ログイン

```
sudo su ＜ユーザー名＞
```

Dockerグループに入れたかどうかの確認

```
docker info
```

#８．symbol-bootstrap稼働に向けた準備作業

作業フォルダの作成と移動

```
cd #
```

```
mkdir platform && cd $_
```

**カスタム設定ファイルの作成**

symbol-bootstrap の設定するため、任意のYAMLファイル（ここでは「my-preset.yml」）を作成し、config実行の際に流し込む。


```
nano my-preset.yml
```

```
nodes:
    -
        friendlyName: ＜ノードの名称＞
        maxUnlockedAccounts: ＜ハーベスト枠＞
        beneficiaryAddress: ＜ハーベスト報酬の受益アドレス＞
        host: ＜取得したドメイン＞
```

設定しなくても動作はするが、設定できるものはしておくことを推奨。symbol-bootstrapのバージョン更新の際に便利。

#９．symbol-bootstrapの実行

いよいよsymbol-bootstrapの実行。

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

```
symbol-bootstrap compose --upgrade
```

```
symbol-bootstrap run -d
```

エラー等が出なければOK。最後に

```
symbol-bootstrap healthCheck
```

で無事稼働しているか確認。

（画面表示→）```Network is running```

と表示されればOK。

#１０．ハーベストノード化


まずノードのメインウォレットに作業用のXYMを入金するため、秘密鍵を入手。

```
symbol-bootstrap decrypt --source target/addresses.yml --destination add.yml
```

```
less add.yml
```

で表示される、```main```の```address```と```privateKey```を書き留める。
書き留めたら

```
rm add.yml
```
で一時ファイル削除。

その後、```Symbol Wallet```等により、上記```address```に1XYM以上送金。
次に```Symbol Wallet```で上記```privateKey```を用いた秘密鍵インポートによるアカウント作成し、上記```address```から0XYM送金。
最後に、ノードがハーベスティングを行えるよう設定。

```
symbol-bootstrap link
```

以上で作業完了！


#＜　宣　伝　＞

デリゲートハーベスティングには、是非とも以下のノードのご利用を❣

　```0-0-0-high-performance.harvest-node.com```
　```0-0-1-high-performance.harvest-node.com```