はじめに
Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点を書きます。
今回はfabric-samplesのfirst-network
をネットワーク設定に用いるものとします。
fabric-node-sdkを使ったSDKアプリはdockerコンテナとして動いています。
状況を表したものが以下です。
マシン2ではCAやordererも動作していますが、図からは除いています。
設定
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のネットワークに接続する処理は以下のようになります。
asLocalhost
をfalse
にしておかなければいけません。
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アドレス"