概要
catapult-service-bootstrapを使ってcatapult48gh23s.xyz というオレオレcatapultをやっています。
catapult-service-bootstrapは、docker composeを使って、複数のノードをひとつのマシンで立ち上げることができます。
そのため、すべてが同じポートで立ち上がります。
これにより、外部への公開がしにくいです。(そういう用途のものではないのですが)
また、別のマシンで立ち上げたcatapult-service-bootstrapと接続するときに、ホスト名が重複するため、コンソールログがわけわからんことになります。
なので、今回はホスト名をポート番号を変更してみたいと思います。
前提
一度、初期状態でdocker-compose up
をしている。
対象ノード
api-node-0
をapi-node-19
にして、7900
番ポートを7919
番ポートに変更。
作業
停止
$ docker-compose stop api-node-0
$ docker-compose stop rest-gateway
全体
docker-compose.yml
api-node-0
の箇所をぜんぶapi-node-58
にします。
使えないと思うので、depends_on
からgenerate-configs
をはずします。
api-node-19-nemgen:
build: dockerfiles/nemgen
command: bash -c "/bin-mount/wait /state/configs-generated && /bin/bash /userconfig/nemgen.sh && touch /state/api-node-19-nemgen"
stop_signal: SIGINT
volumes:
- ./build/nemesis/:/nemesis
- ./data/api-node-19:/data:rw
- ./bin/bash:/bin-mount
- ./build/state:/state:rw
api-node-19:
build: dockerfiles/catapult
command: bash -c "/bin-mount/wait /state/api-node-19-nemgen && /bin/bash /userconfig/startServer.sh"
ports:
- "7919:7919"
stop_signal: SIGINT
volumes:
- ./build/catapult-config/api-node-19/userconfig/resources/:/userconfig/resources/
- ./data/api-node-19:/data:rw
- ./bin/bash:/bin-mount
- ./build/state:/state
depends_on:
- api-node-19-nemgen
対象ノード
フォルダ名変更
コピーでもよい
$ mv build/catapult-config/api-node-0 build/catapult-config/api-node-19
$ mv data/api-node-0 data/api-node-19
config-node.properties
vi build/catapult-config/api-node-19/userconfig/resources/config-node.properties
port
を7919
に、friendlyName
をapi-node-19
に、外部に公開するならhost
を設定(たぶん)
[node]
port = 7919
apiPort = 7901
shouldAllowAddressReuse = false
shouldUseSingleThreadPool = false
[localnode]
host = catapult48gh23s.xyz
friendlyName = api-node-19
version = 0
roles = Api
ノード共通
peers-api.json
vi build/catapult-config/:service/userconfig/resources/peers-api.json
:service
のところは、各ノード名を。おそらくこのくらいあるはず。
- peer-node-0
- peer-node-1
- api-node-58
各ノードからapi-node-0
への接続情報を書き換えます。
{
"publicKey": "B093385E2319332C1BA0EE6E0779B0A58EC3ECC67118BCFF72FE14D7B3812538",
"endpoint": {
"host": "api-node-19",
"port": 7919
},
"metadata": {
"name": "api-node-19",
"roles": "Api"
}
},
rest.json
rest-gateway
の接続情報を変更します。
vi build/catapult-config/rest-gateway-0/userconfig/rest.json
"apiNode": {
"host": "api-node-19",
"port": 7919,
"publicKey": "B093385E2319332C1BA0EE6E0779B0A58EC3ECC67118BCFF72FE14D7B3812538"
},
"websocket": {
"mq": {
"host": "api-node-19",
開始
$ docker-compose up -d --build api-node-19
$ docker-compose start rest-gateway
ファイアウォール設定
外部に公開するなら、7919ポートを開放します。
確認
ログ確認
$ docker-compose logs api-node-19
peer-node-1
との接続が成功しています。
<info> (ionet::PacketSocket.cpp@448) connected to peer-node-1 [172.18.0.2:7900]
<debug> (net::Challenge.cpp@55) verify signature result: true
<debug> (net::VerifyPeer.cpp@188) VerifyServer completed with Success
<info> (extensions::PeersConnectionTasks.cpp@97) connection attempt to peer-node-1 @ peer-node-1 completed with Accepted
所感
APIノードを外部に公開する意味はあるのだろうか。
catapult48gh23s.xyz:7919
で実際に公開しています。
もし、外部にrest-gatewayだけを立てて、このAPIノードに接続するなら、websocketとかmqとかのポートが必要になってきそう。7901
や7902
を使っている雰囲気だけど、まだよく調べてない。
関連記事
catapult-service-bootstrapにpeer-nodeを追加する その1 サービス追加
https://qiita.com/planethouki/items/b80fe29157d80a63122c
catapult-service-bootstrapにpeer-nodeを追加する その2 サーバー編
https://qiita.com/planethouki/items/4c73a6b924b92529bd32
catapult-service-bootstrap その3 ホスト名とポート変更
https://qiita.com/planethouki/items/d365f2344c0f7a6c3523
catapult-service-bootstrap その4 チェーンの手動削除
https://qiita.com/planethouki/items/7ec5404701adeb96bb8e
catapult-service-bootstrap その5 catapult.tools.health/network
https://qiita.com/planethouki/items/5ed19ae8ceb67ad6fee0