1
1

More than 3 years have passed since last update.

【Hyperledger Fabric】Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点

Posted at

はじめに

Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点を書きます。
今回はfabric-samplesfirst-networkをネットワーク設定に用いるものとします。
fabric-node-sdkを使ったSDKアプリはdockerコンテナとして動いています。

状況を表したものが以下です。
マシン2ではCAやordererも動作していますが、図からは除いています。
スクリーンショット 2019-12-21 23.47.47.png

設定

SDKアプリを使用する際に用いるconnection profileは以下になります。

{
    "name": "first-network-org1",
    "version": "1.0.0",
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300"
                }
            }
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com",
                "peer1.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://マシン2のipアドレス:7051",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----\n"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com",
                "hostnameOverride": "peer0.org1.example.com"
            }
        },
        "peer1.org1.example.com": {
            "url": "grpcs://マシン2のipアドレス:8051",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----\n"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com",
                "hostnameOverride": "peer1.org1.example.com"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://マシン2のipアドレス:7054",
            "caName": "ca-org1",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----\n"
            },
            "httpOptions": {
                "verify": false
            }
        }
    }
}

invokeやqueryの際にfabricのネットワークに接続する処理は以下のようになります。
asLocalhostfalseにしておかなければいけません。

await gateway.connect(ccpPath, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: false } });

そして肝がSDKコンテナのdocker-composeファイルです。
SDKアプリがコンテナではない場合も、マシン1でドメイン名の解釈を以下のように設定する必要があります。

docker-compose.yml
extra_hosts:
      - "peer0.org1.example.com:マシン2のipアドレス"
      - "peer1.org1.example.com:マシン2のipアドレス"
      - "peer0.org2.example.com:マシン2のipアドレス"
      - "peer1.org2.example.com:マシン2のipアドレス"
      - "orderer.example.com:マシン2のipアドレス"

参考記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1