catapult-service-bootstrap その３ ホスト名とポート変更

# 概要

[catapult-service-bootstrap](https://github.com/tech-bureau/catapult-service-bootstrap)を使って[catapult48gh23s.xyz](http://catapult48gh23s.xyz:8000) というオレオレ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`をはずします。

```yaml:docker-compose.yml
  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
```

### 対象ノード

#### フォルダ名変更

コピーでもよい

```bash
$ 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

```bash
vi build/catapult-config/api-node-19/userconfig/resources/config-node.properties
```

`port`を`7919`に、`friendlyName`を`api-node-19`に、外部に公開するなら`host`を設定（たぶん）


```:config-node.properties
[node]
port = 7919
apiPort = 7901
shouldAllowAddressReuse = false
shouldUseSingleThreadPool = false

[localnode]
host = catapult48gh23s.xyz
friendlyName = api-node-19
version = 0
roles = Api
```

### ノード共通

#### peers-api.json

```bash
vi build/catapult-config/:service/userconfig/resources/peers-api.json
```

`:service`のところは、各ノード名を。おそらくこのくらいあるはず。

- peer-node-0
- peer-node-1
- api-node-58

各ノードから`api-node-0`への接続情報を書き換えます。

```:peers-api.json
    {
      "publicKey": "B093385E2319332C1BA0EE6E0779B0A58EC3ECC67118BCFF72FE14D7B3812538",
      "endpoint": {
        "host": "api-node-19",
        "port": 7919
      },
      "metadata": {
        "name": "api-node-19",
        "roles": "Api"
      }
    },
```


#### rest.json

`rest-gateway`の接続情報を変更します。

```bash
vi build/catapult-config/rest-gateway-0/userconfig/rest.json
```

```json: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ポートを開放します。

# 確認

ログ確認

```bash
$ 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を追加する その１ サービス追加
https://qiita.com/planethouki/items/b80fe29157d80a63122c

catapult-service-bootstrapにpeer-nodeを追加する その２ サーバー編
https://qiita.com/planethouki/items/4c73a6b924b92529bd32

catapult-service-bootstrap その３ ホスト名とポート変更
https://qiita.com/planethouki/items/d365f2344c0f7a6c3523

catapult-service-bootstrap その４ チェーンの手動削除
https://qiita.com/planethouki/items/7ec5404701adeb96bb8e

catapult-service-bootstrap その５ catapult.tools.health/network
https://qiita.com/planethouki/items/5ed19ae8ceb67ad6fee0