Symbol Node運用 symbol-bootstrap更新方法

Symbol Node運用にて、symbol-bootstrapを更新する方法を整理します。

注意）
　筆者の環境に依存する記述が多いので注意ください。
　WebサーバーとしてApache、HttpsとしてLet's Encryptのhttps-portal　を利用しています。
　そこで、ユーザhomeディレクトリ配下にsymbol-bootstrap　および　https-portal　を配置しています。

#Symbol-bootstrap更新手順
筆者の更新手順を紹介します。


##①停止
symbol-bootstrapを更新する際、各サービスを停止する必要があります。

###①-1）Webサーバー停止（基本不要）
筆者環境では別途Webサーバを起動しているため、最初にWebサーバを停止しておきます。

```shell
# apache2の停止
sudo systemctl stop apache2
```

###①-2）https-portalの停止（必要な方のみ）
筆者環境ではhttps化にLet's Ecryptのhttps-portalを利用しています。https-portalを停止します。

```shell
# https-portalの停止
# docker-compose.ymlのディレクトリに移動して停止
cd https-portal
docker-compose stop
```

###①-3）symbol-bootstrapの停止
Symbol-bootstrapを停止します。

```shell
# symbol-bootstrapの停止
# symbol-bootstrapのディレクトリに移動して停止
cd ../symbol-bootstrap
symbol-bootstrap stop
```
##②バックアップ
各サービスを停止したらバックアップを取ります。
アップデート作業失敗時の復旧に必須です。（委任ハーベスターの維持も可能）

###②-1 ) データバックアップ
以下でtarget以下をもろもろバックアップします。
委任ハーベースターの維持に必要なのは、harvester.datになりますが、target配下に含まれます。

```shell
# symbol-bootstrapのディレクトリにて。自分が管理しやすい名称で。
# 外部の別サーバーへの保存が望ましい。
cp target ../target-yyyymmdd-ver1.X.X -r
```
###②-2 ) アドレスバックアップ
もしもの事を考えて、筆者はこのタイミングでprivate addressを復号しておいています。

```shell
# privateアドレスを復号する。
# symbol-bootstrapのディレクトリにて
symbol-bootstrap decrypt --source target/addresses.yml --destination addresses_plain.yml

# パスワード打つとdecryptされる
vi addresses_plain.yml

# ここで平文にしたアドレス設定を作業端末上のローカル領域にコピーしておく。

# ローカル領域にコピーしたら、サーバ上の平文ファイルは削除しておく
rm addresses_plain.yml
```

##③更新
Symbol-bootstrapを更新して、個人別設定を反映します。

###③-1 ) symbol-bootstrap更新
symbol-bootstrapを更新します。

```shell
# symbol-bootstrapを更新。@1.X.Xとかバージョン指定しても良い。
sudo npm update -g symbol-bootstrap
# バージョン確認
symbol-bootstrap -v
```

###③-2 ) 個人別設定の反映
個人別設定を反映させます。
個人別設定ファイル：custom.yml（my_preset.yml　など名前は人それぞれ）は別途用意しておくこと。
docker-compose再構築は基本いらないと思いますが、おまじないでやってます。

```shell
# symbol-bootstrapのディレクトリに custom.ymlをコピー（省略）

# 設定ファイル反映
symbol-bootstrap config -p mainnet -a dual -c custom.yml --upgrade

# docker-compose.yml再構築
symbol-bootstrap compose --upgrade
```

##④再起動
symbol-bootstrapを再起動します。

###④-1 ) Symbol-bootstrapの起動と確認

```shell
# symbol-bootstrapの起動
symbol-bootstrap run -d

# 起動確認
docker ps

# ヘルスチェック
symbol-bootstrap healthCheck

# 疏通確認を適切に行ってください。
# http://[ip または host]:3000/node/info
# http://[ip または host]:3000/node/unlockedaccount

# ノードリストも確認
# https://symbolnodes.org/nodes/
```

###④-2 ) https-portalの起動と確認（必要に応じて）
https-portalを再起動し、動作確認します。

```shell
# https-portalの起動
cd ../https-portal
docker-compose up -d

# https-portalの起動確認
docker-compose ps

# 疏通確認を適切に行ってください。
# https://[ip または host]:3001/node/info
# https://[ip または host]:3001/node/unlockedaccount
```
###④-3 ) https-portalの再認証（必要に応じて）
なお、筆者環境では、https-portalのdocker-compose.ymlのport:80をコメントアウトしています。
https-portalの再認証ではport:80番を利用するため、90日の利用期間を過ぎると
上記の④－２）の手順を行っても、https-portalが10秒で落ちます。
その場合、以下手順を行います。

```shell
#docker-compose.ymlのports:80を編集して有効化する。

#https-portal起動（再認証）
docker-compose up -d

# 疏通確認を適切に行ってください。
# https://[ip または host]:3001/node/info
# https://[ip または host]:3001/node/unlockedaccount

#再認証が通ったら、一旦https-portalを停止
docker-compose stop

#docker-compose.ymlのports:80をコメントアウトして無効化する。
#なぜこんなことしているかというと、Webサーバーとportが競合するからです。

#https-portal再起動
docker-compose up -d
```

###④-4 ) Webサーバーの起動と確認（基本は不要）

```shell
# apache2の起動
sudo systemctl start apache2

# apache2の起動確認
sudo systemctl status apache2
```

#リカバリ対応

##①symbol-nodeが立ち上がらない場合

###①－1) ロックファイル
symbol-bootstrap更新によりsymbol-nodeが立ち上がらなくなった場合
以下ロックファイルの削除などで解消することがあります。
 broker.lock
 recovery.lock
 server.loc

###①－2) もはや動かん
Symbol-bootstrapの更新のおりにsudo つけ忘れるとかで、権限廻りが壊れると、
修正して再立ち上げすることが困難なケースがあります。
その場合はtarget以下を削除して、クリーンインストールしてください。

ローカル退避していたprivateアドレス等を初期設定として利用し、
データバックアップからharvester.datをサルベージし、
所定の位置に上書きすることで委任ハーベスターは引き継ぐことができます。

#おわりに
運用者によって環境は様々です。
運用手順をShell化して自動化している方も多いと思いますが、
それらをインターネット上からコピーし拝借して利用しても動かないケースは多いです。

まずは、それぞれの環境別の手順を確立する事が肝要かと思いますので、頑張ってください。