Hyperledger Fabric Node.js客户端应用程序部署在不同的服务器上

时间:2020-03-10 17:31:09

标签: hyperledger-fabric hyperledger hyperledger-fabric-ca hyperledger-fabric-sdk-js

在这个特定错误上,我正在与Node.js Hyperledger Fabric客户端库苦苦挣扎:

我已经将我的区块链网络(Hyperledger Fabric 1.4)部署在具有IP的一台服务器上,并且从另一台服务器可见所有需要的端口。文档中提供的所有示例/示例都是通过本地主机引用网络。

如何启动客户端应用程序并将其指向网络的IP地址而不是本地主机或对等容器名称(例如peer0.org1.example.com)?

每个客户端应用程序是否必须将admin和user注册到其本地持久性存储中,或者它只能由网络本身完成一次(并且可能在以后的阶段从网络安装到应用程序)?我们在这里讨论的是在一台主机上的Dockerized网络,在另一台主机上的客户端应用程序(也为Dockerized)。

还有如何启动应用程序并连接到例如如果要求在调用createPeer方法时存在.pem证书文件,则通过GRCPS进行排序?

非常感谢您在这里提供的任何帮助。

EDIT,2020年3月12日:

我正在使用基本网络示例进行网络更改,以创建3个组织,每个组织3个对等方和5个Raft订购方。我已经复制了connection-org1.json文件,将localhost更改为我的外部服务器IP,并且出现以下错误:

2020-03-12T12:45:31.503Z - error: [SingleQueryHandler]: evaluate: message=No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"], stack=FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]
    at SingleQueryHandler.evaluate ((...)/network_files/javascript/node_modules/fabric-network/lib/impl/query/singlequeryhandler.js:44:17), name=FabricError
Failed to evaluate transaction: FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]

我能够使用外部IP上托管的网络在本地计算机上成功注册和注册admin和user。但是我无法使用连接配置文件查询链码。

这是我的连接配置文件:

{
    "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",
                "peer2.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://<IP>:7051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com",
                "hostnameOverride": "peer0.org1.example.com"
            },
            "endorsingPeer": true,
            "chaincodeQuery": true,
            "ledgerQuery": true,
            "eventSource": true
        },
        "peer1.org1.example.com": {
            "url": "grpcs://<IP>:8051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com",
                "hostnameOverride": "peer1.org1.example.com"
            }
        },
        "peer2.org1.example.com": {
            "url": "grpcs://<IP>:9051",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer2.org1.example.com",
                "hostnameOverride": "peer2.org1.example.com"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://<IP>:7054",
            "caName": "ca-org1",
            "tlsCACerts": {
                "pem": "<CERT>"
            },
            "httpOptions": {
                "verify": false
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果要使用基于fabric-tools映像或类似图像的docker服务进行测试,请设置CORE_PEER_ADDRESSCORE_PEER_LOCALMSPIDCORE_PEER_ID环境变量(在其他变量之间)。

如果要使用SDK开发应用程序,请配置连接配置文件:https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/connectionprofile.html

通常,您将自己的用户注册到客户端应用程序中。特权用户或服务会注册该用户,然后您使用提供的凭据将证书注册到您的应用中。对于基于fabric-tools的docker服务,请配置CORE_PEER_MSPCONFIGPATH环境变量。对于使用SDK开发的客户端应用,请将您的私钥存储在钱包(https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/wallet.html)中。

对于GRPCS,您需要组织的TLS CA证书。 Docker客户端中的CORE_PEER_TLS_ENABLEDCORE_PEER_TLS_ROOTCERT_FILE变量,或基于SDK的应用中的相应连接配置文件。

答案 1 :(得分:0)

在您将用于连接网络的connection-profile.yml文件中,只需将localhost更改为host_ip就可以了。