目的
まずは、Symbolメインネットローンチおめでとうございます!
ローンチはスタートでこれからが全てなので、頑張って記事を書いていこうと思います。
今回は、ノードの構築部分をスピンオフということで・・・
セキュリティ設定とか、dockerの設定とか、symbol-bootstrapの設定をとにかく省きたいので、新規に立ち上げる際にできる限り自動化してみた。
できる限り安全に作るということでAWSを使用。
もちろん使用は 自己責任
で。
まずはAWSアカウント、なければ作成する。(〜10分)
ここに書いてるとおりにアカウントを作るだけで問題なし。
アカウントは2FAすることを推奨
アカウント登録に必要なもの
- あなたの名前・住所
- クレジットカード
- メールアドレス
AWS上のサーバ-(インスタンス)にSSHログインするための鍵作成(〜5分)
事前にないとサーバー作れないので事前に作成する。
順番通りにすれば鍵作れる
サーバーを立ち上げる(~15分)
gitHub上にAWS上に自動で作成するテンプレートから起動することで簡単に起動できる。(mainnetにも一応対応、自己責任で)
https://github.com/keiyow/symbol-aws-cloudformation
やってることは以下の通り、上のgithub上にテンプレート毎あげてるので、カスタムしたい人はどうぞ
- 専用ネットワークを作成
- ファイアウォールを作成(セキュリティグループで3000ポートの開放、SuperNodeSettingsが有効だと7880も開放)
- 固定IPアドレスの取得
- サーバーの作成(Ubuntu20)
- 追加ディスクをマウントし、xfsでフォーマット
- symbol-bootstrapの実行
GithubのREADMEにあるStackボタンを押して作成ウィザードから起動まで
説明 | 図 |
---|---|
テンプレートのあるGithubへ行く | https://github.com/keiyow/symbol-aws-cloudformation |
GithubのREADMEにあるStackボタンを押して作成ウィザードを起動する | |
赤枠の雲のマークを押す | |
次へを押す | |
項目を設定し、次へを押す 項目の説明については下記を参照 |
|
一番下の次へを押す | |
2つのチェックを入れて、スタックの作成を押す。 | |
この状態で10分ほど待つ (CREATE_IN_PROGRESS) |
|
左項目の2つがCREATE_COMPLATEになったら構築完了 |
項目説明
項目 | 説明 |
---|---|
Stack Name | スタック名を指定。これはユニークであればなんでもOK |
Service Name | サーバー名やネットワーク名の冠名を指定。 |
AvailabilityZone1 | AWSのデータセンターが国(リージョン)の中でさらに分かれているというイメージなだけなので適当に選択 |
PublicLocationIP | RESTポート(3000)と通信(7900)ポートに接続できるIPアドレス範囲を指定。 |
DefaultUnixUser | symbolを起動するUNIXユーザー名。わかりやすくsymbolユーザーとしている |
KeyName | 上で作成した鍵を指定。空欄だと作成時にエラーになるので注意。 |
symbolInstanceType | サーバーのスペックを指定。AWSでは種類が多く、従量課金で高くつくことも多いのでちゃんと検討する。でも後からでもスペック変更できるので、とりあえずはt3.largeでも十分なはず。 |
symbolRootVolumeSize |
/ パーティションのディスクサイズ(GB) システム領域。このままで問題なし |
symbolDataVolumeSize |
/mnt/symbol/data パーティションのディスクサイズ(GB) ここにSymbolのデータを集約している。後からでも容量は増やせる |
SymbolNetwork | testnetかmainnetか選ぶ。 重要 |
SymbolAssembly | api,peer,dualの3つから選べる。簡単に説明。 apiはrestを提供し、ブロック生成することはない。(ブロックは保持) peerはブロックを生成することができる dualはapi + peerの機能がある |
SymbolBootstrapVersion | symbol-bootstrap version のバージョンを指定 https://github.com/nemtech/symbol-bootstrap |
SymbolFriendlyName | ノード名を指定。explorerからノード名が確認できる。空だとbootstrapがランダムな名前を付けてくれる |
SymbolCreateVotingFile | 投票権ノードとしてVotingTreeファイルとアカウントを生成するか否か。投票権ノードになりたいわけでない場合は不要。このVotingアカウントとmainアカウントをlinkするトランザクションまでは投げない。(それは手動で) |
SymbolSuperNodeSettings | スーパーノードのagentを作成するか否か。有効にするとsuper node agentプラグラムが動き、ファイアウォールで7880ポートを開放する。 スーパーノードにならないのであれば不要 スーパーノードの登録処理(enrol)まではやらない。 |
ブラウザでノードが動いているか確認してみる
説明 | 図 |
---|---|
出力を押す | |
ChainInfoのURLを押す | |
最初にあるheightの値が増えていることを確認する。増えていればノード参加できている 1の場合、うまくつながってない。 |
サーバーにログインする
説明 | 図 |
---|---|
サービスを選択し、EC2サービスに移動する | |
① 左項目のインスタンスを選択 ② 作成したサーバーを選択 ③ 接続を押す |
|
① セッションマネージャータブを選択 ② 接続を押す |
|
ターミナルが開き、SSH接続した時と同じような状況になる |
ターミナル操作で内容確認
設定したDefaultUnixUserにスイッチする
DefaultUnixUserを変更していなければ、 symbol
という名前のユーザーにスイッチする。
$ sudo su - symbol
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
symbol@sv-dual:~$
bootstrapで展開した位置に移動する
symbol@sv-dual:~$ cd /mnt/symbol/data
symbol@sv-dual:/mnt/symbol/data$
Symbolの状態を確認する
symbol@sv-dual:/mnt/symbol/data$ symbol-bootstrap healthCheck
_ _ _ _ _
___ _ _ _ __ ___ | |__ ___ | | | |__ ___ ___ | |_ ___ | |_ _ __ __ _ _ __
/ __|| | | || '_ ` _ \ | '_ \ / _ \ | | _____ | '_ \ / _ \ / _ \ | __|/ __|| __|| '__|/ _` || '_ \
\__ \| |_| || | | | | || |_) || (_) || ||_____|| |_) || (_) || (_) || |_ \__ \| |_ | | | (_| || |_) |
|___/ \__, ||_| |_| |_||_.__/ \___/ |_| |_.__/ \___/ \___/ \__||___/ \__||_| \__,_|| .__/
|___/ |_|
2021-03-16T08:30:11.096Z info Container db is running
2021-03-16T08:30:11.102Z info Container api-node is running
2021-03-16T08:30:11.113Z info Container api-broker is running
2021-03-16T08:30:11.114Z info Container rest-gateway is running
2021-03-16T08:30:11.122Z info Container api-node port 7900 -> 7900 is open
2021-03-16T08:30:11.124Z info Container api-broker port 7902 -> 7902 is open
2021-03-16T08:30:11.124Z info Container rest-gateway port 3000 -> 3000 is open
2021-03-16T08:30:11.146Z info Testing http://localhost:3000/node/health
2021-03-16T08:30:11.193Z info Rest http://localhost:3000/node/health is up and running...
2021-03-16T08:30:11.194Z info Network is running!
設定されたアカウントを確認する
今回の方法では暗号化していないので秘密鍵は全て見える。(必要に応じてこのaddress.ymlは暗号化するなりして、秘密鍵はwalletに取り込んだり保存しておく)
基本mainアカウントのみを使うことになる。
アカウント周りに関しては、詳細に書かれていましたので参考になりました
symbol@sv-dual:/mnt/symbol/data$ cat target/addresses.yml
version: 2
networkType: 152
nemesisGenerationHashSeed: 45FBCF2F0EA36EFA7923C9BC923D6503169651F7FA4EFC46A8EAF5AE09057EBD
sinkAddress: TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q
nodes:
-
name: api-node
friendlyName: XXXXXX
roles: 'Peer,Api,Voting'
main:
privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
address: TDYUKB2Q3QE2YO4NDJCMPEFF3ZPQGFSUVFXQ4WI
transport:
privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
address: TA4WZKMZIYSFRAHUCTFXOZR24DIBI2C4C7SR7MY
remote:
privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
address: TBBNA43BTWQ2SRUHKBDRIVQTFFQMQXMYVS3VHMA
voting:
privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
address: TAHCXD442C2Q5QUGYZVHWU6ZSPP745VB7SWLXII
vrf:
privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
address: TA56LOSYLTRQGBXJVPYC7VZUZVBHZGUQBYXSX2Q
FAQ的なこと
ノード起動後、ハーベスティングしたいんだけど?
3/25 修正
mainアカウントに10,000xym以上送金すれば、ハーベスティングできる。
"minHarvesterBalance": "10'000'000'000",
Voting(投票ノード)やスーパーノードなどにも参加する場合は、linkコマンドを投げmainアカウントを有効にする必要がある。
linkコマンドのやりかたは linkされてないを参照
(残高も大分必要)
linkされてない
mainアカウントの残高があり、トランザクションを投げる前提なので、自動化はできない。(残高ある秘密鍵を事前にImportするやり方もあったが、なんか危ないので・・・)
mainアカウントに送金後、linkコマンドを発行することでlink transactionがアナウンスされる。
link後は、残高の要件を満たしていればharvestやvotingなどが動く。
ターミナルに接続してlinkコマンドの発行の仕方
$ sudo su - symbol # DefaultUnixUserで変更した場合はsymbolを変える
$ cd /mnt/symbol/data
$ symbol-bootstrap link --useKnownRestGateways
AWSの料金が高い
この作成したAWSでは、以下のサービスで従量課金が発生する。
(固定IPアドレスはサーバーを起動していれば無料)
- EC2インスタンス(サーバー)料金
- EBS(データディスク)料金
- ネットワーク通信料
VPSとAWSで根本的に違うのは、 耐障害性
VPSでは物理ホストが死んだらデータが飛ぶが、AWSやAzureなどクラウドはデータを別で永続保持しているので、物理ホストが壊れて一時停止はあってもまた再開することができる。
ということでAWSで安く抑えるには、リザーブドインスタンス
(スポットインスタンス、セービングプランは説明長くなるので一旦なしで・・・)というのを、年単位で使うこと前提で事前に購入することで割引を受けられ、サーバー代を安くすることが可能
(新規AWSアカウントの場合、前払いが必須)
例えば バージニア北部のt3.largeなら、立ち上げ時は
月 0.0832*24*30 = $59.904(6,520円/月ぐらい)
年 $59.904*12 = $718.848(78,450円/年ぐらい)
1年使用することを前提に一部前払いの場合、
初 $218(23,800円)(初月のみ)
月 $18(1,965円/月ぐらい)
年 218+(18*12) = $434(47,365円)
3年使用することを前提に全前払いとかしたら、大分安くなる
初 $822(89,700円)
月 $0
年 822/3 = $274(29,900円)
全部消したい
Cloudformationで、作成したスタック名(ネストと書いてないほう)を選択して、削除を押す。
2、3分で削除される。