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サーバを停止しておきます。
# apache2の停止
sudo systemctl stop apache2
###①-2)https-portalの停止(必要な方のみ)
筆者環境ではhttps化にLet's Ecryptのhttps-portalを利用しています。https-portalを停止します。
# https-portalの停止
# docker-compose.ymlのディレクトリに移動して停止
cd https-portal
docker-compose stop
###①-3)symbol-bootstrapの停止
Symbol-bootstrapを停止します。
# symbol-bootstrapの停止
# symbol-bootstrapのディレクトリに移動して停止
cd ../symbol-bootstrap
symbol-bootstrap stop
##②バックアップ
各サービスを停止したらバックアップを取ります。
アップデート作業失敗時の復旧に必須です。(委任ハーベスターの維持も可能)
###②-1 ) データバックアップ
以下でtarget以下をもろもろバックアップします。
委任ハーベースターの維持に必要なのは、harvester.datになりますが、target配下に含まれます。
# symbol-bootstrapのディレクトリにて。自分が管理しやすい名称で。
# 外部の別サーバーへの保存が望ましい。
cp target ../target-yyyymmdd-ver1.X.X -r
###②-2 ) アドレスバックアップ
もしもの事を考えて、筆者はこのタイミングでprivate addressを復号しておいています。
# 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を更新します。
# symbol-bootstrapを更新。@1.X.Xとかバージョン指定しても良い。
sudo npm update -g symbol-bootstrap
# バージョン確認
symbol-bootstrap -v
###③-2 ) 個人別設定の反映
個人別設定を反映させます。
個人別設定ファイル:custom.yml(my_preset.yml など名前は人それぞれ)は別途用意しておくこと。
docker-compose再構築は基本いらないと思いますが、おまじないでやってます。
# 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の起動と確認
# 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を再起動し、動作確認します。
# 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日の利用期間を過ぎると
上記の④-2)の手順を行っても、https-portalが10秒で落ちます。
その場合、以下手順を行います。
#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サーバーの起動と確認(基本は不要)
# 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化して自動化している方も多いと思いますが、
それらをインターネット上からコピーし拝借して利用しても動かないケースは多いです。
まずは、それぞれの環境別の手順を確立する事が肝要かと思いますので、頑張ってください。