はじめに
Oracle Clouod Infrastructureのarm64インスタンスでSymbolノードを動かしたぞって記事を書きたかったです。
でも表題の通りRESTゲートウェイとAPIノードの接続ができない点の解消ができなかったので、仮想マシンをセットアップして起動する手順をいったん記載します。
手順
仮想マシン作成
シェイプはAmprereを選択します。
ノードの推奨要件には届きませんが、4コア24GBにします。
ディスクは推奨容量750GBって書いてあったのですが、デフォルト値が1024GBなのでこれでいきます。IOPSも1500以上が推奨ですが、25,000あるので問題ありません。
ボリュームのアタッチ
仮想マシン作成する画面でボリュームを新規作成したので、Webコンソール上ではアタッチされています。仮想マシンの内部での作業がありますのでやっていきます。
以下でコマンドを確認できます。
これを実行します。
アタッチのタイプにはparavirtualizedとiSCSIがあるみたいですが、iSCSIでアタッチされていましたのでその手順でやりました。
paravirtualizedだとコマンド入力のところが不要になるみたいですね。
ボリュームのマウント
情報が少なくてよくわかってないが、以下の記事を参考にしました。
# parted /dev/sdb mklabel gpt
# parted -a optimal /dev/sdb mkpart primary 0% 100%
# parted /dev/sdb print
# mkfs.xfs /dev/oracleoci/oraclevdb1
# mkdir /mnt/data
# chown opc:opc /mnt/data
# mount /dev/oracleoci/oraclevdb1 /mnt/data
# vi /etc/fstab
/dev/oracleoci/oraclevdb1 /mnt/data xfs defaults 0 2
ネットワーク・セキュリティ・グループ
作成ボタン
3000,3001,7900をあけます。
インスタンスの画面で、VNICにアタッチします。
ポート開放
$ sudo firewall-cmd --add-port=3000/tcp --permanent
$ sudo firewall-cmd --add-port=3001/tcp --permanent
$ sudo firewall-cmd --add-port=7900/tcp --permanent
$ sudo firewall-cmd --reload
Node.jsのインストール
$ node -v
v22.4.1
Dockerのインストール
Oracle Linuxですが、CentOSの手順を実施して無事インストールできました。
Docker Composeのインストール
こちらを参考にさせて頂きます。
docker-composeをdocker上で動かすみたいです。
Symbol Bootstrapのインストール
gitが無いのでインストール
$ sudo yum install -y git
Symbol Bootstrapのインストール
$ git clone https://github.com/symbol/symbol-bootstrap
$ cd symbol-bootstrap
$ npm i
$ npm run build
$ sudo npm i -g .
Symbol Bootstrapのセットアップ
$ mkdir alice
$ cd alice
$ symbol-bootstrap config -p mainnet -a dual
うーむ、Running image using Exec: symbolplatform/symbol-server:gcc-1.0.3.7 bash createNodeCertificates.sh
のとこ、arm64でないイメージを使っているのにうまくいっている。
とりあえず次へ。
$ symbol-bootstrap compose
docker-compose.ymlを編集します。
$ vi target/docker/dockse-compose.yml
version: '2.4'
services:
db:
user: '1000:1000'
environment:
MONGO_INITDB_DATABASE: catapult
container_name: db
- image: mongo:6.0.14
+ image: arm64v8/mongo:6.0.14
command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2
stop_signal: SIGINT
working_dir: /docker-entrypoint-initdb.d
volumes:
- ./mongo:/docker-entrypoint-initdb.d:ro
- ../databases/db:/dbdata:rw
node:
user: '1000:1000'
container_name: node
- image: symbolplatform/symbol-server:gcc-1.0.3.7
+ image: symbolplatform/symbol-server:gcc-1.0.3.7-arm64
command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true
stop_signal: SIGINT
working_dir: /symbol-workdir
restart: on-failure:2
ports:
- '7900:7900'
volumes:
- ../nodes/node:/symbol-workdir:rw
- ./server:/symbol-commands:ro
depends_on:
- db
- broker
broker:
user: '1000:1000'
container_name: broker
- image: symbolplatform/symbol-server:gcc-1.0.3.7
+ image: symbolplatform/symbol-server:gcc-1.0.3.7-arm64
working_dir: /symbol-workdir
command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL
stop_signal: SIGINT
restart: on-failure:2
volumes:
- ../nodes/node:/symbol-workdir:rw
- ./server:/symbol-commands:ro
depends_on:
- db
rest-gateway:
container_name: rest-gateway
user: '1000:1000'
environment:
npm_config_cache: /symbol-workdir
- image: symbolplatform/symbol-rest:2.4.4
+ image: ishidad2/symbol-rest:2.4.3
command: npm start --prefix /app /symbol-workdir/rest.json
stop_signal: SIGINT
working_dir: /symbol-workdir
ports:
- '3000:3000'
restart: on-failure:2
volumes:
- ../gateways/rest-gateway:/symbol-workdir:rw
depends_on:
- db
networks:
default:
ipv4_address: 172.20.0.25
networks:
default:
ipam:
config:
-
subnet: 172.20.0.0/24
arm64版のrestが公式になかったので、こちらでだいさんが作成されていたのを借ります。
Symbol Bootstrapの起動
$ symbol-bootstrap run
起動しました。
ヘルスチェック
$ symbol-bootstrap healthCheck
Running image using Exec: symbolplatform/symbol-server:gcc-1.0.3.7
のところで、arm64版を使っていないので失敗するかなと思ったんですが、エラーが出ませんでした。
APIノードとREST Gatewayがつながらない
なぜだろう。原因は最初からわからないし調べてない。いろいろ試してみてるが解決してない。
情報の取得はできるが、トランザクションがきっと送信できない。
ちなみに
symbol-bootstrap 1.1.10ではconfigから失敗する
$ symbol-bootstrap config -p mainnet -a dual
サーバー証明書か何かを作るときにdockerを起動しているようで失敗しました。それをarm64版のイメージに変えればいいのでしょうが、ちょっと大変そうな気がします。
ストップ&スタートでdbコンテナの名前が変わった
symbol-bootstrap stop
の後、symbol-bootstrap start
したら、dbコンテナの名前がdb
からa2df583cc223_db
に変わりました。
なのでsymbol-bootstrap healthCheck
が通らなくなりました。
理由はわかりません。
いろいろ試してたらならなくなりました。
おわりに
次回は(あれば)、ノードを動かすのに1か月いくらかかったのかを出せたらと思います。
また、OCIについて始めたばっかりなのでリソースを適当に設定しています。勉強してどんどん変えていこうと思います。